GCP - KMS Privesc

Wsparcie dla HackTricks

KMS

Informacje o KMS:

Zauważ, że w KMS uprawnienia nie są tylko dziedziczone z Organizacji, Folderów i Projektów, ale także z Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Możesz użyć tego uprawnienia do deszyfrowania informacji za pomocą klucza, nad którym masz to uprawnienie.

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

Napastnik z tym uprawnieniem mógłby przyznać sobie uprawnienia do używania klucza do odszyfrowania informacji.

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

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Oto koncepcyjne wyjaśnienie, jak działa ta delegacja:

  1. Konto usługi A ma bezpośredni dostęp do deszyfrowania za pomocą konkretnego klucza w KMS.

  2. Konto usługi B otrzymuje uprawnienie useToDecryptViaDelegation. Umożliwia to żądanie KMS do deszyfrowania danych w imieniu Konta usługi A.

Użycie tego uprawnienia jest implicitne w sposobie, w jaki usługa KMS sprawdza uprawnienia podczas składania żądania deszyfrowania.

Gdy składasz standardowe żądanie deszyfrowania za pomocą interfejsu API Google Cloud KMS (w Pythonie lub innym języku), usługa sprawdza, czy konto usługi składające żądanie ma niezbędne uprawnienia. Jeśli żądanie jest składane przez konto usługi z uprawnieniem useToDecryptViaDelegation, KMS weryfikuje, czy to konto ma prawo żądać deszyfrowania w imieniu podmiotu, który jest właścicielem klucza.

Setting Up for Delegation

  1. Zdefiniuj niestandardową rolę: Utwórz plik YAML (np. custom_role.yaml), który definiuje niestandardową rolę. Plik ten powinien zawierać uprawnienie cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Oto przykład, jak może wyglądać ten plik:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Utwórz niestandardową rolę za pomocą gcloud CLI: Użyj następującego polecenia, aby utworzyć niestandardową rolę w swoim projekcie Google Cloud:

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

Zastąp [YOUR_PROJECT_ID] swoim identyfikatorem projektu Google Cloud.

  1. Przyznaj niestandardową rolę kontu usługi: Przypisz swoją niestandardową rolę do konta usługi, które będzie korzystać z tego uprawnienia. Użyj następującego polecenia:

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

Zamień [YOUR_PROJECT_ID] i [SERVICE_ACCOUNT_EMAIL] na identyfikator swojego projektu i adres e-mail konta usługi, odpowiednio.

Wsparcie dla HackTricks

Last updated