Skip to main content

Fetch the Flag CTF 2022: Write-up zu „Containers are ACE“

Artikel von
feature ctf containers are ace

9. November 2022

0 Min. Lesezeit

Vielen 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):

  1. Lädt das Image herunter, falls es noch nicht lokal in Ihrem Docker-Daemon verfügbar ist

  2. Ermittelt, welche Software im Image installiert ist

  3. Sendet diese Softwarestückliste an den Snyk-Service

  4. 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.

Die Terminalausgabe listet Sicherheitslücken in Apache Struts auf und empfiehlt ein Upgrade von Version 2.3.20 auf 2.5.30.

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:

Terminalausgabe mit Sicherheitslücken der Kritikalität „kritisch“ in Apache Struts 2.3.20, darunter Möglichkeiten zur Remote-Codeausführung und beliebigen Codeausführung.

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.

Burp-Suite-Abfangfenster mit einer erfassten POST-Anmeldeanfrage und dem Menü „Action“, in dem „Send to Repeater“ hervorgehoben ist.
HTTP-Anfrage- und Antwortbereiche mit einem fehlgeschlagenen Anmeldeversuch und einer Fehlermeldung zu ungültiger E-Mail-Adresse bzw. ungültigem Passwort im zurückgegebenen HTML

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

HTTP-Anfrage und -Antwort nebeneinander in einem Web-Debugging-Tool: zu sehen sind eine POST-Anfrage und eine 200-OK-Antwort.

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

Codeausschnitt mit einer multipart/form-data-Anfrage, einer OGNL-Payload zur Befehlsausführung und einem Chrome-User-Agent-String

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

HTTP-Anmeldeanfrage und Antwort des Apache-Tomcat-8.5-Servers nebeneinander in einem Entwicklertool

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!

Codeausschnitt mit einer webapps/todolist-Flag, die eine SNYK-Token-Zeichenfolge enthält.

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.

Web-Sicherheitstestoberfläche mit einer POST-Anmeldeanfrage samt Headern und Formulardaten sowie einer 200-Antwort, die auf eine To-do-Listen-Seite mit Flagge weiterleitet.

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

    Critical

    Schweregrad 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.

Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und überprüfen – während Menschen die Maßstäbe festlegen.

blog feature ai violet
Blog

VulnBump: Können KI-Agenten anfällige Abhängigkeiten beheben, ohne den Build zu beschädigen?

VulnBump testet KI-Agenten anhand von 307 realen Dependency-Upgrades. Eine Lösung zählt nur, wenn die Sicherheitslücke behoben ist und Build sowie Tests weiterhin erfolgreich sind.

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.