GCP - KMS Privesc

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

KMS

Informazioni su KMS:

GCP - KMS Enum

Nota che in KMS i permission non sono solo inherited da Orgs, Folders and Projects ma anche da Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Puoi usare questa permission per decrypt informazioni con la key su cui possiedi questa permission.

Decrypt data using KMS key ```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

Un attaccante con questa autorizzazione potrebbe assegnarsi i permessi per utilizzare la chiave e decifrare le informazioni.

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

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Ecco una spiegazione concettuale di come funziona questa delega:

  1. Service Account A ha accesso diretto per decifrare usando una specifica chiave in KMS.
  2. Service Account B riceve il permesso useToDecryptViaDelegation. Questo gli permette di richiedere a KMS di decifrare dati per conto di Service Account A.

L’uso di questo permesso è implicito nel modo in cui il servizio KMS controlla i permessi quando viene effettuata una richiesta di decrittazione.

Quando effettui una richiesta di decrittazione standard usando la Google Cloud KMS API (in Python o un altro linguaggio), il servizio verifica se il service account richiedente ha i permessi necessari. Se la richiesta è fatta da un service account con il permesso useToDecryptViaDelegation, KMS verifica se questo account è autorizzato a richiedere la decrittazione per conto dell’entità che possiede la chiave.

Configurazione per la delega

  1. Definire il ruolo personalizzato: Crea un file YAML (es., custom_role.yaml) che definisca il ruolo personalizzato. Questo file dovrebbe includere il permesso cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Ecco un esempio di come potrebbe essere questo file:
Definizione YAML del ruolo personalizzato ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. Crea il ruolo personalizzato usando la gcloud CLI: Usa il comando seguente per creare il ruolo personalizzato nel tuo progetto Google Cloud:
Crea ruolo KMS personalizzato ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` Sostituisci `[YOUR_PROJECT_ID]` con l'ID del progetto Google Cloud.
  1. Assegna il ruolo personalizzato a un account di servizio: Assegna il tuo ruolo personalizzato a un account di servizio che utilizzerà questa autorizzazione. Usa il comando seguente:
Assegna ruolo personalizzato a un account di servizio ```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”

Sostituisci `[YOUR_PROJECT_ID]` e `[SERVICE_ACCOUNT_EMAIL]` con l'ID del tuo progetto e l'indirizzo email del service account, rispettivamente.

</details>

> [!TIP]
> Impara e pratica il hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Impara e pratica il hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Impara e pratica il hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Supporta HackTricks</summary>
>
> - Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
> - **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
>
> </details>