
This repo contains all the work surrounding the development of the PoC for CVE-2024-48208, and how a simple OOB(Out-of-bound) read can result in jail escapes as well as broken access control.
Das Repository enthält alle Arbeiten rund um die Entwicklung des PoC dafür, wie ein einfacher OOB (Out-of-Bound) Read zu Jail Escapes sowie zu gebrochener Zugriffskontrolle führen kann.
Die ursprüngliche CVE-Beschreibung lautet wie folgt:

Der Github PR im offiziellen Repository beschreibt, wie die Funktion domlsd() in der Datei ls.c anfällig für eine OOB-Read-Schwachstelle ist, aufgrund einer ungeprüften Inkrementierung des Basiszeigers, die dazu führen kann, dass der Zeiger auf einen Puffer außerhalb des cmd-Puffers zeigt, wie in den Zeilen 1053 und 1054 zu sehen ist.

Beim Debuggen des Puffers in GDB stellten wir fest, dass der OOB-Read den Benutzer in etwas namens replybuf landen ließ.
Bei weiterer Analyse fanden wir heraus, dass replybuf ein Puffer ist, der durch die Antwort des Servers an den Client gefüllt wird. Der replybuf ist in der Datei ftpd.c definiert, wie unten gezeigt:

Zusammenfassend:
base auf einen Teil des replybuf zeigen.replybuf enthält die Antwort, die dem Client gegeben wurde.Nun hat der CVE-Autor im ursprünglichen Github PR nicht bedacht/demonstriert, was passieren würde, wenn die folgende Bedingung in ls.c:1055 wahr zurückgibt?

Wir begannen darüber nachzudenken, und es stellte sich heraus, dass, wenn ein Angreifer chdir(base) dazu bringen kann, wahr zurückzugeben, die Funktion domlsd() mit der Auflistung der Datei fortfährt.
Das Team betrachtete die Szenarien, die in VMsetup.txt bereitgestellt wurden, über Systemadministratoren, die eingeschränkte Umgebungen einrichten, und beschloss, einen Exploit zu entwickeln, der wie folgt funktioniert:
Der eingeschränkte Benutzer verbindet sich mit dem anfälligen FTP-Server und meldet sich mit seinen Anmeldeinformationen an.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
Der Benutzer wechselt dann in den EPSV-Modus.
EPSV
Der Benutzer notiert die zurückgegebene Portnummer, da er sich damit verbinden muss, um die Auflistungsergebnisse zu lesen.
Der Benutzer kann nun eine Link-Datei erstellen (abhängig vom Puffer-Offset, der leicht automatisiert werden kann, basierend auf der letzten erhaltenen Antwort), die auf das Verzeichnis zeigt, aus dem er Dateien auflisten möchte.
Der Benutzer sendet den bösartigen Befehl (abhängig vom gewählten Offset).
MLSD -........<more than 4096 to overflow the cmd buffer>
Der Benutzer kann dann eine weitere Verbindung zur zuvor notierten Portnummer herstellen, um die Auflistung zu lesen.
Wir entwickelten ein automatisiertes Exploit-Skript pure.py, das die gleichen Schritte ausführt und auf anderen Skripten basiert, die wir während der Tests entwickelt haben und die im Verzeichnis dev_files zu finden sind.
Um die Schwachstelle zu reproduzieren, können Sie eine Schritt-für-Schritt-Anleitung für eine VM-Einrichtung unter VMsetup.txt befolgen.
Um einen Docker-Container der anfälligen Instanz zu erstellen, lesen Sie bitte Dockersetup.txt