GCP - KMS Privesc

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

KMS

Informationen zu KMS:

GCP - KMS Enum

Beachte, dass in KMS die Berechtigungen nicht nur vererbt werden von Orgs, Folders und Projects, sondern auch von Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Du kannst diese Berechtigung verwenden, um Daten mit dem Key zu entschlüsseln, für den du diese Berechtigung besitzt.

Daten mit KMS key entschlüsseln ```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

Ein Angreifer mit dieser Berechtigung könnte sich Berechtigungen geben, um den Schlüssel zur Entschlüsselung von Informationen zu verwenden.

Weise dir die KMS-Decrypter-Rolle zu ```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Hier eine konzeptionelle Übersicht, wie diese Delegation funktioniert:

  1. Service Account A hat direkten Zugriff, um mit einem bestimmten Key in KMS zu decrypten.
  2. Service Account B erhält die Berechtigung useToDecryptViaDelegation. Dadurch kann es KMS anfragen, Daten im Auftrag von Service Account A zu decrypten.

Die Verwendung dieser Berechtigung ist implizit in der Art, wie der KMS-Service Berechtigungen prüft, wenn eine decryption-Anfrage gestellt wird.

Wenn Sie eine normale decryption-Anfrage über die Google Cloud KMS API (in Python oder einer anderen Sprache) stellen, prüft der Service ob das anfragende Service Account die notwendigen Berechtigungen hat. Wird die Anfrage von einem Service Account mit der useToDecryptViaDelegation-Berechtigung gestellt, verifiziert KMS, ob dieses Service Account berechtigt ist, eine decryption im Namen der Entität anzufordern, die den Key besitzt.

Einrichtung für Delegation

  1. Define the Custom Role: Erstellen Sie eine YAML-Datei (z. B. custom_role.yaml), die die custom role definiert. Diese Datei sollte die Berechtigung cloudkms.cryptoKeyVersions.useToDecryptViaDelegation enthalten. Hier ein Beispiel, wie diese Datei aussehen könnte:
YAML-Definition der Custom Role ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. Erstelle die benutzerdefinierte Rolle mit der gcloud CLI: Verwende den folgenden Befehl, um die benutzerdefinierte Rolle in deinem Google Cloud-Projekt zu erstellen:
Benutzerdefinierte KMS-Rolle erstellen ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` Ersetze `[YOUR_PROJECT_ID]` durch deine Google Cloud-Projekt-ID.
  1. Vergib die benutzerdefinierte Rolle an ein Servicekonto: Weise deine benutzerdefinierte Rolle einem Servicekonto zu, das diese Berechtigung verwenden wird. Verwende den folgenden Befehl:
Benutzerdefinierte Rolle an Servicekonto vergeben ```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”

Ersetze `[YOUR_PROJECT_ID]` und `[SERVICE_ACCOUNT_EMAIL]` durch deine Projekt-ID bzw. die E-Mail des Servicekontos.

</details>

> [!TIP]
> Lernen & üben Sie AWS Hacking:<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;">\
> Lernen & üben Sie GCP Hacking: <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;">
> Lernen & üben Sie Azure Hacking: <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>Unterstützen Sie HackTricks</summary>
>
> - Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
> - **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
>
> </details>