GCP - KMS Privesc

支持 HackTricks

KMS

关于 KMS 的信息:

请注意,在 KMS 中,权限不仅从组织、文件夹和项目继承,还从 密钥环 继承。

cloudkms.cryptoKeyVersions.useToDecrypt

您可以使用此权限来 使用您拥有此权限的密钥解密信息

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

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

gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
--keyring [KEYRING_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

这是关于此委托如何工作的概念性分解:

  1. 服务账户 A 直接访问 KMS 中使用特定密钥进行解密。

  2. 服务账户 B 被授予 useToDecryptViaDelegation 权限。这使其能够代表服务账户 A 请求 KMS 解密数据。

权限的使用在 KMS 服务检查权限时是隐式的,当发出解密请求时。

当您使用 Google Cloud KMS API(在 Python 或其他语言中)发出标准解密请求时,服务 检查请求的服务账户是否具有必要的权限。如果请求是由具有 useToDecryptViaDelegation 权限的服务账户发出的,KMS 会验证该 账户是否被允许代表拥有密钥的实体请求解密

设置委托

  1. 定义自定义角色:创建一个 YAML 文件(例如,custom_role.yaml),定义自定义角色。该文件应包括 cloudkms.cryptoKeyVersions.useToDecryptViaDelegation 权限。以下是该文件可能的示例:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. 使用 gcloud CLI 创建自定义角色:使用以下命令在您的 Google Cloud 项目中创建自定义角色:

gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

[YOUR_PROJECT_ID] 替换为您的 Google Cloud 项目 ID。

  1. 将自定义角色授予服务账户:将您的自定义角色分配给将使用此权限的服务账户。使用以下命令:

# 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 和服务帐户的电子邮件。

支持 HackTricks

Last updated