AWS Codebuild - Token Leakage
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Überprüfe zuerst, ob es Quellanmeldeinformationen gibt, die du leaken könntest:
Wenn Sie feststellen, dass die Authentifizierung zum Beispiel für Github im Konto eingestellt 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.
Zu diesem Zweck könnten Sie ein neues Codebuild-Projekt erstellen oder die Umgebung eines bestehenden ä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 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.
Erstellen & Hochladen Ihres eigenen Docker MitM-Images
Befolgen Sie die Anweisungen des Repos, um Ihre Proxy-IP-Adresse festzulegen und Ihr SSL-Zertifikat einzustellen 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 zu Ihrem Host einzustellen.
Sobald Sie das Docker-Image erstellt haben, laden Sie es in ein öffentliches Repo hoch (Dockerhub, ECR...)
Setzen Sie die Umgebung
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.
Setzen Sie den MitM-Proxy auf Ihrem Host
Wie im Github-Repo angegeben, könnten Sie etwas wie verwenden:
Die mitmproxy-Version, die verwendet wurde, war 9.0.1, es wurde berichtet, dass dies mit Version 10 möglicherweise nicht funktioniert.
Führen Sie den Build aus und erfassen Sie die Anmeldeinformationen
Sie können das Token im Authorization-Header sehen:
Dies könnte auch über die aws cli mit etwas wie
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.
Zuerst müssen Sie die aktuelle Konfiguration mit etwas wie:
Dann kannst du mit den gesammelten Informationen die Projekteinstellungen insecureSsl
auf True
aktualisieren. Das folgende ist ein Beispiel für meine Aktualisierung eines Projekts, beachte das insecureSsl=True
am Ende (das ist das einzige, was du von der gesammelten Konfiguration ändern musst).
Außerdem füge auch die Umgebungsvariablen http_proxy und https_proxy hinzu, die auf dein tcp ngrok zeigen, wie:
Führen Sie dann das grundlegende Beispiel von https://github.com/synchronizing/mitm an dem Port aus, der von den Proxy-Variablen (http_proxy und https_proxy) angegeben wird.
Schließlich klicken Sie auf Build the project, die Anmeldeinformationen werden im Klartext (base64) an den mitm-Port gesendet:
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 :)
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 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
).
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 an dem Port aus, der von den Proxy-Variablen (http_proxy und https_proxy) angegeben wird.
Schließlich klicken Sie auf Projekt erstellen, die Anmeldeinformationen werden im Klartext (base64) an den mitm-Port gesendet:
Jetzt kann ein Angreifer das Token von seinem Rechner verwenden, alle Privilegien auflisten, die es hat, und (miss)brauchen einfacher als die direkte Nutzung des CodeBuild-Dienstes.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)