GCP - KMS Privesc

Sostieni HackTricks

KMS

Informazioni su KMS:

GCP - KMS Enum

Nota che in KMS i permessi non sono solo ereditati da Organizzazioni, Cartelle e Progetti ma anche da Keyrings.

cloudkms.cryptoKeyVersions.useToDecrypt

Puoi utilizzare questo permesso per decifrare 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 darsi permessi per utilizzare la chiave per decifrare 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. Account di servizio A ha accesso diretto alla decrittografia utilizzando una chiave specifica in KMS.

  2. Account di servizio B ottiene il permesso useToDecryptViaDelegation. Questo gli consente di richiedere a KMS di decrittografare 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 decrittografia.

Quando si effettua una richiesta di decrittografia standard utilizzando l'API di 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 è fatta da un account di servizio con il permesso useToDecryptViaDelegation, KMS verifica se questo account è autorizzato a richiedere la decrittografia per conto dell'entità che possiede la chiave.

Preparazione 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. Creare il ruolo personalizzato utilizzando la CLI gcloud: Utilizzare il seguente comando per creare il ruolo personalizzato nel proprio 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. Concedere il Ruolo Personalizzato a un Account di Servizio: Assegna il tuo ruolo personalizzato a un account di servizio che utilizzerà questo permesso. 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"

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

Sostieni HackTricks

Last updated