GCP - KMS Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

KMS

Informacje o KMS:

GCP - KMS Enum

Zauważ, że w KMS uprawnienia są nie tylko dziedziczone z Orgs, Folders i Projects, ale także z Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Możesz użyć tego uprawnienia, aby odszyfrować dane przy użyciu klucza, dla którego posiadasz to uprawnienie.

Odszyfrowanie danych przy użyciu klucza KMS ```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

Atakujący z tym uprawnieniem mógłby przyznać sobie uprawnienia do używania klucza w celu odszyfrowania informacji.

Przyznaj sobie rolę decryptera KMS ```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Poniżej koncepcyjne wyjaśnienie, jak działa ta delegacja:

  1. Service Account A ma bezpośredni dostęp do odszyfrowywania przy użyciu konkretnego klucza w KMS.
  2. Service Account B otrzymuje uprawnienie useToDecryptViaDelegation. Pozwala mu to zażądać od KMS odszyfrowania danych w imieniu Service Account A.

Użycie tego uprawnienia jest implicite w sposobie, w jaki usługa KMS weryfikuje uprawnienia, gdy wykonywane jest żądanie odszyfrowania.

Gdy wykonujesz standardowe żądanie odszyfrowania za pomocą Google Cloud KMS API (w Pythonie lub innym języku), usługa sprawdza, czy wysyłające żądanie service account ma wymagane uprawnienia. Jeśli żądanie pochodzi od service account z uprawnieniem useToDecryptViaDelegation, KMS weryfikuje, czy to konto ma prawo żądać 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ę. Plik ten powinien zawierać uprawnienie cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Oto przykład, jak może wyglądać taki plik:
Definicja niestandardowej roli YAML ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. Utwórz niestandardową rolę przy użyciu gcloud CLI: Użyj następującego polecenia, aby utworzyć niestandardową rolę w swoim projekcie Google Cloud:
Utwórz niestandardową rolę KMS ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` Zastąp `[YOUR_PROJECT_ID]` identyfikatorem projektu Google Cloud.
  1. Przypisz niestandardową rolę do konta usługi: Przypisz swoją niestandardową rolę do konta usługi, które będzie korzystać z tego uprawnienia. Użyj następującego polecenia:
Przypisz niestandardową rolę do konta usługi ```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”

Zastąp [YOUR_PROJECT_ID] i [SERVICE_ACCOUNT_EMAIL] odpowiednio identyfikatorem projektu i adresem e-mail konta usługi.

</details>

> [!TIP]
> Ucz się & ćwicz AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się & ćwicz GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się & ćwicz Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Wspieraj HackTricks</summary>
>
> - Sprawdź [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) lub [**telegram group**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podziel się hacking tricks, zgłaszając PRy do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>