GCP - KMS Privesc

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

KMS

Informazioni su KMS:

pageGCP - KMS Enum

Si noti che in KMS i permessi non sono solo ereditati da Orgs, Cartelle e Progetti ma anche da Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Puoi utilizzare questo permesso per decrittografare le informazioni con la chiave su cui hai questo permesso.

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 concedersi le autorizzazioni per utilizzare la chiave per decifrare le informazioni.

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 suddivisione concettuale di come funziona questa delega:

  1. Service Account A ha accesso diretto alla decrittografia utilizzando una chiave specifica in KMS.

  2. Service Account B viene concesso il permesso useToDecryptViaDelegation. Ciò gli consente di richiedere a KMS di decrittografare i 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 decrittografia.

Quando si effettua una richiesta di decrittografia standard utilizzando l'API di Google Cloud KMS (in Python o in un altro linguaggio), il servizio controlla se il service account richiedente ha i permessi necessari. Se la richiesta viene effettuata da un service account con il permesso useToDecryptViaDelegation, KMS verifica se questo account è autorizzato a richiedere la decrittografia per conto dell'entità che possiede la chiave.

Configurazione per la Delega

  1. Definire il ruolo personalizzato: Creare un file YAML (ad esempio, custom_role.yaml) che definisca il ruolo personalizzato. Questo file dovrebbe includere il permesso cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Ecco un esempio di come potrebbe apparire questo file:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Creare il ruolo personalizzato utilizzando la CLI di gcloud: Utilizza il seguente comando per creare il ruolo personalizzato nel tuo progetto Google Cloud:

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

Sostituisci [YOUR_PROJECT_ID] con l'ID del tuo progetto Google Cloud.

  1. Concedi il ruolo personalizzato a un account di servizio: Assegna il tuo ruolo personalizzato a un account di servizio che utilizzerà questa autorizzazione. Utilizza il seguente comando:

# 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 il tuo ID del progetto e l'email dell'account di servizio, rispettivamente.

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated