GCP - KMS Privesc

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

KMS

KMS के बारे में जानकारी:

GCP - KMS Enum

ध्यान दें कि KMS में ये permission केवल Orgs, Folders और Projects से ही inherited नहीं होते, बल्कि Keyrings से भी होते हैं।

cloudkms.cryptoKeyVersions.useToDecrypt

आप इस permission का उपयोग उस key के साथ decrypt information with the key करने के लिए कर सकते हैं जिस पर यह permission लागू है।

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

एक हमलावर जिसके पास यह अनुमति है वह स्वयं को अनुमतियाँ दे सकता है ताकि वह key का उपयोग करके जानकारी को decrypt कर सके।

Grant yourself 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 में किसी विशिष्ट key का उपयोग करके data को decrypt करने का सीधे access है।
  2. Service Account B को useToDecryptViaDelegation permission दिया गया है। यह इसे Service Account A की ओर से KMS से data decrypt करने का request करने की अनुमति देता है।

जब कोई decryption request किया जाता है, तो KMS service permissions की जाँच करने के तरीके में यह permission implicit रूप से उपयोग होता है

जब आप Google Cloud KMS API (Python या किसी अन्य भाषा में) का उपयोग करके एक standard decryption request करते हैं, सेवा यह जाँच करती है कि requesting service account के पास आवश्यक permissions हैं या नहीं। अगर request किसी service account द्वारा की गई है जिसके पास useToDecryptViaDelegation permission है, तो KMS यह सत्यापित करता है कि क्या यह account उस entity जिसकी key है, उसकी ओर से decryption का अनुरोध करने की अनुमति रखता है

Delegation के लिए सेटअप

  1. Custom Role को परिभाषित करें: एक YAML फ़ाइल बनाएं (उदा., custom_role.yaml) जो कस्टम role को परिभाषित करे। इस फ़ाइल में cloudkms.cryptoKeyVersions.useToDecryptViaDelegation permission शामिल होना चाहिए। यहाँ एक उदाहरण है कि यह फ़ाइल कैसी दिख सकती है:
कस्टम रोल 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 project ID से बदलें।
  1. Grant the Custom Role to a Service Account: उस Service Account को अपना कस्टम रोल असाइन करें जो इस अनुमति का उपयोग करेगा। निम्नलिखित कमांड का उपयोग करें:
Grant custom role to 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”

`[YOUR_PROJECT_ID]` और `[SERVICE_ACCOUNT_EMAIL]` को क्रमशः अपने प्रोजेक्ट ID और सर्विस अकाउंट के ईमेल से बदलें।

</details>

> [!TIP]
> AWS हैकिंग सीखें और अभ्यास करें:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP हैकिंग सीखें और अभ्यास करें: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure हैकिंग सीखें और अभ्यास करें: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks का समर्थन करें</summary>
>
> - [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
> - **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** पर फॉलो करें।**
> - **हैकिंग ट्रिक्स साझा करें, PRs को** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में सबमिट करके।
>
> </details>