Fetch the Flag CTF 2022: Write-up zu „Containers are ACE“
9. November 2022
0 Min. LesezeitVielen Dank, dass Sie bei Fetch mitgespielt haben! Glückwunsch an die Tausenden Spielerinnen und Spieler, die bei Fetch the Flag CTF dabei waren. Ein riesiges Dankeschön auch an die Snyker, die die Challenges entwickelt, getestet und dokumentiert haben!
Der Schwierigkeitsgrad der Challenge Containers are ACE aus dem diesjährigen Fetch the Flag CTF ist relativ niedrig. Erforderlich sind grundlegende Burp-Kenntnisse sowie Kenntnisse einiger Betriebssystembefehle. Außerdem müssen Sie ein wenig analysieren und ermitteln, um den Angriffsvektor zu identifizieren.
Schritt-für-Schritt-Anleitung
Erste Untersuchung
Bevor eine Ermittlung beginnt, muss jede Detektivin und jeder Detektiv zunächst Hinweise sammeln und miteinander verknüpfen. Bei dieser Challenge erhalten wir mehrere wertvolle Hinweise, wie unten zu sehen ist.
Hinweis #1: Installieren Sie die Snyk CLI https://docs.snyk.io/snyk-cli/install-the-snyk-cli
Daran ist nichts Besonderes. Wir können die Snyk CLI auf verschiedene Arten installieren. Hier installieren wir sie mit NPM (stellen Sie sicher, dass NPM installiert ist. Andernfalls können Sie es hier herunterladen).
Führen Sie sudo npm install snyk -g aus. Dann sind Sie für den nächsten Schritt bereit.
Hinweis #2: Führen Sie diesen Befehl aus: snyk container test pasapples/apjctf-todo-java-app:latest --app-vulns --exclude-base-image-vulns
Hier kommt die Snyk CLI ins Spiel: Beim Ausführen des obigen Befehls führt sie eine Reihe von Anweisungen aus (weitere Informationen finden Sie in der Snyk CLI-Dokumentation):
Lädt das Image herunter, falls es noch nicht lokal in Ihrem Docker-Daemon verfügbar ist
Ermittelt, welche Software im Image installiert ist
Sendet diese Softwarestückliste an den Snyk-Service
Gibt eine Liste der Schwachstellen in Ihrem Image zurück
Snyk scannt das Image auf Schwachstellen und zeigt uns die Ergebnisse sowie eine empfohlene Behebung an.

Hinweis #3: Weitere Informationen finden Sie hier: https://docs.snyk.io/products/snyk-container/getting-around-the-snyk-container-ui/detecting-application-vulnerabilities-in-container-images#ap[…]lag
Dieser Hinweis enthält nützliche Informationen, wenn wir genauer verstehen möchten, wie Snyk Container funktioniert.
Hinweis #4: Containers are ACE
Auch der Titel enthält einen Hinweis, der für die Lösung dieser Challenge entscheidend ist. ACE ist eine gängige Abkürzung für Arbitrary Code/Command Execution (beliebige Code- oder Befehlsausführung).
Einen Schritt zurücktreten
Die Informationsbeschaffung ist nun abgeschlossen. Als Nächstes suchen wir nach einem Angriffsvektor, über den wir in die Anwendung eindringen können. Im vorherigen Schritt hat Snyk Container zahlreiche Schwachstellen identifiziert. Wir müssen einen Weg finden, die Ergebnisse einzugrenzen!
Wir suchen nach Schwachstellen mit einem hohen Schweregrad, etwa CriticalUND dem Schwachstellentyp Arbitrary Command/Code Execution. Mit diesen Kriterien grenzen wir die Ergebnisse auf folgende Schwachstellen ein:

https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-31503
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30207
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30771
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30772
Bei einer kurzen Analyse stellen wir fest, dass CVE-2017-5638 einen CVSS-Score von 10 hat und mehrere öffentlich verfügbare Exploits dafür existieren. Daher gehen wir davon aus, dass die Wahrscheinlichkeit, diese Schwachstelle auszunutzen, ziemlich hoch ist. Versuchen wir es also!
Jetzt wird’s praktisch
Wir können die Schwachstelle entweder mit einem Exploit-Skript ausnutzen, das auf öffentlich verfügbaren Payloads basiert, oder es über Burp versuchen. Wir entscheiden uns für Letzteres, da dafür keine Bibliotheken installiert oder Dateien erstellt werden müssen und das Ganze insgesamt übersichtlicher ist.
Nach dem Start von Burp wechseln wir zum Tab Proxy, klicken auf die Schaltfläche Open Browser und rufen dann die verwundbare Webanwendung auf. Von nun an wird jede Anfrage zuerst an Burp weitergeleitet.
Nun rufen wir den Anmeldebereich der Webanwendung auf und beginnen, Anfragen abzufangen. Der Anmeldeversuch mit einer beliebigen E-Mail-Adresse und einem zufälligen Passwort wird natürlich nicht funktionieren. Senden wir diese Anfrage aber an den Repeater.


Versuchen wir nun, die POST-Anfrage zu ändern, indem wir einen öffentlich verfügbaren Payload einfügen, den Sie auf GitHub finden.

Bingo! Wir erhalten eine andere Antwort. Bei genauerer Betrachtung erkennen wir, dass die Ausgabe von diesem Befehl stammt:

Wir können den Befehl jetzt ändern und Dateien und Verzeichnisse durchsuchen, um etwas zu finden. Doch damit kommen wir nicht weiter.

Da wir wissen, dass das Flag dem Format SNYK{...} entspricht, können wir mit #cmd='grep -r -e SNYK' alle Dateien durchsuchen. Wir haben das Flag gefunden!

Alternativ können wir mit flag im Namen nach Dateien suchen. Dazu führen wir #cmd='find . -name *flag*' aus und lesen dann die Datei mit #cmd='cat ./webapps/todolist/flag' aus.

So haben wir die Challenge ACE-d
Wir haben unser Ziel zunächst kurz ausgekundschaftet, um die nächsten Schritte vorzubereiten.
Wir haben den Angriffsvektor identifiziert, indem wir Schwachstellen nach ihrem
CriticalSchweregrad priorisiert haben.
Wir haben eine gültige Anfrage abgefangen und durch einen bösartigen Payload verändert.
Anhand gängiger Enumerationstechniken haben wir nach dem Flag gesucht.
Möchten Sie erfahren, wie wir alle anderen Flags gefunden haben? Auf unserer Seite Fetch the Flag-Lösungen erfahren Sie, wie wir vorgegangen sind.
Container-Sicherheit mit Fokus auf Entwickler
Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.



