GCP - IAM Privesc
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
IAM
Encuentra más información sobre IAM en:
GCP - IAM, Principals & Org Policies Enum
iam.roles.update (iam.roles.get)
Un atacante con los permisos mencionados podrá actualizar un rol asignado a ti y otorgarte permisos adicionales en otros recursos como:
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Puedes encontrar un script para automatizar la creation, exploit and cleaning of a vuln environment here y un python script para abusar de este privilegio here. Para más información consulta la original research.
gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>
iam.roles.create & iam.serviceAccounts.setIamPolicy
El permiso iam.roles.create permite la creación de roles personalizados en un proyecto/organización. En manos de un atacante, esto es peligroso porque le permite definir nuevos conjuntos de permisos que luego pueden asignarse a entidades (por ejemplo, usando el permiso iam.serviceAccounts.setIamPolicy) con el objetivo de escalar privilegios.
gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"
iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)
Un atacante con los permisos mencionados podrá solicitar un access token que pertenezca a una Service Account, por lo que es posible solicitar un access token de una Service Account con más privilegios que la nuestra.
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script en python para abusar de este privilegio aquí. Para más información consulta la investigación original.
iam.serviceAccountKeys.create
Un atacante con los permisos mencionados podrá crear una clave gestionada por el usuario para una Service Account, lo que nos permitirá acceder a GCP como esa Service Account.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script en python para abusar de este privilegio aquí. Para más información consulta la investigación original.
Ten en cuenta que iam.serviceAccountKeys.update no funcionará para modificar la clave de una cuenta de servicio (SA) porque para ello también se necesita el permiso iam.serviceAccountKeys.create.
iam.serviceAccounts.implicitDelegation
Si tienes el permiso iam.serviceAccounts.implicitDelegation sobre una cuenta de servicio que tiene el permiso iam.serviceAccounts.getAccessToken en una tercera cuenta de servicio, entonces puedes usar implicitDelegation para crear un token para esa tercera cuenta de servicio. Aquí hay un diagrama para ayudar a explicarlo.

Ten en cuenta que, según la documentación, la delegación de gcloud solo funciona para generar un token usando el método generateAccessToken(). Así que aquí tienes cómo obtener un token usando la API directamente:
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"]
}'
Puedes encontrar un script para automatizar la creation, exploit and cleaning of a vuln environment here y un script en python para abusar de este privilegio here. Para más información consulta la original research.
iam.serviceAccounts.signBlob
Un atacante con los permisos mencionados podrá firmar cargas arbitrarias en GCP. Por tanto será posible crear un JWT sin firmar del SA y luego enviarlo como un blob para que el JWT sea firmado por el SA al que apuntamos. Para más información read this.
Puedes encontrar un script para automatizar la creation, exploit and cleaning of a vuln environment here y un script en python para abusar de este privilegio here y here. Para más información consulta la original research.
iam.serviceAccounts.signJwt
Un atacante con los permisos mencionados podrá firmar JWT bien formados (JWTs). La diferencia con el método anterior es que en lugar de hacer que Google firme un blob que contiene un JWT, usamos el método signJWT que ya espera un JWT. Esto lo hace más fácil de usar, pero solo puedes firmar JWT en lugar de cualquier secuencia de bytes.
Puedes encontrar un script para automatizar la creation, exploit and cleaning of a vuln environment here y un script en python para abusar de este privilegio here. Para más información consulta la original research.
iam.serviceAccounts.setIamPolicy
Un atacante con los permisos mencionados podrá agregar políticas IAM a service accounts. Puedes abusar de esto para concederte los permisos que necesitas para suplantar el service account. En el siguiente ejemplo nos estamos concediendo el rol roles/iam.serviceAccountTokenCreator sobre el SA de interés:
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"
Puedes encontrar un script para automatizar la creation, exploit and cleaning of a vuln environment here.
iam.serviceAccounts.actAs
La iam.serviceAccounts.actAs permission es como la iam:PassRole permission from AWS. Es esencial para ejecutar tareas, como iniciar una instancia de Compute Engine, ya que otorga la capacidad de “actAs” a una Service Account, asegurando una gestión segura de permisos. Sin esto, los usuarios podrían obtener acceso indebido. Además, explotar la iam.serviceAccounts.actAs implica varios métodos, cada uno requiriendo un conjunto de permisos, en contraste con otros métodos que necesitan solo uno.
Service account impersonation
Impersonar una service account puede ser muy útil para obtener nuevos y mejores privilegios. Hay tres maneras en las que puedes 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 atacante con los permisos mencionados podrá generar un OpenID JWT. Estos se usan para afirmar identidad y no necesariamente llevan ninguna autorización implícita contra un recurso.
Según este interesting post, es necesario indicar el audience (servicio donde quieres usar el token para autenticarte) y recibirás un JWT firmado por google indicando la service account y el audience del JWT.
You can generate an OpenIDToken (if you have the access) with:
# 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
Entonces puedes usarlo para acceder al servicio con:
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
Algunos servicios que admiten autenticación mediante este tipo de tokens son:
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (if using Google OIDC)
Puedes encontrar un ejemplo de cómo crear un token OpenID en nombre de una cuenta de servicio aquí.
Referencias
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

