root достаётся без борьбы. ИИ-инфраструктуру LMCache подвёл старый Python
В LMCache, системе ускорения работы больших языковых моделей, обнаружили критическую уязвимость, позволяющую выполнять команды на сервере без пароля. При определённой конфигурации злоумышленник может получить права root, а исправленной версии пока нет.
Проблему обнаружил исследователь Юваль Моравчик из JFrog Security Research. Уязвимость получила идентификатор CVE-2026-105192 и оценку 9,8 балла из 10 по шкале CVSS 3.1. Для атаки не требуются учётная запись, специальные привилегии или действия пользователя. Достаточно сетевого доступа к уязвимому сервису, работающему в распределённом режиме.
LMCache помогает ускорять генерацию ответов нейросетей, сохраняя KV-кеш, промежуточные результаты вычислений, которые языковая модель может использовать повторно. Благодаря такому механизму серверу не приходится заново обрабатывать уже знакомые фрагменты текста. Технологию применяют вместе с системами запуска больших языковых моделей, включая vLLM, особенно при обработке длинных запросов и обслуживании множества пользователей.
Опасная ошибка находится в распределённом режиме LMCache, где отдельные рабочие процессы обмениваются содержимым кеша через ZeroMQ. Сервер открывает сетевой сокет ROUTER, обычно на порту 5555, и принимает сообщения от других компонентов системы. Разработчики не предусмотрели для такого соединения обязательную аутентификацию. Любой узел, способный подключиться к порту, может отправить сообщение без проверки личности отправителя.
Главная проблема связана с небезопасной десериализацией, когда программа восстанавливает объекты из полученных данных. LMCache использует формат msgpack, но один из типов сообщений передаёт содержимое функции pickle.loads языка Python. В отличие от обычного чтения данных, механизм pickle способен запускать код при восстановлении объектов. В результате специально сформированный пакет превращается в команду для серверной операционной системы.
Уязвимый участок находится в обработчике DeviceIPCWrapper.Deserialize. Когда сервер разбирает аргументы сообщения REGISTER_KV_CACHE, расширение msgpack с кодом 1 вызывает pickle.loads ещё до запуска основного обработчика и проверки полученных значений. Поэтому злоумышленнику достаточно отправить одно подготовленное сообщение ZeroMQ DEALER. Даже последующая ошибка обработки не предотвращает выполнение вредоносной команды.
JFrog подтвердила возможность эксплуатации с помощью работающего прототипа атаки. Исследователи заставили сервер выполнить системную команду и записать результат в файл. Проверка показала, что процесс использовал учётную запись root с идентификатором UID 0. Причина повышенной опасности заключается в официальных контейнерных образах LMCache, где соответствующий процесс запускается с максимальными привилегиями.
При этом критическая оценка CVSS не означает, что любая установка LMCache доступна для удалённого взлома. По умолчанию транспорт ZeroMQ прослушивает только localhost, поэтому другие компьютеры не могут подключиться к сервису напрямую. Удалённая атака становится возможной, когда администратор указывает доступный по сети адрес через параметр --host. Подобную конфигурацию используют при развёртывании LMCache на нескольких серверах. Если компонент работает исключительно внутри одного процесса vLLM, уязвимый сетевой порт вообще не открывается.
Проблемный механизм появился ещё в LMCache 0.3.9 и сохранился в последующих выпусках. На момент раскрытия уязвимости 7 октября 2026 года последней стабильной версией оставалась 0.5.5, опубликованная 12 сентября. Ошибка также присутствовала в кандидатах на выпуск 0.5.6 вплоть до 0.5.6rc3 и в ветке разработки по состоянию на 7 октября. Опубликованного исправления на 8 октября обнаружить не удалось.
Исследователи рекомендуют администраторам немедленно проверить настройки распределённых серверов LMCache и ограничить доступ к транспортному порту. До выхода исправления безопаснее оставлять ZeroMQ доступным только через localhost либо из строго контролируемой внутренней сети. Межсетевой экран позволяет сократить число потенциальных атакующих, но не устраняет саму уязвимость. Любой участник сети с разрешённым доступом к порту по-прежнему способен отправить опасное сообщение.
Для полноценного исправления разработчикам потребуется отказаться от обработки недоверенных сетевых данных через pickle и добавить аутентификацию соединений. JFrog предлагает использовать защищённый механизм ZeroMQ CURVE либо проверять подлинность каждого сообщения с помощью криптографического кода HMAC. Дополнительную защиту обеспечит запуск серверных процессов без прав root, поскольку такая мера ограничит последствия успешной атаки.
Исследователи опубликовали техническое описание и работоспособный пример эксплуатации, однако сведений о подтверждённых атаках на реальные серверы LMCache не представили. Пока неизвестно, сколько организаций используют распределённый режим с доступным извне портом ZeroMQ. Для операторов инфраструктуры ИИ главная проблема заключается в отсутствии исправления. Даже полностью обновлённый сервер остаётся уязвимым, если принимает сетевые сообщения от недоверенных узлов.