GCP - KMS Privesc
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
KMS
Información sobre KMS:
Ten en cuenta que en KMS los permisos no solo se heredan desde Orgs, Folders y Projects, sino también desde Keyrings.
cloudkms.cryptoKeyVersions.useToDecrypt
Puedes usar este permiso para descifrar información con la clave sobre la que tienes este permiso.
Descifrar datos usando la clave de 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
Un atacante con este permiso podría concederse permisos para usar la clave para descifrar información.
Concederse el rol KMS decrypter
```bash gcloud kms keys add-iam-policy-binding [KEY_NAME] \ --location [LOCATION] \ --keyring [KEYRING_NAME] \ --member [MEMBER] \ --role roles/cloudkms.cryptoKeyDecrypter ```cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
Aquí hay un desglose conceptual de cómo funciona esta delegación:
- Cuenta de servicio A tiene acceso directo para descifrar usando una clave específica en KMS.
- Cuenta de servicio B recibe el permiso
useToDecryptViaDelegation. Esto le permite solicitar a KMS que descifre datos en nombre de la Cuenta de servicio A.
El uso de este permiso es implícito en la forma en que el servicio KMS verifica los permisos cuando se realiza una solicitud de descifrado.
Cuando haces una solicitud de descifrado estándar usando la Google Cloud KMS API (en Python u otro lenguaje), el servicio verifica si la cuenta de servicio que realiza la solicitud tiene los permisos necesarios. Si la solicitud la realiza una cuenta de servicio con el permiso useToDecryptViaDelegation, KMS comprueba si esta cuenta está autorizada a solicitar el descifrado en nombre de la entidad que posee la clave.
Configuración para la delegación
- Definir el rol personalizado: Crea un archivo YAML (por ejemplo,
custom_role.yaml) que defina el rol personalizado. Este archivo debe incluir el permisocloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Aquí hay un ejemplo de cómo podría verse este archivo:
Definición YAML del rol personalizado
```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```- Crear el rol personalizado usando la gcloud CLI: Usa el siguiente comando para crear el rol personalizado en tu proyecto de Google Cloud:
Crear rol KMS personalizado
```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` Reemplace `[YOUR_PROJECT_ID]` por el ID del proyecto de Google Cloud.- Conceder el Custom Role a una Service Account: Asigne su Custom Role a una Service Account que utilizará este permiso. Utilice el siguiente comando:
Conceder Custom Role a Service Account
```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”
Reemplace `[YOUR_PROJECT_ID]` y `[SERVICE_ACCOUNT_EMAIL]` por su ID de proyecto y el correo electrónico de la cuenta de servicio, respectivamente.
</details>
> [!TIP]
> Aprende y practica 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;">\
> Aprende y practica 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;">\
> Aprende y practica 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>Apoya a HackTricks</summary>
>
> - Consulta los [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Únete al** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) o al [**telegram group**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

