
Pufferüberlauf im FreeFloat FTP Server 1.0, der veranschaulicht, wie ein einziger unsicherer Handler mehrere CVE-Einträge über verschiedene Befehle hinweg erzeugen kann.
Pufferüberlauf im FreeFloat FTP Server 1.0, der veranschaulicht, wie ein einziger unsicherer Handler mehrere CVE-Einträge über verschiedene Befehle hinweg erzeugen kann.
Dieses Repository ist Teil des Materials, das ich verwende, wenn ich die Ausnutzung von Speicherfehlern unterrichte (zusätzlich zu meiner regulären Arbeit unterrichte ich auch in verschiedenen Cybersicherheitskursen, in denen ich helfe, die nächste Generation von Reverse Engineers auszubilden).
CVE-2025-5548 ist ein Fall, den ich verwende, um Studenten zu zeigen, dass Schwachstellenforschung eine zugängliche Fähigkeit ist, nichts, was nur Forschern mit jahrelanger Erfahrung vorbehalten ist. FreeFloat FTP Server 1.0 ist eine kleine ältere Windows-Anwendung, einfach einzurichten, einfach auszuführen und einfach zum Absturz zu bringen. Der Überlauf wird durch einen standardmäßigen FTP-Befehl ausgelöst, der Ausnutzungspfad ist eine saubere vanilla EIP-Überschreibung, und der gesamte Prozess vom Fuzzing bis zur funktionierenden Shell kann in einer einzigen Sitzung abgeschlossen werden.
Dieser Fall steht auch in direktem Zusammenhang mit meinem Vortrag "The Path That Leads to Your First CVE", in dem ich erkläre, dass einer der realistischsten Einstiegspunkte in die Schwachstellenforschung für Anfänger die Analyse alter Software ist, das Verständnis ihrer internen Funktionsweise und die Suche nach der Art von fehlenden Längenprüfungen, die genau diese Klasse von Schwachstellen hervorbringen. FreeFloat ist eines der Beispiele, die ich verwende, um zu zeigen, dass das Finden und Dokumentieren eines echten Fehlers keine jahrelange Erfahrung erfordert, sondern Neugier, einen Debugger und einen methodischen Ansatz.
Was diesen Fall für den Unterricht besonders effektiv macht, ist, wie er mit einer breiteren Lektion verbunden ist, wie CVEs vergeben werden. Derselbe unsichere Eingabehandler in FreeFloat erzeugt Überläufe über mehrere verschiedene FTP-Befehle hinweg: USER, PASS, NOOP und andere, von denen jeder unabhängig gemeldet wurde und seinen eigenen CVE-Eintrag erhielt. Studenten, die sich die Liste der CVEs für diese Binärdatei ansehen und Dutzende von Einträgen sehen, lernen schnell, dass die Anzahl der CVEs nicht gleich der Anzahl der Schwachstellen ist und dass das Verständnis der Grundursache wertvoller ist als das Katalogisieren der Symptome.
Sobald die Studenten den Prozess durch Fälle wie diesen verstanden haben, gebe ich ihnen ein reales Beispiel dafür, was als nächstes kommt. Nach zwei Wochen Übung mit Pufferüberläufen und Speicherfehlern existiert die Art von Schwachstelle, die sie finden können, bereits in echter Software. Das folgende Repository dokumentiert eine Schwachstelle, die ich speziell gefunden habe, um den Studenten den vollständigen Zyklus zu zeigen – Entdeckung, Analyse, Dokumentation und CVE-Anfrage – an etwas, das zugänglich genug ist, um früh im Lernpfad gefunden zu werden, wie CVE-2025-70330.
Dieses Repository ist Teil einer größeren Sammlung. Wenn Sie die Ausnutzung über eine breite Palette von Techniken, Schwachstellentypen und Zielarchitekturen hinweg üben möchten, werfen Sie einen Blick auf das Repository Binary-Exploitation, in dem all dieses Material zusammen mit vielen weiteren CVEs, Methodiken und Ausnutzungsübungen organisiert und gepflegt wird.
Diese Schwachstelle betrifft den FreeFloat FTP Server 1.0, einen sehr alten Windows-FTP-Server, der ohne moderne Sicherheitspraktiken geschrieben wurde. Im Jahr 2025 meldete ein Forscher viele CVEs, die dieselbe Binärdatei betreffen.
Beispiele sind:
Jeder CVE bezieht sich auf einen anderen FTP-Befehl, aber wenn das Programm rückentwickelt wird, wird deutlich, dass viele von ihnen denselben anfälligen Codepfad erreichen.
Dies macht den Fall nicht nur als Beispiel für einen Pufferüberlauf interessant, sondern auch als Demonstration dafür, dass:
Beim Rückentwickeln der Binärdatei kann beobachtet werden, dass alle FTP-Befehle von derselben Dispatcher-Funktion verarbeitet werden. Die Befehlskette wird in einer Sitzungsstruktur gespeichert, und mehrere Befehls-Handler kopieren Benutzereingaben in Puffer fester Größe unter Verwendung unsicherer Funktionen wie strcpy, strcat und memcpy, ohne die Länge der empfangenen Daten zu überprüfen.
Aus diesem Grund können verschiedene Befehle den Stapel überschreiben, auch wenn die CVE-Beschreibung nur einen bestimmten Befehl erwähnt.
Zum Beispiel kann der Absturz mit folgenden Befehlen ausgelöst werden:
NOOP AAAAA...
USER AAAAA...
PASS AAAAA...
HOST AAAAA...
ANYTHING AAAAA...
Der einzige Unterschied ist die Anzahl der Bytes, die erforderlich sind, um die Rücksprungadresse zu überschreiben. Das bedeutet, dass viele für diese Software gemeldete CVEs die gleiche Grundursache haben.
Der FreeFloat FTP Server verarbeitet Befehle, die über TCP-Port 21 empfangen werden, und speichert die Befehlskette in einer internen Sitzungsstruktur. Später kopiert der Befehls-Handler benutzerkontrollierte Daten in lokale Stapelpuffer, ohne eine ordnungsgemäße Längenprüfung durchzuführen.
Beim Rückentwickeln der Binärdatei kann beobachtet werden, dass mehrere Befehls-Handler Puffer fester Größe und unsichere Kopieroperationen verwenden. Eine vereinfachte Version der anfälligen Logik sieht wie folgt aus:
char buffer[256];
strcpy(buffer, user_input);
Da der Zielpuffer eine feste Größe hat und die Eingabelänge nicht geprüft wird, führt das Senden einer langen Zeichenkette dazu, dass die Kopieroperation über das Ende des Puffers hinaus schreibt.
Je mehr Daten geschrieben werden, desto mehr wird das Stapellayout beschädigt, bis die gespeicherte Rücksprungadresse überschrieben wird.
Wenn die Funktion zurückkehrt, springt die Ausführung zu einem benutzerkontrollierten Wert, was zu einem Absturz führt. Unter einem Debugger kann dies als Überschreibung des Befehlszeigers mit vom Angreifer kontrollierten Daten beobachtet werden.
Der Absturz kann reproduziert werden, indem eine lange Zeichenkette nach einem gültigen FTP-Befehl gesendet wird. Beispiel mit Python:
import socket
ip = "127.0.0.1"
port = 21
payload = b"A" * 500
s = socket.socket()
s.connect((ip, port))
s.recv(1024)
s.send(b"USER anonymous\r\n")
s.recv(1024)
s.send(b"PASS anonymous\r\n")
s.recv(1024)
s.send(b"NOOP " + payload + b"\r\n")
s.close()
Wenn unter einem Debugger ausgeführt, zeigt der Absturz:
EIP = 41414141
was bestätigt, dass benutzerkontrollierte Daten die Rücksprungadresse überschreiben.
Das Ziel dieses Repositorys ist es nicht nur, den Absturz zu zeigen, sondern auch den vollständigen Prozess der Ausnutzung der Schwachstelle Schritt für Schritt zu demonstrieren, unter Verwendung derselben Methodik, die üblicherweise bei der Entwicklung von Exploits verwendet wird.
Um das Haupt-README sauber zu halten, befinden sich die detaillierten Ausnutzungsnotizen, Skripte und Debugger-Schritte im Ordner Vulnerability 📂 dieses Repositorys.
Dort finden Sie den vollständigen Arbeitsablauf zur Ausnutzung dieses CVE, einschließlich Fuzzing, Offset-Entdeckung, Analyse ungültiger Zeichen, Gadget-Suche und Shellcode-Ausführung.