flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192
CVE-2026-105192: десериализация pickle без аутентификации в многопроцессном режиме LMCache
CVE-2026-105192 позволяет неаутентифицированному узлу, достигшему многопроцессного транспорта LMCache, вызвать небезопасную десериализацию pickle. Проверьте доступность ZMQ endpoint, ограничьте доступ и следите за исправлением поставщика.[1], [2]
LMCache получает запечатанную посылку от сетевого узла и открывает её способом, который может исполнить скрытые инструкции. Это происходит до проверки сервером заявленного типа сообщения.[1], [2]
Ключевые понятия и термины
CWE-502: небезопасная десериализация- Python pickle может выполнять поведение при восстановлении объектов и небезопасен для данных от недоверенного сетевого узла.[1], [2]
Многопроцессный режим LMCache- Компоненты LMCache обмениваются данными через ZeroMQ. Запись CVE описывает неаутентифицированный endpoint ROUTER.[2], [5]
Расширение MessagePack- Значение расширения MessagePack передаётся в DeviceIPCWrapper.Deserialize во время декодирования до выбора типа запроса.[2], [4], [3]
Граница доступности- По записи CVE транспорт по умолчанию привязан к localhost. Маршрутизируемый --host или доступная сеть кластера меняют круг отправителей.[2], [5]
Затронутые версии- В раскрытии указаны версии 0.3.9–0.5.5, кандидаты 0.5.6 и ветка разработки по состоянию на 07.10.2026.[1], [2]
CWE-306: отсутствие аутентификации для критической функции- В записи CVE также указана
CWE-306, поскольку ZeroMQ ROUTER не аутентифицирует узлы-пиры. Это отдельная слабость на границе транспорта, отличная от небезопасного восстановления объектов через pickle (CWE-502). Для эксплуатации endpoint должен быть доступен; привязка по умолчанию к localhost сама по себе не делает его доступным из сети.[2]
Связи со стандартами
Пошаговый сценарий атаки
Условия развёртывания и действия
| Условие | Оценка |
|---|---|
| Многопроцессный режим отключён | Этот путь CVE не активен. |
| Режим привязан только к loopback | Удалённые узлы не должны достигать endpoint; проверьте сеть хоста и локальные границы доверия. |
| Маршрутизируемая привязка или открытый порт кластера | Считайте endpoint потенциально доступным; ограничьте доступ и проверьте права процесса. |
| Затронутые версии | В раскрытии указаны версии 0.3.9–0.5.5, кандидаты 0.5.6 и ветка разработки по состоянию на 07.10.2026. |
Исходный код: Уязвимый vs Защищённый вариант
Запись CVE Program связывает CVE-2026-105192 с JFrog и описывает путь расширение MessagePack → DeviceIPCWrapper.Deserialize → pickle.loads, привязку localhost по умолчанию, параметр --host и CVSS 9,8. Исходный код upstream подтверждает вызов десериализатора. В статье нет вредоносного pickle и не утверждается наличие исправления. Endpoint должен быть доступен; привязка к localhost сама по себе не делает его доступным извне. Временный пример кода отключает этот путь декодирования и не является готовым патчем LMCache; оцените влияние на службу и изолируйте сеть до выхода поддерживаемого исправления.[2], [1], [3], [4], [5]
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
return pickle.loads(data)
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
# Временная защита с отказом по умолчанию; это не исправление upstream.
raise PermissionError("LMCache peer deserialization disabled pending vendor fix")
Чек-лист по защите системы для инженеров
- ✓Инвентаризируйте установки LMCache и отметьте многопроцессный/распределённый режим, версии пакетов и контейнеров.[1], [2]
- ✓Проверьте фактический адрес привязки ZMQ и сетевые маршруты. Частная сеть не защищает, если endpoint доступен недоверенным рабочим нагрузкам или арендаторам.[2], [5]
- ✓До выпуска исправления поставщика отключите многопроцессный транспорт, если возможно, либо ограничьте loopback при работе на одном узле. Для обязательной многузловой работы разрешите порт только явно доверенным узлам; это сокращает доступность, но не делает pickle безопасным. Для любого будущего маршрутизируемого развертывания требуйте аутентификацию узлов ZMQ (например, CURVE или HMAC для каждого сообщения) и замените pickle проверяемым форматом данных; список разрешённых адресов в межсетевом экране не является аутентификацией.
- ✓Запускайте службу от отдельной непривилегированной учётной записи и удалите лишние возможности контейнера; запись CVE сообщает, что официальный контейнер работает от root.[2]
- ✓Следите за бюллетенями и выпусками LMCache. Обновляйтесь только до версии с явным исправлением
CVE-2026-105192; проверенные материалы раскрытия не указывают такую версию.[1], [2] - ✓Проверьте неожиданные подключения к порту многопроцессного транспорта (по умолчанию 5555 согласно записи CVE) и выясните экспозицию до вывода о компрометации.[2], [5]
Источники
- JFrog Security Research: CVE-2026-105192 mechanics and mitigations
- CVE Program record CVE-2026-105192 (JFrog CNA record)
- LMCache upstream: DeviceIPCWrapper deserialization source
- LMCache upstream: MessagePack extension decoding
- LMCache upstream: multiprocess ZeroMQ transport
- The Hacker News: critical LMCache pickle deserialization disclosure