GCP - IAM Privesc
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
IAM
Pour plus dâinformations sur IAM :
GCP - IAM, Principals & Org Policies Enum
iam.roles.update (iam.roles.get)
Un attaquant disposant des permissions mentionnĂ©es pourra mettre Ă jour un rĂŽle qui vous est assignĂ© et vous attribuer des permissions supplĂ©mentaires sur dâautres ressources telles que :
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Vous pouvez trouver un script pour automatiser la crĂ©ation, lâexploit et le nettoyage dâun vuln environment ici et un script python pour abuser de ce privilĂšge ici. Pour plus dâinformations, consultez la recherche originale.
gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>
iam.roles.create & iam.serviceAccounts.setIamPolicy
La permission iam.roles.create permet la crĂ©ation de rĂŽles personnalisĂ©s dans un projet/une organisation. Entre les mains dâun attaquant, cela est dangereux car cela lui permet de dĂ©finir de nouveaux ensembles dâautorisations qui peuvent ensuite ĂȘtre attribuĂ©s Ă des entitĂ©s (par exemple, en utilisant la permission iam.serviceAccounts.setIamPolicy) dans le but dâobtenir une Ă©lĂ©vation de privilĂšges.
gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"
iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)
Un attaquant disposant des permissions mentionnĂ©es pourra demander un access token appartenant Ă un Service Account, il est donc possible de demander un access token dâun Service Account disposant de privilĂšges supĂ©rieurs aux nĂŽtres.
Pour une variante resource-driven oĂč du code contrĂŽlĂ© par lâattaquant vole un managed Vertex AI Agent Engine runtime token depuis le metadata service et le rĂ©utilise en tant que Vertex AI service agent, consultez :
GCP - Vertex AI Post Exploitation
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un script python pour abuser de ce privilĂšge here. Pour plus dâinformations, consultez la original research.
iam.serviceAccountKeys.create
Un attaquant disposant des permissions mentionnĂ©es pourra crĂ©er une clĂ© gĂ©rĂ©e par lâutilisateur pour un Service Account, ce qui nous permettra dâaccĂ©der Ă GCP en tant que ce Service Account.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un script python pour abuser de ce privilĂšge here. Pour plus dâinformations, consultez la original research.
Notez que iam.serviceAccountKeys.update ne permettra pas de modifier la clĂ© dâun SA car, pour cela, la permission iam.serviceAccountKeys.create est Ă©galement nĂ©cessaire.
iam.serviceAccounts.implicitDelegation
Si vous disposez de la permission iam.serviceAccounts.implicitDelegation sur un compte de service qui possÚde la permission iam.serviceAccounts.getAccessToken sur un troisiÚme compte de service, alors vous pouvez utiliser implicitDelegation pour créer un token pour ce troisiÚme compte de service. Voici un diagramme pour aider à expliquer.

Notez que dâaprĂšs la documentation, la dĂ©lĂ©gation de gcloud ne fonctionne que pour gĂ©nĂ©rer un token en utilisant la mĂ©thode generateAccessToken(). Voici donc comment obtenir un token en utilisant lâAPI directement:
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"]
}'
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un python script pour exploiter ce privilĂšge here. Pour plus dâinformations, consultez la original research.
iam.serviceAccounts.signBlob
Un attaquant disposant des permissions mentionnĂ©es pourra signer des payloads arbitraires dans GCP. Il sera donc possible de crĂ©er un JWT non signĂ© du SA puis de lâenvoyer en tant que blob pour faire signer le JWT par le SA ciblĂ©. Pour plus dâinformations read this.
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un python script pour exploiter ce privilĂšge here et here. Pour plus dâinformations, consultez la original research.
iam.serviceAccounts.signJwt
Un attaquant disposant des permissions mentionnĂ©es pourra signer des JSON Web Tokens (JWTs) bien formĂ©s. La diffĂ©rence avec la mĂ©thode prĂ©cĂ©dente est que au lieu de faire signer par google un blob contenant un JWT, nous utilisons la mĂ©thode signJWT qui attend dĂ©jĂ un JWT. Cela la rend plus simple Ă utiliser mais vous ne pouvez signer que des JWT au lieu de nâimporte quels octets.
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un python script pour exploiter ce privilĂšge here. Pour plus dâinformations, consultez la original research.
iam.serviceAccounts.setIamPolicy
Un attaquant disposant des permissions mentionnĂ©es pourra ajouter des politiques IAM aux comptes de service. Vous pouvez en abuser pour vous attribuer les permissions nĂ©cessaires pour vous faire passer pour le compte de service. Dans lâexemple suivant, nous nous attribuons le rĂŽle roles/iam.serviceAccountTokenCreator sur le SA intĂ©ressant :
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"
Vous pouvez trouver un script pour automatiser la creation, exploit and cleaning of a vuln environment here.
iam.serviceAccounts.actAs
La permission iam.serviceAccounts.actAs est comme la permission iam:PassRole permission from AWS. Elle est essentielle pour exĂ©cuter des tĂąches, comme lancer une instance Compute Engine, car elle accorde la capacitĂ© de âactAsâ un Service Account, garantissant une gestion sĂ©curisĂ©e des permissions. Sans cela, des utilisateurs pourraient obtenir un accĂšs indĂ». De plus, exploiter iam.serviceAccounts.actAs implique diverses mĂ©thodes, chacune nĂ©cessitant un ensemble de permissions, contrairement Ă dâautres mĂ©thodes qui nâen nĂ©cessitent quâune seule.
Service account impersonation
Impersonating a service account can be very useful to obtain new and better privileges. Il existe trois façons dont vous pouvez impersonate another service account:
- Authentication using RSA private keys (covered above)
- Authorization using Cloud IAM policies (covered here)
- Deploying jobs on GCP services (more applicable to the compromise of a user account)
iam.serviceAccounts.getOpenIdToken
Un attaquant disposant des permissions mentionnĂ©es pourra gĂ©nĂ©rer un OpenID JWT. Ceux-ci sont utilisĂ©s pour affirmer une identitĂ© et nâapportent pas nĂ©cessairement dâautorisation implicite sur une ressource.
Selon ce interesting post, il est nĂ©cessaire dâindiquer lâaudience (le service auprĂšs duquel vous souhaitez utiliser le token pour vous authentifier) et vous recevrez un JWT signĂ© par google indiquant le service account et lâaudience du JWT.
Vous pouvez gĂ©nĂ©rer un OpenIDToken (si vous avez lâaccĂšs) avec:
# 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
Ensuite, vous pouvez simplement lâutiliser pour accĂ©der au service avec :
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
Certains services prenant en charge lâauthentification via ce type de tokens sont :
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (if using Google OIDC)
Vous pouvez trouver un exemple montrant comment crĂ©er un OpenID token au nom dâun service account ici.
Références
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

