AWS Codebuild - Token Leakage
Récupérer les jetons configurés pour Github/Bitbucket
Tout d'abord, vérifiez s'il y a des informations d'identification source configurées que vous pourriez divulguer:
Via Docker Image
Si vous découvrez que l'authentification, par exemple sur Github, est configurée dans le compte, vous pouvez exfiltrer cet accès (jeton GH ou jeton OAuth) en faisant en sorte que Codebuild utilise une image Docker spécifique pour exécuter la construction du projet.
Dans ce but, vous pourriez créer un nouveau projet Codebuild ou modifier l'environnement d'un projet existant pour définir l'image Docker.
L'image Docker que vous pourriez utiliser est https://github.com/carlospolop/docker-mitm. Il s'agit d'une image Docker très basique qui définira les variables d'environnement https_proxy
, http_proxy
et SSL_CERT_FILE
. Cela vous permettra d'intercepter la plupart du trafic de l'hôte indiqué dans https_proxy
et http_proxy
et de faire confiance au CERT SSL indiqué dans SSL_CERT_FILE
.
Créez et téléversez votre propre image Docker MitM
Suivez les instructions du dépôt pour définir votre adresse IP de proxy et définir votre certificat SSL et construisez l'image Docker.
NE DÉFINISSEZ PAS
http_proxy
pour ne pas intercepter les demandes vers le point de terminaison de métadonnées.Vous pourriez utiliser
ngrok
commengrok tcp 4444
pour définir le proxy vers votre hôte.Une fois l'image Docker construite, téléversez-la dans un dépôt public (Dockerhub, ECR...)
Définissez l'environnement
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
Définissez le proxy MitM sur votre hôte
Comme indiqué dans le dépôt Github, vous pourriez utiliser quelque chose comme:
La version de mitmproxy utilisée était la 9.0.1, il a été signalé qu'avec la version 10 cela pourrait ne pas fonctionner.
Exécuter la construction & capturer les informations d'identification
Vous pouvez voir le jeton dans l'en-tête Authorization :
Cela pourrait également être fait depuis l'aws cli avec quelque chose comme
Via HTTP protocol
Cette vulnérabilité a été corrigée par AWS à un moment donné la semaine du 20 février 2023 (je pense le vendredi). Donc un attaquant ne peut plus en abuser :)
Un attaquant avec des permissions élevées sur un CodeBuild pourrait divulguer le token Github/Bitbucket configuré ou si les permissions étaient 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
).
Ensuite, changer l'URL du dépôt github pour utiliser HTTP au lieu de HTTPS, par exemple: **http://**github.com/carlospolop-forks/TestActions
Ensuite, exécuter l'exemple de base depuis https://github.com/synchronizing/mitm sur le port pointé par les variables de proxy (http_proxy et https_proxy)
Enfin, cliquez sur Build the project, les informations d'identification seront envoyées en clair (base64) au port mitm :
Maintenant, un attaquant pourra utiliser le jeton depuis sa machine, lister tous les privilèges qu'il possède et les (ab)user plus facilement que d'utiliser le service CodeBuild directement.
Dernière mise à jour