GCP - Cloudfunctions Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Περισσότερες πληροφορίες σχετικά με τις Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να δημιουργήσει μια νέα Cloud Function με αυθαίρετο (κακόβουλο) κώδικα και να της αναθέσει έναν Service Account. Στη συνέχεια, να διαρρεύσει το token του Service Account από τα μεταδεδομένα για να κλιμακώσει τα δικαιώματα σε αυτόν. Ορισμένα δικαιώματα για να ενεργοποιηθεί η λειτουργία μπορεί να απαιτούνται.
Τα σενάρια εκμετάλλευσης για αυτή τη μέθοδο μπορούν να βρεθούν εδώ και εδώ και το προεγκατεστημένο αρχείο .zip μπορεί να βρεθεί εδώ.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να τροποποιήσει τον κώδικα μιας Function και ακόμη και να τροποποιήσει τον service account που είναι συνδεδεμένος με στόχο την εξαγωγή του token.
Για να αναπτύξετε cloud functions θα χρειαστείτε επίσης δικαιώματα actAs πάνω από τον προεπιλεγμένο service account υπολογιστή ή πάνω από τον service account που χρησιμοποιείται για την κατασκευή της εικόνας.
Ορισμένα επιπλέον δικαιώματα όπως η άδεια .call
για την έκδοση 1 των cloudfunctions ή ο ρόλος role/run.invoker
για να ενεργοποιήσετε τη λειτουργία μπορεί να απαιτούνται.
Αν λάβετε το σφάλμα Permission 'run.services.setIamPolicy' denied on resource...
είναι επειδή χρησιμοποιείτε την παράμετρο --allow-unauthenticated
και δεν έχετε αρκετά δικαιώματα γι' αυτό.
Το exploit script για αυτή τη μέθοδο μπορεί να βρεθεί εδώ.
cloudfunctions.functions.sourceCodeSet
Με αυτή την άδεια μπορείτε να αποκτήσετε μια υπογεγραμμένη διεύθυνση URL για να μπορέσετε να ανεβάσετε ένα αρχείο σε έναν κάδο λειτουργίας (αλλά ο κώδικας της λειτουργίας δεν θα αλλάξει, πρέπει ακόμα να τον ενημερώσετε)
Δεν είμαι σίγουρος πόσο χρήσιμη είναι μόνο αυτή η άδεια από την οπτική γωνία ενός επιτιθέμενου, αλλά καλό είναι να το γνωρίζουμε.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Δώστε στον εαυτό σας οποιαδήποτε από τα προηγούμενα .update
ή .create
δικαιώματα για να κλιμακώσετε.
cloudfunctions.functions.update
Έχοντας μόνο cloudfunctions
δικαιώματα, χωρίς iam.serviceAccounts.actAs
δεν θα μπορείτε να ενημερώσετε τη λειτουργία, ΟΠΟΤΕ ΑΥΤΟ ΔΕΝ ΕΙΝΑΙ ΜΙΑ ΕΓΚΥΡΗ ΚΛΙΜΑΚΩΣΗ.
Εάν έχετε πρόσβαση ανάγνωσης και εγγραφής πάνω στον κάδο, μπορείτε να παρακολουθείτε τις αλλαγές στον κώδικα και όποτε γίνεται ενημέρωση στον κάδο μπορείτε να ενημερώσετε τον νέο κώδικα με τον δικό σας κώδικα ώστε η νέα έκδοση της Cloud Function να εκτελείται με τον υποβληθέντα κώδικα με backdoor.
Μπορείτε να ελέγξετε περισσότερα σχετικά με την επίθεση στο:
GCP - Storage PrivescΩστόσο, δεν μπορείτε να το χρησιμοποιήσετε για να προ-συμβιβάσετε τρίτες Cloud Functions, επειδή αν δημιουργήσετε τον κάδο στον λογαριασμό σας και του δώσετε δημόσιες άδειες ώστε το εξωτερικό έργο να μπορεί να γράψει πάνω του, θα λάβετε το εξής σφάλμα:
Ωστόσο, αυτό θα μπορούσε να χρησιμοποιηθεί για επιθέσεις DoS.
Όταν δημιουργείται μια Cloud Function, μια νέα εικόνα docker αποστέλλεται στο Artifact Registry του έργου. Προσπάθησα να τροποποιήσω την εικόνα με μια νέα και ακόμη και να διαγράψω την τρέχουσα εικόνα (και την εικόνα cache
) και τίποτα δεν άλλαξε, η cloud function συνεχίζει να λειτουργεί. Επομένως, ίσως να είναι δυνατό να εκμεταλλευτείτε μια επίθεση Race Condition όπως με τον κάδο για να αλλάξετε το docker container που θα εκτελείται, αλλά απλά τροποποιώντας την αποθηκευμένη εικόνα δεν είναι δυνατό να συμβιβάσετε την Cloud Function.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)