GCP - KMS Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

KMS

Informationen zu KMS:

pageGCP - KMS Enum

Beachten Sie, dass in KMS die Berechtigungen nicht nur von Organisationen, Ordnern und Projekten geerbt werden, sondern auch von Schlüsselbunden.

cloudkms.cryptoKeyVersions.useToDecrypt

Sie können diese Berechtigung verwenden, um Informationen mit dem Schlüssel zu entschlüsseln, über den Sie diese Berechtigung haben.

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 selbst Berechtigungen geben, um den Schlüssel zur Entschlüsselung von Informationen zu verwenden.

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

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Hier ist eine konzeptionelle Aufschlüsselung, wie diese Delegation funktioniert:

  1. Service Account A hat direkten Zugriff auf das Entschlüsseln unter Verwendung eines bestimmten Schlüssels in KMS.

  2. Service Account B erhält die Berechtigung useToDecryptViaDelegation. Dies ermöglicht es ihm, KMS auf Anfrage von Service Account A Daten zu entschlüsseln.

Die Verwendung dieser Berechtigung ist implizit in der Art und Weise, wie der KMS-Dienst Berechtigungen überprüft, wenn eine Entschlüsselungsanforderung gestellt wird.

Wenn Sie eine Standard-Entschlüsselungsanforderung über die Google Cloud KMS-API (in Python oder einer anderen Sprache) stellen, überprüft der Dienst, ob der anfordernde Dienstaccount über die erforderlichen Berechtigungen verfügt. Wenn die Anforderung von einem Dienstaccount mit der useToDecryptViaDelegation-Berechtigung gestellt wird, überprüft KMS, ob dieser Account berechtigt ist, im Namen der Entität, die den Schlüssel besitzt, eine Entschlüsselung anzufordern.

Einrichten der Delegation

  1. Definieren der benutzerdefinierten Rolle: Erstellen Sie eine YAML-Datei (z. B. custom_role.yaml), die die benutzerdefinierte Rolle definiert. Diese Datei sollte die cloudkms.cryptoKeyVersions.useToDecryptViaDelegation-Berechtigung enthalten. Hier ist ein Beispiel, wie diese Datei aussehen könnte:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Erstellen der benutzerdefinierten Rolle mit dem gcloud CLI: Verwenden Sie den folgenden Befehl, um die benutzerdefinierte Rolle in Ihrem Google Cloud-Projekt zu erstellen:

gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

Ersetzen Sie [YOUR_PROJECT_ID] durch Ihre Google Cloud-Projekt-ID.

  1. Weisen Sie die benutzerdefinierte Rolle einem Dienstkontos zu: Weisen Sie Ihre benutzerdefinierte Rolle einem Dienstkonto zu, das diese Berechtigung verwenden wird. Verwenden Sie den folgenden Befehl:

# 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"

Ersetzen Sie [IHRE_PROJEKT_ID] und [SERVICE_ACCOUNT_EMAIL] durch Ihre Projekt-ID und die E-Mail des Dienstkontos, respectively.

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated