GCP - KMS Privesc

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

KMS

关于 KMS 的信息:

GCP - KMS Enum

注意,在 KMS 中,permission 不仅会从 Orgs、Folders 和 Projects 继承,还会从 Keyrings 继承。

cloudkms.cryptoKeyVersions.useToDecrypt

如果你对某个密钥拥有此 permission,你可以使用该密钥来 decrypt information

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

具有此权限的攻击者可以授予自己权限以使用该密钥解密信息。

授予自己 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

下面是该委派如何工作的概念性分解:

  1. Service Account A 具有使用 KMS 中特定密钥直接解密的权限。
  2. Service Account B 被授予 useToDecryptViaDelegation 权限。这样它可以代表 Service Account A 向 KMS 请求解密数据。

当发出解密请求时,KMS 服务在检查权限的方式中隐含地使用了该权限

当你使用 Google Cloud KMS API(例如用 Python 或其他语言)发起标准解密请求时,服务会检查发起请求的 service account 是否拥有必要的权限。如果请求由拥有 useToDecryptViaDelegation 权限的 service account 发起,KMS 会验证该账号是否被允许代表密钥的所有者请求解密

设置委派

  1. 定义自定义角色:创建一个 YAML 文件(例如 custom_role.yaml)来定义自定义角色。该文件应包含 cloudkms.cryptoKeyVersions.useToDecryptViaDelegation 权限。下面是该文件可能的示例:
自定义角色 YAML 定义 ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. 使用 gcloud CLI 创建自定义角色:使用以下命令在你的 Google Cloud 项目中创建该角色:
创建自定义 KMS 角色 ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` 将 `[YOUR_PROJECT_ID]` 替换为你的 Google Cloud 项目 ID。
  1. 将自定义角色授予服务帐号:将你自定义的角色分配给将使用此权限的服务帐号。使用以下命令:
将自定义角色授予服务帐号 ```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”

将 `[YOUR_PROJECT_ID]` 和 `[SERVICE_ACCOUNT_EMAIL]` 分别替换为你的项目 ID 和服务账号的邮箱地址。

</details>

> [!TIP]
> 学习并练习 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;">\
> 学习并练习 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;">\
> 学习并练习 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>支持 HackTricks</summary>
>
> - 查看 [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **加入** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) 或者 [**telegram group**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库 提交 PRs 来分享 hacking tricks。
>
> </details>