GCP - KMS Privesc

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir 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 et pratiquez le 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;">\
> Apprenez et pratiquez le 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;">
> Apprenez et pratiquez le 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>Soutenir HackTricks</summary>
>
> - Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
> - **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
>
> </details>