GCP - IAM 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.
IAM
Βρείτε περισσότερες πληροφορίες για το IAM στο:
GCP - IAM, Principals & Org Policies Enum
iam.roles.update (iam.roles.get)
Ένας attacker με τα αναφερόμενα permissions θα είναι σε θέση να ενημερώσει ένα role που σας έχει ανατεθεί και να σας δώσει επιπλέον permissions σε άλλους πόρους όπως:
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε τη δημιουργία, exploit και τον καθαρισμό ενός vuln environment εδώ και ένα python script για να καταχραστείτε αυτό το προνόμιο here. Για περισσότερες πληροφορίες δείτε την original research.
gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>
iam.roles.create & iam.serviceAccounts.setIamPolicy
Η iam.roles.create permission επιτρέπει τη δημιουργία προσαρμοσμένων ρόλων σε ένα έργο/οργάνωση. Στα χέρια ενός attacker, αυτό είναι επικίνδυνο επειδή του επιτρέπει να ορίσει νέα σύνολα permissions που μπορούν αργότερα να ανατεθούν σε οντότητες (για παράδειγμα, χρησιμοποιώντας το iam.serviceAccounts.setIamPolicy permission) με στόχο την κλιμάκωση προνομίων.
gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"
iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)
Ένας attacker που διαθέτει τα αναφερόμενα permissions θα μπορεί να request an access token that belongs to a Service Account, επομένως είναι δυνατό να request an access token ενός Service Account με περισσότερα privileges από τα δικά μας.
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε τη creation, exploit and cleaning of a vuln environment here και ένα python script για να εκμεταλλευτείτε αυτό το προνόμιο here. Για περισσότερες πληροφορίες δείτε την original research.
iam.serviceAccountKeys.create
Ένας επιτιθέμενος με τις αναφερόμενες άδειες θα μπορεί να create a user-managed key for a Service Account, το οποίο θα μας επιτρέψει να αποκτήσουμε πρόσβαση στο GCP ως αυτό το Service Account.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
Μπορείτε να βρείτε ένα script για να αυτοματοποιήσει τη δημιουργία, εκμετάλλευση και καθαρισμό ενός vuln περιβάλλοντος εδώ και ένα python script για να καταχραστείτε αυτό το προνόμιο εδώ. Για περισσότερες πληροφορίες δείτε την αρχική έρευνα.
Σημειώστε ότι iam.serviceAccountKeys.update won’t work to modify the key ενός SA επειδή για να γίνει αυτό χρειάζεται επίσης η άδεια iam.serviceAccountKeys.create.
iam.serviceAccounts.implicitDelegation
Εάν έχετε την iam.serviceAccounts.implicitDelegation άδεια σε ένα Service Account που έχει την iam.serviceAccounts.getAccessToken άδεια σε τρίτο Service Account, τότε μπορείτε να χρησιμοποιήσετε το implicitDelegation για να δημιουργήσετε ένα token για εκείνον τον τρίτο Service Account. Εδώ είναι ένα διάγραμμα για να βοηθήσει στην εξήγηση.

Σημειώστε ότι σύμφωνα με την documentation, η ανάθεση του gcloud λειτουργεί μόνο για να δημιουργήσει ένα token χρησιμοποιώντας τη μέθοδο generateAccessToken(). Οπότε εδώ δείχνεται πώς να αποκτήσετε ένα token χρησιμοποιώντας απευθείας το API:
curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer '"$(gcloud auth print-access-token)" \
-d '{
"delegates": ["projects/-/serviceAccounts/'"${DELEGATED_SERVICE_ACCOUNT}"'"],
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'
You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.
iam.serviceAccounts.signBlob
Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να υπογράψει αυθαίρετα payloads στο GCP. Έτσι θα είναι δυνατό να δημιουργηθεί ένα unsigned JWT του SA και στη συνέχεια να σταλεί ως blob για να υπογραφεί το JWT από το SA που στοχεύουμε. Για περισσότερες πληροφορίες read this.
You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here and here. For more information check the original research.
iam.serviceAccounts.signJwt
Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να υπογράψει καλά σχηματισμένα JSON web tokens (JWTs). Η διαφορά με την προηγούμενη μέθοδο είναι ότι αντί να κάνουμε την google να υπογράψει ένα blob που περιέχει ένα JWT, χρησιμοποιούμε τη μέθοδο signJWT που ήδη αναμένει ένα JWT. Αυτό το κάνει πιο εύχρηστο αλλά μπορείτε να υπογράψετε μόνο JWT και όχι οποιαδήποτε bytes.
You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.
iam.serviceAccounts.setIamPolicy
Ένας επιτιθέμενος με τα αναφερόμενα δικαιώματα θα μπορεί να προσθέσει IAM policies σε service accounts. Μπορείτε να το καταχραστείτε για να χορηγήσετε στον εαυτό σας τα permissions που χρειάζεστε για να impersonate το service account. Στο παρακάτω παράδειγμα χορηγούμε στον εαυτό μας το roles/iam.serviceAccountTokenCreator role πάνω στο ενδιαφέρον SA:
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"
# If you still have prblem grant yourself also this permission
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"
Μπορείτε να βρείτε ένα script για να αυτοματοποιήσετε τη creation, exploit and cleaning of a vuln environment here.
iam.serviceAccounts.actAs
Η iam.serviceAccounts.actAs permission είναι παρόμοια με την iam:PassRole permission from AWS. Είναι απαραίτητη για την εκτέλεση εργασιών, όπως την εκκίνηση ενός Compute Engine instance, καθώς παραχωρεί τη δυνατότητα να “actAs” ένα Service Account, εξασφαλίζοντας ασφαλή διαχείριση δικαιωμάτων. Χωρίς αυτήν, χρήστες μπορεί να αποκτήσουν αδικαιολόγητη πρόσβαση. Επιπλέον, η εκμετάλλευση του iam.serviceAccounts.actAs περιλαμβάνει διάφορες μεθόδους, καθεμία από τις οποίες απαιτεί ένα σύνολο permissions, σε αντίθεση με άλλες μεθόδους που χρειάζονται μόνο ένα.
Προσποίηση service account
Η προσποίηση ενός service account μπορεί να είναι πολύ χρήσιμη για να αποκτήσετε νέα και καλύτερα προνόμια. Υπάρχουν τρεις τρόποι με τους οποίους μπορείτε να impersonate another service account:
- Ταυτοποίηση using RSA private keys (αναφέρθηκε παραπάνω)
- Εξουσιοδότηση using Cloud IAM policies (αναφέρεται εδώ)
- Deploying jobs on GCP services (πιο εφαρμόσιμο στην παραβίαση ενός user account)
iam.serviceAccounts.getOpenIdToken
Ένας attacker με τις αναφερόμενες permissions θα μπορεί να δημιουργήσει ένα OpenID JWT. Αυτά χρησιμοποιούνται για να επιβεβαιώσουν ταυτότητα και δεν φέρουν απαραίτητα κάποια έμμεση authorization απέναντι σε έναν resource.
Σύμφωνα με αυτό το interesting post, είναι απαραίτητο να δηλώσετε το audience (την υπηρεσία στην οποία θέλετε να χρησιμοποιήσετε το token για να κάνετε authentication) και θα λάβετε ένα JWT υπογεγραμμένο από google που δηλώνει το service account και το audience του 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
Μερικές υπηρεσίες που υποστηρίζουν πιστοποίηση μέσω αυτού του είδους token είναι:
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (if using Google OIDC)
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να δημιουργήσετε ένα OpenID token εκ μέρους ενός λογαριασμού υπηρεσίας here.
Αναφορές
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

