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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
KMS
关于 KMS 的信息:
注意,在 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
下面是该委派如何工作的概念性分解:
- Service Account A 具有使用 KMS 中特定密钥直接解密的权限。
- Service Account B 被授予
useToDecryptViaDelegation权限。这样它可以代表 Service Account A 向 KMS 请求解密数据。
当发出解密请求时,KMS 服务在检查权限的方式中隐含地使用了该权限。
当你使用 Google Cloud KMS API(例如用 Python 或其他语言)发起标准解密请求时,服务会检查发起请求的 service account 是否拥有必要的权限。如果请求由拥有 useToDecryptViaDelegation 权限的 service account 发起,KMS 会验证该账号是否被允许代表密钥的所有者请求解密。
设置委派
- 定义自定义角色:创建一个 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" ```- 使用 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。- 将自定义角色授予服务帐号:将你自定义的角色分配给将使用此权限的服务帐号。使用以下命令:
将自定义角色授予服务帐号
```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>
HackTricks Cloud

