GCP - IAM Privesc

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

IAM

Βρείτε περισσότερες πληροφορίες σχετικά με το IAM στο:

pageGCP - IAM, Principals & Org Policies Enum

iam.roles.update (iam.roles.get)

Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να ενημερώσει έναν ρόλο που σας έχει ανατεθεί και να σας δώσει επιπλέον δικαιώματα σε άλλους πόρους όπως:

gcloud iam roles update <rol name> --project <project> --add-permissions <permission>

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα σε Python για την κατάχρηση αυτού του προνομίου εδώ. Για περισσότερες πληροφορίες, ανατρέξτε στην αρχική έρευνα.

iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)

Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να ζητήσει ένα access token που ανήκει σε έναν λογαριασμό υπηρεσίας, οπότε είναι δυνατόν να ζητηθεί ένα access token ενός λογαριασμού υπηρεσίας με περισσότερα προνόμια από τα δικά μας.

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα σε Python για την κατάχρηση αυτού του προνομίου εδώ. Για περισσότερες πληροφορίες, ανατρέξτε στην αρχική έρευνα.

iam.serviceAccountKeys.create

Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να δημιουργήσει ένα κλειδί που διαχειρίζεται ο χρήστης για έναν λογαριασμό υπηρεσίας, το οποίο θα μας επιτρέπει να έχουμε πρόσβαση στο GCP ως αυτός ο λογαριασμός υπηρεσίας.

gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json

gcloud auth activate-service-account --key-file=sa_cred.json

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.

Σημειώστε ότι iam.serviceAccountKeys.update δεν λειτουργεί για την τροποποίηση του κλειδιού ενός Λογαριασμού Υπηρεσίας επειδή για να το κάνετε αυτό, απαιτείται επίσης η άδεια iam.serviceAccountKeys.create.

iam.serviceAccounts.implicitDelegation

Εάν έχετε την άδεια iam.serviceAccounts.implicitDelegation σε έναν Λογαριασμό Υπηρεσίας που έχει την άδεια iam.serviceAccounts.getAccessToken σε έναν τρίτο Λογαριασμό Υπηρεσίας, τότε μπορείτε να χρησιμοποιήσετε την implicitDelegation για να δημιουργήσετε ένα τοκέαν για αυτόν τον τρίτο Λογαριασμό Υπηρεσίας. Εδώ υπάρχει ένα διάγραμμα για να βοηθήσει στην εξήγηση.

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.

Σημειώστε ότι σύμφωνα με την τεκμηρίωση, η ανάθεση λειτουργεί μόνο για τη δημιουργία ενός τοκέαν χρησιμοποιώντας τη μέθοδο generateAccessToken().

iam.serviceAccounts.signBlob

Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να υπογράφει αυθαίρετα φορτία στο GCP. Έτσι, θα είναι δυνατόν να δημιουργήσει ένα μη υπογεγραμμένο JWT του Λογαριασμού Υπηρεσίας και στη συνέχεια να το στείλει ως ένα blob για να υπογραφεί το JWT από τον Λογαριασμό Υπηρεσίας που στοχεύουμε. Για περισσότερες πληροφορίες διαβάστε αυτό.

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ και εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.

iam.serviceAccounts.signJwt

Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να υπογράφει καλοσχηματισμένα JSON web tokens (JWTs). Η διαφορά με την προηγούμενη μέθοδο είναι ότι αντί να κάνει τη Google να υπογράψει ένα blob που περιέχει ένα JWT, χρησιμοποιούμε τη μέθοδο signJWT που αναμένει ήδη ένα JWT. Αυτό καθιστά τη χρήση ευκολότερη, αλλά μπορείτε να υπογράψετε μόνο JWT αντί για οποιαδήποτε bytes.

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ και ένα πρόγραμμα Python για την κατάχρηση αυτής της εξουσίας εδώ. Για περισσότερες πληροφορίες, ελέγξτε την αρχική έρευνα.

iam.serviceAccounts.setIamPolicy

Ένας επιτιθέμενος με τις προαναφερθείσες άδειες θα μπορεί να προσθέτει πολιτικές IAM σε λογαριασμούς υπηρεσίας. Μπορείτε να το καταχραστείτε για να χορηγήσετε στον εαυτό σας τις άδειες που χρειάζεστε για να προσομοιώσετε τον λογαριασμό υπηρεσίας. Στο παρ

gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"

Μπορείτε να βρείτε ένα σενάριο για την αυτοματοποίηση της δημιουργίας, εκμετάλλευσης και καθαρισμού ενός ευπάθους περιβάλλοντος εδώ.

iam.serviceAccounts.actAs

Η άδεια iam.serviceAccounts.actAs είναι παρόμοια με την άδεια iam:PassRole από το AWS. Είναι απαραίτητη για την εκτέλεση εργασιών, όπως η έναρξη μιας εικονικής μηχανής Compute Engine, καθώς παρέχει τη δυνατότητα "να ενεργήσει ως" ένας λογαριασμός υπηρεσίας, εξασφαλίζοντας έτσι την ασφαλή διαχείριση των δικαιωμάτων. Χωρίς αυτό, οι χρήστες μπορεί να αποκτήσουν μη δικαιολογημένη πρόσβαση. Επιπλέον, η εκμετάλλευση της iam.serviceAccounts.actAs περιλαμβάνει διάφορες μεθόδους, καθεμία από τις οποίες απαιτεί ένα σύνολο από δικαιώματα, σε αντίθεση με άλλες μεθόδους που χρειάζονται μόνο ένα.

Προσομοίωση λογαριασμού υπηρεσίας

Η προσομοίωση ενός λογαριασμού υπηρεσίας μπορεί να είναι πολύ χρήσιμη για την απόκτηση νέων και καλύτερων δικαιωμάτων. Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να προσομοιώσετε έναν άλλο λογαριασμό υπηρεσίας:

  • Πιστοποίηση χρησιμοποιώντας ιδιωτικά κλειδιά RSA (καλύπτεται παραπάνω)

  • Εξουσιοδότηση χρησιμοποιώντας πολιτικές Cloud IAM (καλύπτεται εδώ)

  • Ανάπτυξη εργασιών σε υπηρεσίες GCP (περισσότερο εφαρμόσιμο στην παραβίαση ενός λογαριασμού χρήστη)

iam.serviceAccounts.getOpenIdToken

Ένας επιτιθέμενος με τις αναφερόμενες δικαιώματα θα μπορεί να δημιουργήσει ένα OpenID JWT. Αυτά χρησιμοποιούνται για να επιβεβαιώσουν την ταυτότητα και δεν απαιτούν απαραίτητα κάποια συναφή εξουσιοδότηση για ένα πόρο.

Σύμφωνα με αυτήν την ενδιαφέρουσα ανάρτηση, είναι απαραίτητο να υποδείξετε το κοινό (υπηρεσία όπου θέλετε να χρησιμοποιήσετε το τοκέν για την πιστοποίηση) και θα λάβετε ένα JWT που έχει υπογραφεί από την Google και υποδεικνύει τον λογαριασμό υπηρεσίας και το κοινό του JWT.

Μπορείτε να δημιουργήσετε ένα OpenIDToken (αν έχετε πρόσβαση) με:

# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com

Στη συνέχεια, μπορείτε απλά να το χρησιμοποιήσετε για να αποκτήσετε πρόσβαση στην υπηρεσία με:

curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app

Ορισμένες υπηρεσίες που υποστηρίζουν την πιστοποίηση μέσω αυτού του είδους των διακριτικών είναι:

Μπορείτε να βρείτε ένα παράδειγμα για το πώς να δημιουργήσετε ένα καινούργιο διακριτικό OpenID εκ μέρους ενός λογαριασμού υπηρεσίας εδώ.

Αναφορές

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated