Hack The Box und andere CTF-Challenges mit Snyk lösen
Mathias Conradt
1. September 2022
0 Min. LesezeitHack The Box (HTB) ist eine Plattform, die Cybersicherheitstraining spielerisch gestaltet. Sie eignet sich für angehende Penetrationstester ebenso wie für Entwickler, die Security Champions werden oder einfach die Denkweise von Angreifern besser verstehen möchten, um ihre Anwendungen sicherer zu machen.
Ich bin von der Wirksamkeit spielerischer Ansätze in Training und Bildung überzeugt, denn seien wir ehrlich: Wer kennt es nicht, an einer internen Sicherheitsschulung teilzunehmen oder für eine Zertifizierungsprüfung zu lernen und ein halbes Jahr später all das Wissen wieder vergessen zu haben? HTB verfolgt mit seinen praxisorientierten Capture-the-Flag-Spielen (CTF) einen anderen Ansatz. Dabei dringen Spieler in eine Maschine ein – in der Regel eine virtuelle Linux- oder Windows-Maschine –, indem sie Schwachstellen entdecken und ausnutzen. Ziel ist es, zwei Flags zu finden: zuerst die eines regulären Benutzers und anschließend durch eine Rechteausweitung die des Root-Benutzers. Eine Flag ist einfach der Inhalt einer bestimmten Textdatei auf der Maschine.
Neben den „Maschinen“ (den zentralen Elementen der Plattform) gibt es bei Hack The Box auch kleinere Aufgaben, an denen Sie teilnehmen können und die „Challenges“ heißen. Diese Challenges sind in der Regel etwas kürzer und verlangen nur eine Flag, enthalten aber oft ein vollständiges Set an herunterladbaren Ressourcen. Das kann eine PCAP-Datei sein, die Sie mit Wireshark analysieren, oder der vollständige Quellcode der betreffenden Anwendung. So können Sie deren Struktur und Code untersuchen – genau hier kommt Snyk ins Spiel.
Snyk hilft Ihnen, Schwachstellen und mögliche Einstiegspunkte schneller zu finden. Mit der Snyk CLI können Sie SAST- (Static Application Security Testing) und SCA-Tests (Software Composition Analysis) für Ihr Projekt ausführen. Außerdem scannt sie Anwendungsmanifestdateien wie package.json auf bekannte Schwachstellen in Open-Source-Bibliotheken. Snyk weist sogar auf PoCs hin.
Analyse der BlinkerFluids-Challenge
Die BlinkerFluids-Challenge ist ein hervorragendes Beispiel für HTB. Da sie recht einfach ist und sich gut für den Einstieg eignet, nutze ich sie in diesem Blogbeitrag zur Veranschaulichung.

Sobald Sie die Challenge starten, erhalten Sie die Host-IP-Adresse und den Port (in diesem Beispiel 46.101.2.216:32221). Wenn Sie diese in einem Browser öffnen, wird eine Website mit einer einfachen Benutzeroberfläche angezeigt.

Sehen wir uns an, was sich hinter dieser Ziel-URL verbirgt. Öffnen Sie dazu http://46.101.2.216:32221.
Die Anwendung besteht aus einer einzelnen Seite mit einer Liste von Rechnungen. Sie können Rechnungen als PDF exportieren, löschen oder neu erstellen.

Wenn wir den Mauszeiger über den PDF-Export-Link bewegen, sehen wir, dass die PDFs offenbar aus einem Verzeichnis für statische Assets bereitgestellt werden.

Der Editor zum Erstellen von Rechnungen scheint einen WYSIWYG-Editor bereitzustellen, der Eingaben in einer Auszeichnungssprache (Markdown) entgegennimmt und diese anschließend in ein PDF umwandelt.

Bevor wir den eigentlichen Zielhost weiter analysieren, laden wir zunächst die von der Challenge bereitgestellten Ressourcen herunter. Nach dem Herunterladen und Entpacken der ZIP-Datei erhalten wir den vollständigen Quellcode der Anwendung: eine als Docker-Image paketierte Node-Anwendung, einschließlich Dockerfile und package.json.
Im Stammverzeichnis finden wir außerdem eine flag.txt. Bei HTB-Challenges befindet sich die Flag in der Regel unter dem Pfad /flag.txt. Die Datei in diesem ZIP-Paket ist jedoch nur ein Platzhalter und nicht die aktive Flag, nach der wir suchen. Die HTB-Plattform generiert und rotiert diese Flags online mit einer eigenen Logik. In jedem Fall kennen wir jetzt die Zutaten und das Rezept der BlinkerFluids-App.
Die eigentliche Anwendung befindet sich im Unterordner „challenge“. Wie wir sehen, gibt es im Verzeichnis node_modules einige Node-Bibliotheken, die als direkte und transitive Abhängigkeiten festgelegt sind. Außerdem finden wir den Ordner static, aus dem offenbar die zuvor gezeigten exportierten PDFs bereitgestellt werden.
Snyk Vulnerability Scan
Da wir nach einer Möglichkeit suchen, in die Anwendung einzudringen und die /flag.txt aus der Online-Instanz auszulesen, können wir den Code eingehend untersuchen, um die Logik zu verstehen. Aus Zeit- und Platzgründen gehe ich in diesem Blogbeitrag nicht allzu sehr ins Detail.
Im Wesentlichen suchen wir nach Schwachstellen im eigens geschriebenen Code oder in direkten beziehungsweise indirekten (transitiven) Abhängigkeiten.
Mit der Snyk CLI können wir beides tun. Wenn Sie Snyk noch nicht installiert haben, können Sie dies mit folgendem Befehl nachholen:
oder auf eine andere bevorzugte Weise, wie auf der Installationsseite der Snyk CLI beschrieben.
Im Unterordner challenge führen wir zunächst einen SAST-Test für den benutzerdefinierten Code aus:
Das liefert uns folgende Ergebnisse:
Wir finden zwar einige Schwachstellen, darunter sogar eine mit hohem Schweregrad, doch lässt sich keine davon ausnutzen – XSS hilft uns in diesem Fall nicht wirklich weiter. Fahren wir also mit einem SCA-Test fort.
Bei einem SCA-Test analysiert Snyk die Manifestdateien eines Projekts (bei Node.js sind das package.json und package-lock.json).
In der package.json finden wir nur fünf direkte Abhängigkeiten. Mit den transitiven Abhängigkeiten sind es jedoch insgesamt 371, wie aus der package-lock.json hervorgeht. Das sind eine Menge Schwachstellen, die manuell überprüft werden müssten. Führen wir Folgendes aus:
Wir erhalten folgende Ergebnisse:

Das sieht schon besser aus. Die ReDoS-Probleme können wir ignorieren, denn ein Dienstausfall würde uns keinen Zugriff auf die Plattform verschaffen. Die kritische Schwachstelle für Remote Code Execution (RCE) in md-to-pdf sieht jedoch vielversprechend aus – genau das, was wir brauchen. Wir können davon ausgehen, dass md-to-pdf die Hilfsbibliothek ist, mit der die Rechnungs-Markdown-Datei in ein PDF umgewandelt wird.
Hier zeigt sich die Leistungsfähigkeit von Snyk. Die Projektabhängigkeiten wurden in Sekunden analysiert, Schwachstellen werden hervorgehoben und es gibt sogar einen Link zur Snyk Vulnerability Database – mit einem Exploit-PoC sowie Links zum ursprünglichen Fehlerbericht:

Diese Informationen helfen bei der Entwicklung des Exploits. Erwähnenswert ist jedoch, dass der Snyk-Bericht auch eine Empfehlung zur Behebung des Problems enthält, wie im obigen Screenshot zu sehen ist. Das ist ein konkreter, direkt umsetzbarer Ratschlag.
Da wir jetzt die Rolle des Angreifers einnehmen, sehen wir uns den ursprünglichen GitHub-Issue an, um weitere Informationen zu erhalten.
Wie im GitHub-Issue erläutert, liegt das Problem darin, dass die Bibliothek gray-matter (die von md-to-pdf zum Parsen des Front Matter verwendet wird) standardmäßig eine JS-Engine freigibt. Dadurch wird im Grunde eval auf das angegebene Markdown angewendet, sodass jede Person, die den Markdown-Inhalt kontrolliert, beliebigen JavaScript-Code ausführen kann.
Wir finden den ursprünglichen PoC und weiter unten in den Kommentaren auch einen leicht angepassten PoC.

Mit diesem PoC wird versucht, ein Verzeichnis aufzulisten und auszugeben. Da wir uns für den Inhalt der Flag unter /flag.txt interessieren, passen wir den Code leicht an, um den Inhalt der Flag-Datei auszulesen:
Wenn wir diesen Code in den Rechnungsgenerator einfügen und auf „Speichern“ klicken, erhalten wir ein PDF mit der gesuchten Flag.



Reichen Sie diese Flag ein – und die Challenge ist gelöst. Auf zur nächsten :)
Mit Snyk zum CTF-Champion
Hack The Box-Challenges sind eine unterhaltsame Möglichkeit, mehr über Schwachstellen und deren Ausnutzung zu erfahren. Snyk hat uns geholfen, diese Hack The Box-Challenge zu lösen: Die Anwendungsabhängigkeiten wurden schnell analysiert und eine kritische RCE-Schwachstelle samt Informationen zu ihrer Ausnutzung aufgezeigt. Außerdem erhielten Entwickler Informationen zur Behebung des Problems.
Merken Sie sich den Termin vor: Snyk veranstaltet am 9. November den „Fetch the Flag CTF“. Melden Sie sich an und machen Sie mit – es erwarten Sie 16 Challenges.
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.
Über den Autor
Mathias Conradt ist Unternehmer und Cybersicherheitsexperte mit einem Hintergrund in Softwareentwicklung und Pre-Sales, Snyk Ambassador und Chapter Lead von DevSecCon Germany. Außerdem nimmt er an CTFs teil. Besuchen Sie hier seine persönliche Website.



