
Эксплойт proof-of-concept для CVE-2023-1177, уязвимости обхода пути в MLflow, демонстрирующий несанкционированный доступ к файлам через специально сформированные имена моделей.
MLflow — это платформа с открытым исходным кодом для управления полным жизненным циклом машинного обучения.
Основные функции:
MLflow решает четыре основные задачи:
Отслеживание экспериментов для записи и сравнения параметров и результатов (MLflow Tracking).
Упаковка кода ML в переиспользуемую, воспроизводимую форму для обмена с другими специалистами по данным или передачи в производство (MLflow Projects).
Управление и развертывание моделей из различных библиотек ML на различных платформах для обслуживания и вывода моделей (MLflow Models).
Предоставление центрального хранилища моделей для совместного управления полным жизненным циклом модели MLflow, включая управление версиями моделей, переходы между стадиями и аннотации (MLflow Model Registry).
Независимость от библиотек: MLflow не зависит от библиотек, то есть его можно использовать с любой библиотекой машинного обучения и на любом языке программирования, поскольку все функции доступны через REST API и CLI.
API: Проект включает Python API, R API и Java API для удобства.
Источник: https://mlflow.org/docs/latest/index.html
В MLflow была обнаружена уязвимость обхода пути (path traversal). Обход пути — это тип веб-уязвимости, который позволяет злоумышленнику получать доступ к файлам и каталогам, расположенным за пределами предполагаемого каталога. Злоумышленники используют различные методы для эксплуатации этой уязвимости и получения несанкционированного доступа к конфиденциальным данным или выполнения произвольного кода. Атаки с обходом пути можно предотвратить с помощью проверки входных данных и мер контроля доступа.
Уязвимость обнаружена Дэном Макиннерни.
Подробнее: https://huntr.dev/bounties/1fe8f21a-c438-4cba-9add-e8a5dab94e28/
[CVE-2023-1177]
Обход пути: '..\filename' в репозитории GitHub mlflow/mlflow до версии 2.2.1.
Подробнее: https://nvd.nist.gov/vuln/detail/CVE-2023-1177
Я создал небольшой скрипт на Python, который можно использовать для тестирования и эксплуатации уязвимости.
Он создаст уникальный идентификатор для имени модели, а затем последовательно обратится ко всем URL-адресам.
