Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2025-10-06 10:01:43 +00:00
parent 630cbea919
commit 0681bca0b4
2 changed files with 69 additions and 20 deletions

View File

@@ -4,7 +4,7 @@
## Secrets Manager
अधिक जानकारी के लिए देखें:
For more information check:
{{#ref}}
../aws-services/aws-secrets-manager-enum.md
@@ -12,14 +12,14 @@
### Read Secrets
**secrets स्वयं संवेदनशील जानकारी हैं**, न्हें पढ़ने का तरीका जानने के लिए [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md) देखें
The **secrets themselves संवेदनशील जानकारी हैं**, न्हें कैसे पढ़ना है यह जानने के लिए [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md)।
### DoS Change Secret Value
secret के मान को बदलकर आप **उन सभी सिस्टम्स को DoS कर सकते हैं जो उस मान पर निर्भर करते हैं।**
Secret के value को बदलकर आप उस value पर निर्भर सभी सिस्टम्स को **DoS** कर सकते हैं
> [!WARNING]
> ध्यान दें कि पिछले मान भी संग्रहीत होते हैं, इसलिए पहले के मान पर वापस जाना आसान है।
> ध्यान दें कि पिछली values भी संग्रहीत रहती हैं, इसलिए पहले की value पर आसानी से वापस जाना संभव है।
```bash
# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
@@ -28,19 +28,19 @@ aws secretsmanager put-secret-value \
```
### DoS: KMS key बदलना
यदि हमलावर के पास secretsmanager:UpdateSecret permission है, तो व secret को attacker के स्वामित्व वाले KMS key का उपयोग करने के लिए कॉन्फ़िगर कर सकत है। उस key को प्रारभ में इस तरह सेट किया जात है कि कोई भी उसे एक्सेस और उपयोग कर सके, इसलिए secret को नए key के साथ अपडेट करना संभव होता है। यदि key सुलभ नहीं होत, तो secret को अपडेट नहीं किया जा सकता था।
यदि attacker के पास secretsmanager:UpdateSecret permission है, तो व secret को attacker के-owned KMS key का उपयोग करने के लिए configure कर सकत हैवह key प्रारम्भ में इस तरह set up की जात है कि कोई भी उसे access और use कर सके, इसलिए secret को नए key के साथ update करना possible होता है। यदि वह key accessible नहीं होत, तो secret को update नहीं किया जा सकता था।
secret के लिए key बदलने के बाद, हमलावर अपनी key की कॉन्फ़िगरेशन बदलता है ताकि केवल वही उसे एक्सेस कर सके। इस तरह, secret के बाद के संस्करण नई key साथ एन्क्रिप्ट होंगे, और चूकि उस key तक कोई पहुँच नहीं होग, secret को पुनः प्राप्त करने की क्षमता खो जाएगी।
secret के लिए key बदलने के बाद, attacker अपनी key की configuration इस तरह modify कर देता है कि केवल वही उसे access कर सके। इस तरह, secret के subsequent versions नई key encrypted होंगे, और चूकि उस key तक कोई access नहीं होग, secret को retrieve करने की ability खो जाएगी।
यह ध्यान रखना महत्वपूर्ण है कि यह असमर्थता केवल बाद के संस्करणों में ही होग, जब secret की सामग्री बदल जाएगी, क्योंकि वर्तमान संस्करण अभी भी मूल KMS key के साथ एन्क्रिप्टेड है।
यह ध्यान देने योग्य है कि यह पहुँच बंद होना केवल बाद के versions में ही होग, जब secret की content बदल जाएगी, क्योंकि current version अभी भी original KMS key से encrypted है।
```bash
aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
```
### DoS Deleting Secret
### DoS Secret को डिलीट करना
Secret को delete करने के लिए न्यूनतम दिनों की संख्या 7 है
किसी Secret को डिलीट करने के लिए न्यूनतम अवधि 7 दिन है
```bash
aws secretsmanager delete-secret \
--secret-id MyTestSecret \
@@ -48,29 +48,29 @@ aws secretsmanager delete-secret \
```
## secretsmanager:RestoreSecret
एक secret को restore किया जा सकता है, जिससे उन secrets को भी बहाल करना संभव होता है जिन्हें deletion के लिए शेड्यूल किया गया है, क्योंकि secrets के लिए न्यूनतम deletion अवधि 7 दिन और अधिकतम 30 दिन है। secretsmanager:GetSecretValue permission के साथ यह उनकी सामग्री पुनः प्राप्त करना संभव बनाता है।
एक secret को पुनर्स्थापित करना संभव है, ज उन secrets की बहाली अनुमति देता है ज deletion के लिए शेड्यूल किए गए है, क्योंकि secrets के लिए न्यूनतम deletion अवधि 7 days है और अधिकतम 30 days है। secretsmanager:GetSecretValue permission के साथ मिलकर, इससे उनके contents को प्राप्त करना संभव हो जाता है।
जिस secret को delete किया जा रहा है उसे recover करने के लिए आप निम्नलिखित command का उपयोग कर सकते हैं:
जिस secret को हटाए जाने की प्रक्रिया में है उसे recover करने के लिए, आप निम्नलिखित command का उपयोग कर सकते हैं:
```bash
aws secretsmanager restore-secret \
--secret-id <Secret_Name>
```
## secretsmanager:DeleteResourcePolicy
यह action resource policy को delete करने की अनुमति देत है जो नियंत्रित करती है कि कौन किसी secret तक access कर सकता है। यदि resource policy को किसी विशिष्ट उपयोगकर्ताओं के सेट को access देने के लिए configured किया गया था तो यह DoS का कारण बन सकता है।
यह क्रिया उस resource policy को हटाने की अनुमति देत है जो नियंत्रित करती है कि कौन किसी secret तक पहुँच सकता है। यदि resource policy को किसी विशिष्ट उपयोगकर्ताओं के समूह को पहुँच देने के लिए कॉन्फ़िगर किया गया था तो इससे DoS हो सकता है।
resource policy को delete करने के लिए:
resource policy को हटाने के लिए:
```bash
aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>
```
## secretsmanager:UpdateSecretVersionStage
एक secret की states का उपयोग secret के वर्शन प्रबंधित करने के लिए किया जाता है। AWSCURRENT उस सक्रिय वर्शन को चिह्नित करता है जिसका उपयोग एप्लिकेशन करते हैं, AWSPREVIOUS पिछले वर्शन को रखता है ताकि जरूरत पड़ने पर आप rollback कर सकें, और AWSPENDING rotation प्रक्रिया में उपयोग होता है ताकि एक नए वर्शन को current बनाने से पहले उसे तैयार और validate किया जा सके
एक secret की states का उपयोग secret के versions का प्रबंध करने के लिए किया जाता है। AWSCURRENT उस सक्रिय संस्करण को चिह्नित करता है जिस एप्लिकेशन उपयोग करते हैं, AWSPREVIOUS पिछला संस्करण रखता है ताकि आवश्यक होने पर आप रोलबैक कर सकें, और AWSPENDING rotation प्रक्रिया में एक नए संस्करण को वर्तमान बनाने से पहले उसे तैयार और मान्य करने के लिए उपयोग होता है
एप्लिकेशन हमेशा AWSCURRENT वाले वर्शन को पढ़ते हैं। यदि कोई उस लेबल को गलत वर्शन पर स्थानांतरित कर देता है, तो ऐप्स अवैध credentials का उपयोग करेंगे और विफल हो सकते हैं।
एप्लिकेशन हमेशा AWSCURRENT वाले संस्करण को पढ़ते हैं। यदि कोई उस लेबल को गलत संस्करण पर स्थानांतरित कर देता है, तो ऐप्स अमान्य क्रेडेंशियल्स का उपयोग करेंगे और विफल हो सकते हैं।
AWSPREVIOUS स्वतः उपयोग में नहीं आता। हालांकि, अगर AWSCURRENT हटा दिया जा या गलत तरीके से पुनः असाइन कर दिया जा, तो ऐसा दिखाई दे सकता है कि सब कुछ अभी भी पिछले वर्शन के साथ चल रहा है।
AWSPREVIOUS स्वतः उपयोग में नहीं आता। हालांकि, यदि AWSCURRENT हटा दिया जाता है या गलत तरीके से पुनः असाइन किया जाता है, तो ऐसा लग सकता है कि सब कुछ अभी भी पिछले संस्करण के साथ चल रहा है।
```bash
aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
--remove-from-version-id <previous-version-id>
```
{{#include ../../../banners/hacktricks-training.md}}
### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call)
Secrets Manager के BatchGetSecretValue API का दुरुपयोग करके एक ही अनुरोध में 20 तक secrets पुनःप्राप्त करें। यह प्रति-secret GetSecretValue को बार-बार चलाने की तुलना में API-कॉल की मात्रा को काफी कम कर सकता है। यदि --filters (tags/name) का उपयोग किया जाता है तो ListSecrets permission भी आवश्यक है। CloudTrail फिर भी बैच से पुनःप्राप्त प्रत्येक secret के लिए एक GetSecretValue इवेंट रिकॉर्ड करता है।
Required permissions
- secretsmanager:BatchGetSecretValue
- secretsmanager:GetSecretValue प्रत्येक लक्षित secret के लिए
- secretsmanager:ListSecrets अगर --filters का उपयोग कर रहे हों
- kms:Decrypt उन CMKs पर जो secrets के लिए उपयोग किए गए हैं (यदि aws/secretsmanager का उपयोग नहीं कर रहे हैं)
> [!WARNING]
> ध्यान दें कि permission `secretsmanager:BatchGetSecretValue` अकेला secrets पुनःप्राप्त करने के लिए पर्याप्त नहीं है; आपको उन प्रत्येक secret को पुनःप्राप्त करने के लिए `secretsmanager:GetSecretValue` भी चाहिए।
Exfiltrate by explicit list
```bash
aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
```
Exfiltrate फ़िल्टर के द्वारा (tag key/value या name prefix)
```bash
# By tag key
aws secretsmanager batch-get-secret-value \
--filters Key=tag-key,Values=env \
--max-results 20 \
--query 'SecretValues[].{Name:Name,Val:SecretString}'
# By tag value
aws secretsmanager batch-get-secret-value \
--filters Key=tag-value,Values=prod \
--max-results 20
# By name prefix
aws secretsmanager batch-get-secret-value \
--filters Key=name,Values=MyApp
```
आंशिक विफलताओं का प्रबंधन
```bash
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
```
प्रभाव
- कम API कॉल्स के साथ कई secrets का तेज़ “smash-and-grab”, जो संभावित रूप से GetSecretValue में स्पाइक्स के लिए ट्यून किए गए अलर्टिंग को बायपास कर सकता है।
- CloudTrail लॉग्स अभी भी बैच द्वारा प्राप्त प्रत्येक secret के लिए एक GetSecretValue इवेंट शामिल करते हैं।

View File

@@ -12,18 +12,18 @@ Secrets Manager के बारे में अधिक जानकारी
### `secretsmanager:GetSecretValue`
इस अनुमति वाले attacker AWS **Secretsmanager** में किसी **secret के अंदर का सहेजा गया मान** प्राप्त कर सकता है।
इस अनुमति वाले attacker AWS **Secretsmanager** में किसी secret के अंदर **सहेजा हुआ मान** प्राप्त कर सकता है।
```bash
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
```
**संभावित प्रभाव:** AWS Secrets Manager service के अंदर उच्च संवेदनशील डेटा तक पहुँच।
**संभावित प्रभाव:** AWS secrets manager service के अंदर अत्यंत संवेदनशील डेटा तक पहुँच।
> [!WARNING]
> ध्यान रखें कि भले ही `secretsmanager:BatchGetSecretValue` अनुमति हो, एक हमलावर को संवेदनशील secrets प्राप्त करने के लिए `secretsmanager:GetSecretValue` की भी आवश्यकता होगी।
> ध्यान ें कि भले ही `secretsmanager:BatchGetSecretValue` अनुमति हो, एक attacker को संवेदनशील secrets प्राप्त करने के लिए `secretsmanager:GetSecretValue` भी आवश्यक होगी।
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
ूर्व अनुमतियों के साथ यह संभव है कि अन्य principals/accounts (even external) को **give access to other principals/accounts (even external)** करके **secret** तक पहुँच दी जा सके। ध्यान दें कि KMS key के साथ **read secrets encrypted**रने के लिए, उपयोगकर्ता के पास **access over the KMS key** भी होना चाहिए (अधिक जानकारी के लिए [KMS Enum page](../aws-services/aws-kms-enum.md)).
िछली अनुमतियों के साथ यह संभव है कि अन्य principals/accounts (even external) को इस **secret** तक पहुँच दी जा सके। ध्यान दें कि **KMS key से एन्क्रिप्ट किए गए secrets को पढ़ने** के लिए, user को **KMS key पर access** भी होना चाहिए (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)).
```bash
aws secretsmanager list-secrets
aws secretsmanager get-resource-policy --secret-id <secret_name>