GCP - KMS Privesc

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

KMS

Informacje na temat KMS:

pageGCP - KMS Enum

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

cloudkms.cryptoKeyVersions.useToDecrypt

Możesz użyć tego uprawnienia do odszyfrowania informacji przy użyciu klucza, na 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

Atakujący posiadający to uprawnienie mógłby przyznać sobie uprawnienia do korzystania z klucza w celu 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 odszyfrowywania za pomocą określonego klucza w KMS.

  2. Konto usługi B otrzymuje uprawnienie useToDecryptViaDelegation. Pozwala to na żądanie KMS odszyfrowania danych w imieniu konta usługi A.

Użycie tego uprawnienia jest domyślne w sposób, w jaki usługa KMS sprawdza uprawnienia, gdy żądanie odszyfrowania jest wykonywane.

Podczas standardowego żądania odszyfrowania za pomocą interfejsu API Google Cloud KMS (w Pythonie lub innym języku), usługa sprawdza, czy konto usługi żądającej ma odpowiednie uprawnienia. Jeśli żądanie jest wykonywane przez konto usługi z uprawnieniem useToDecryptViaDelegation, KMS sprawdza, czy to konto ma zezwolenie na żądanie odszyfrowania w imieniu podmiotu, który jest właścicielem klucza.

Konfiguracja delegacji

  1. Zdefiniuj niestandardową rolę: Utwórz plik YAML (np. custom_role.yaml), który definiuje niestandardową rolę. Ten plik 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 poniższej komendy, 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

Zamień [YOUR_PROJECT_ID] na ID Twojego 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 ID swojego projektu i adres e-mail konta usługi, odpowiednio.

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated