GCP - KMS Privesc

Support HackTricks

KMS

Info su KMS:

Nota che in KMS i permessi non sono solo ereditati da Orgs, Folders e Projects, ma anche da Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Puoi usare questo permesso per decriptare 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 questo permesso potrebbe assegnarsi permessi per utilizzare la chiave per decrittografare 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. L'Account di Servizio A ha accesso diretto per decriptare utilizzando una chiave specifica in KMS.

  2. L'Account di Servizio B riceve il permesso useToDecryptViaDelegation. Questo gli consente di richiedere a KMS di decriptare i dati per conto dell'Account di Servizio 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 utilizzando l'API Google Cloud KMS (in Python o in un'altra lingua), il servizio controlla se l'account di servizio richiedente ha i permessi necessari. Se la richiesta è effettuata da un account di servizio con il permesso useToDecryptViaDelegation, KMS verifica se questo account è autorizzato a richiedere la decrittazione per conto dell'entità che possiede la chiave.

Impostazione per la Delega

  1. Definire il Ruolo Personalizzato: Crea un file YAML (ad esempio, custom_role.yaml) che definisce 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. Crea il Ruolo Personalizzato Utilizzando il gcloud CLI: Usa 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 il tuo ID 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à questo permesso. Usa 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 progetto e l'email dell'account di servizio, rispettivamente.

Support HackTricks

Last updated