GCP - KMS 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

KMS

Informações sobre KMS:

GCP - KMS Enum

Observe que no KMS as permissões não são apenas herdadas de Orgs, Folders and Projects 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.

Descriptografar dados usando a chave KMS ```bash 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 conceder a si mesmo permissões para usar a chave para descriptografar informações.

Grant yourself KMS decrypter role ```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Segue um resumo conceitual de como essa delegação funciona:

  1. Conta de Serviço A tem acesso direto para descriptografar usando uma chave específica no KMS.
  2. Conta de Serviço B tem a permissão useToDecryptViaDelegation concedida. Isso permite que ela solicite ao KMS que descriptografe dados em nome da Conta de Serviço A.

O uso desta permissão é implícito na forma como o serviço KMS verifica permissões quando um pedido de descriptografia é realizado.

Quando você faz uma solicitação padrão de descriptografia usando a Google Cloud KMS API (em Python ou outra linguagem), o serviço verifica se a conta de serviço que está solicitando possui as permissões necessárias. Se o pedido for feito por uma conta de serviço com a permissão useToDecryptViaDelegation, o KMS verifica se essa conta está autorizada a solicitar a descriptografia em nome da entidade que possui a chave.

Configurando para Delegação

  1. Defina a função personalizada: Crie um arquivo YAML (por exemplo, custom_role.yaml) que defina a função personalizada. Esse arquivo deve incluir a permissão cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. A seguir um exemplo de como esse arquivo pode ser:
Definição YAML da função personalizada ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. Crie a Função Personalizada Usando o gcloud CLI: Use o seguinte comando para criar a função personalizada no seu projeto Google Cloud:
Criar função KMS personalizada ```bash 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 custom role a uma service account: Atribua seu custom role a uma service account que usará essa permissão. Use o seguinte comando:
Conceder custom role à service account ```bash # 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 email da service account, respectivamente.

</details>

> [!TIP]
> Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Support HackTricks</summary>
>
> - Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
> - **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
>
> </details>