GCP - KMS Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

KMS

Informations sur KMS :

GCP - KMS Enum

Notez que dans KMS, les permission ne sont pas seulement héritées des Orgs, Folders and Projects mais aussi des Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

You can use this permission to decrypt information with the key you have this permission over.

Décrypter des données en utilisant une clé 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

Un attaquant disposant de cette permission pourrait s’accorder des autorisations pour utiliser la clĂ© afin de dĂ©chiffrer des informations.

S'accorder le rÎle de déchiffreur KMS ```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Voici une explication conceptuelle du fonctionnement de cette délégation :

  1. Compte de service A dispose d’un accĂšs direct pour dĂ©chiffrer en utilisant une clĂ© spĂ©cifique dans KMS.
  2. Compte de service B se voit accorder la permission useToDecryptViaDelegation. Cela lui permet de demander à KMS de déchiffrer des données au nom du Compte de service A.

L’utilisation de cette permission est implicite dans la maniĂšre dont le service KMS vĂ©rifie les permissions lorsqu’une requĂȘte de dĂ©chiffrement est effectuĂ©e.

Lorsque vous effectuez une requĂȘte de dĂ©chiffrement standard en utilisant la Google Cloud KMS API (en Python ou un autre langage), le service vĂ©rifie si le compte de service demandeur dispose des permissions nĂ©cessaires. Si la requĂȘte est effectuĂ©e par un compte de service possĂ©dant la permission useToDecryptViaDelegation, KMS vĂ©rifie si ce compte est autorisĂ© Ă  demander le dĂ©chiffrement au nom de l’entitĂ© qui possĂšde la clĂ©.

Mise en place de la délégation

  1. Définir le rÎle personnalisé : Créez un fichier YAML (par ex., custom_role.yaml) qui définit le rÎle personnalisé. Ce fichier doit inclure la permission cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Voici un exemple de ce à quoi ce fichier pourrait ressembler :
Définition YAML du rÎle personnalisé ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. Créer le rÎle personnalisé en utilisant le gcloud CLI : Utilisez la commande suivante pour créer le rÎle personnalisé dans votre projet Google Cloud :
Créer un rÎle KMS personnalisé ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` Remplacez [YOUR_PROJECT_ID] par l'ID de projet Google Cloud.
  1. Accorder le rÎle personnalisé à un compte de service : Attribuez votre rÎle personnalisé à un compte de service qui utilisera cette permission. Utilisez la commande suivante :
Accorder le rÎle personnalisé au compte de service ```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”

Remplacez `[YOUR_PROJECT_ID]` et `[SERVICE_ACCOUNT_EMAIL]` par votre ID de projet et l'adresse e-mail du compte de service, respectivement.

</details>

> [!TIP]
> Apprenez & pratiquez AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Soutenez HackTricks</summary>
>
> - Consultez les [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Rejoignez le** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ou le [**telegram group**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des hacking tricks en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>