GCP - KMS Privesc
Reading time: 4 minutes
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.
KMS
Informações sobre KMS:
Observe que no KMS as permissões não são apenas herdadas de Orgs, Pastas e Projetos, mas também de Keyrings.
cloudkms.cryptoKeyVersions.useToDecrypt
Você pode usar esta permissão para descriptografar informações com a chave sobre a qual você tem esta permissão.
gcloud kms decrypt \
--location=[LOCATION] \
--keyring=[KEYRING_NAME] \
--key=[KEY_NAME] \
--version=[KEY_VERSION] \
--ciphertext-file=[ENCRYPTED_FILE_PATH] \
--plaintext-file=[DECRYPTED_FILE_PATH]
cloudkms.cryptoKeys.setIamPolicy
Um atacante com essa permissão poderia dar a si mesmo permissões para usar a chave para descriptografar informações.
gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
--keyring [KEYRING_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
Aqui está uma explicação conceitual de como essa delegação funciona:
- Service Account A tem acesso direto para descriptografar usando uma chave específica no KMS.
- Service Account B recebe a permissão
useToDecryptViaDelegation
. Isso permite que ela solicite ao KMS para descriptografar dados em nome da Service Account A.
O uso dessa permissão é implícito na forma como o serviço KMS verifica permissões quando uma solicitação de descriptografia é feita.
Quando você faz uma solicitação de descriptografia padrão usando a API do Google Cloud KMS (em Python ou outra linguagem), o serviço verifica se a conta de serviço solicitante tem as permissões necessárias. Se a solicitação for feita por uma conta de serviço com a permissão useToDecryptViaDelegation
, o KMS verifica se essa conta tem permissão para solicitar a descriptografia em nome da entidade que possui a chave.
Configurando para Delegação
- Defina o Papel Personalizado: Crie um arquivo YAML (por exemplo,
custom_role.yaml
) que define o papel personalizado. Este arquivo deve incluir a permissãocloudkms.cryptoKeyVersions.useToDecryptViaDelegation
. Aqui está um exemplo de como esse arquivo pode parecer:
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
- Crie o Papel Personalizado Usando o gcloud CLI: Use o seguinte comando para criar o papel personalizado em seu projeto do Google Cloud:
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml
Substitua [YOUR_PROJECT_ID]
pelo ID do seu projeto do Google Cloud.
- Conceda a Função Personalizada a uma Conta de Serviço: Atribua sua função personalizada a uma conta de serviço que usará esta permissão. Use o seguinte comando:
# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[SERVICE_ACCOUNT_B_EMAIL]" \
--role "projects/[PROJECT_ID]/roles/[CUSTOM_ROLE_ID]"
# Give this permission over the project to be able to impersonate any SA
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"
Substitua [YOUR_PROJECT_ID]
e [SERVICE_ACCOUNT_EMAIL]
pelo ID do seu projeto e pelo e-mail da conta de serviço, respectivamente.
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.