AWS Codebuild - Token Leakage
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tout d'abord, vérifiez s'il y a des identifiants source configurés que vous pourriez leak :
Si vous constatez que l'authentification par exemple à Github est configurée dans le compte, vous pouvez exfiltrer cet accès (token GH ou token OAuth) en faisant en sorte que Codebuild utilise une image docker spécifique pour exécuter la construction du projet.
À cette fin, 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. C'est 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éer et télécharger votre propre image Docker MitM
Suivez les instructions du dépôt pour définir votre adresse IP proxy et configurer votre certificat SSL et construire l'image docker.
NE PAS CONFIGURER http_proxy
pour ne pas intercepter les requêtes vers le point de terminaison des métadonnées.
Vous pourriez utiliser ngrok
comme ngrok tcp 4444
pour définir le proxy vers votre hôte.
Une fois que vous avez construit l'image Docker, téléchargez-la dans un dépôt public (Dockerhub, ECR...)
Définir l'environnement
Créez un nouveau projet Codebuild ou modifiez l'environnement d'un projet existant.
Définissez le projet pour utiliser l'image Docker précédemment générée.
Définir 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 9.0.1, il a été signalé qu'avec la version 10, cela pourrait ne pas fonctionner.
Exécutez la construction et capturez les identifiants
Vous pouvez voir le token dans l'en-tête Authorization :
Cela pourrait également être fait depuis l'aws cli avec quelque chose comme
Les projets Codebuild ont un paramètre appelé insecureSsl
qui est caché dans le web et que vous ne pouvez changer que depuis l'API.
L'activation de cela permet à Codebuild de se connecter au dépôt sans vérifier le certificat proposé par la plateforme.
Tout d'abord, vous devez énumérer la configuration actuelle avec quelque chose comme :
Ensuite, avec les informations recueillies, vous pouvez mettre à jour le paramètre du projet insecureSsl
à True
. Voici un exemple de ma mise à jour d'un projet, remarquez le insecureSsl=True
à la fin (c'est la seule chose que vous devez changer dans la configuration recueillie).
De plus, ajoutez également les variables d'environnement http_proxy et https_proxy pointant vers votre tcp ngrok comme :
Ensuite, exécutez l'exemple de base depuis https://github.com/synchronizing/mitm dans le port indiqué par les variables de proxy (http_proxy et https_proxy)
Enfin, cliquez sur Build the project, les identifiants seront envoyés en texte clair (base64) au port mitm :
Cette vulnérabilité a été corrigée par AWS à un moment donné durant la semaine du 20 février 2023 (je pense que c'était vendredi). Donc un attaquant ne peut plus en abuser :)
Un attaquant avec des permissions élevées dans un CodeBuild pourrait fuir 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, changez l'URL du dépôt github pour utiliser HTTP au lieu de HTTPS, par exemple : http://github.com/carlospolop-forks/TestActions
Ensuite, exécutez l'exemple de base depuis https://github.com/synchronizing/mitm sur le port pointé par les variables proxy (http_proxy et https_proxy)
Enfin, cliquez sur Build the project, les identifiants seront envoyés en texte clair (base64) au port mitm :
Maintenant, un attaquant pourra utiliser le token depuis sa machine, lister tous les privilèges qu'il a et (ab)user plus facilement que d'utiliser directement le service CodeBuild.
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)