GCP - KMS Privesc

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks

KMS

Informacje o KMS:

GCP - KMS Enum

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 omówienie, 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. Pozwala to na żądanie KMS 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.

Ustawienia dla Delegacji

  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] identyfikatorem swojego 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.

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Last updated