GCP - KMS Privesc

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

KMS

Інформація про KMS:

GCP - KMS Enum

Зверніть увагу, що в KMS дозволи не тільки наследуються від Організацій, Папок і Проектів, але також від Ключових наборів.

cloudkms.cryptoKeyVersions.useToDecrypt

Ви можете використовувати цей дозвіл для дешифрування інформації за допомогою ключа, на який у вас є цей дозвіл.

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

Зловмисник з цим дозволом міг би наділити себе правами на використання ключа для розшифровки інформації.

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. Сервісний обліковий запис A має прямий доступ до розшифровки за допомогою конкретного ключа в KMS.
  2. Сервісний обліковий запис B отримує дозвіл useToDecryptViaDelegation. Це дозволяє йому запитувати KMS на розшифровку даних від імені Сервісного облікового запису A.

Використання цього дозволу є неявним у способі, яким сервіс KMS перевіряє дозволи під час подання запиту на розшифровку.

Коли ви робите стандартний запит на розшифровку за допомогою Google Cloud KMS API (на Python або іншій мові), сервіс перевіряє, чи має запитуючий сервісний обліковий запис необхідні дозволи. Якщо запит подається сервісним обліковим записом з дозволом useToDecryptViaDelegation, KMS перевіряє, чи дозволено цьому обліковому запису запитувати розшифровку від імені суб'єкта, який володіє ключем.

Налаштування для делегування

  1. Визначте користувацьку роль: Створіть файл YAML (наприклад, custom_role.yaml), який визначає користувацьку роль. Цей файл повинен містити дозвіл cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Ось приклад того, як може виглядати цей файл:
yaml
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Створіть користувацьку роль за допомогою gcloud CLI: Використовуйте наступну команду, щоб створити користувацьку роль у вашому проекті Google Cloud:
bash
gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

Замініть [YOUR_PROJECT_ID] на ідентифікатор вашого проекту Google Cloud.

  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] на ваш ідентифікатор проєкту та електронну пошту облікового запису служби відповідно.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks