flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192
CVE-2026-105192: deserialización pickle sin autenticación en el modo multiproceso de LMCache
CVE-2026-105192 permite que un par sin autenticar que alcance el transporte multiproceso de LMCache active una deserialización insegura de pickle. Comprueba si el endpoint ZMQ es enrutable, restringe el acceso y sigue las novedades de una corrección del proveedor.[1], [2]
LMCache recibe un paquete sellado de un par de la red y lo abre con un mecanismo capaz de ejecutar instrucciones ocultas. El fallo ocurre antes de que el servidor compruebe qué tipo de mensaje afirma ser el paquete.[1], [2]
Conceptos Clave y Términos
CWE-502: deserialización insegura- pickle de Python puede ejecutar comportamiento al reconstruir objetos. No es seguro para datos enviados por un par de red no confiable.[1], [2]
Modo multiproceso de LMCache- Modo en el que componentes de LMCache se comunican mediante transporte ZeroMQ. El registro CVE describe un endpoint ROUTER sin autenticación.[2], [5]
Extensión MessagePack- Un valor de extensión MessagePack llega a DeviceIPCWrapper.Deserialize durante la decodificación, antes de seleccionar el tipo de solicitud.[2], [4], [3]
Límite de exposición- El registro CVE indica que el transporte usa localhost de forma predeterminada. Un --host enrutable o una red de clúster accesible cambia quién puede enviar mensajes.[2], [5]
Versiones afectadas- La divulgación señala las versiones 0.3.9 a 0.5.5, incluidas las candidatas 0.5.6 y la rama de desarrollo, a 07-10-2026.[1], [2]
CWE-306: falta de autenticación para una función crítica- El registro CVE también asigna
CWE-306porque el ROUTER de ZeroMQ no autentica a los pares. Es una debilidad distinta en el límite de transporte, separada de la reconstrucción insegura con pickle (CWE-502). La exposición sigue dependiendo de que el endpoint sea accesible; el enlace predeterminado a localhost no es remoto por sí solo.[2]
Mapeos de marcos
Flujo de Ataque Paso a Paso
Condición de despliegue y respuesta
| Condición | Evaluación |
|---|---|
| Modo multiproceso deshabilitado | Esta ruta de la CVE no está habilitada. |
| Modo multiproceso enlazado solo a loopback | No se espera que pares remotos alcancen el endpoint; verifica la red del host y los límites locales de confianza. |
| Enlace enrutable o puerto del clúster expuesto | Trátalo como potencialmente accesible; restringe el acceso de inmediato y evalúa los privilegios del proceso. |
| Versiones afectadas | La divulgación señala las versiones 0.3.9 a 0.5.5, incluidas las candidatas 0.5.6 y la rama de desarrollo, a 07-10-2026. |
Código Fuente: Vulnerable vs. Seguro
El registro del CVE Program atribuye CVE-2026-105192 a JFrog y documenta la ruta extensión MessagePack → DeviceIPCWrapper.Deserialize → pickle.loads, el enlace predeterminado a localhost, la opción --host enrutable y CVSS 9,8. El código upstream confirma la llamada al deserializador. Este artículo no incluye pickle weaponizado ni afirma que exista un parche del proveedor. Se necesita alcanzar el endpoint; el enlace local predeterminado no lo hace accesible remotamente por sí solo. El ejemplo temporal desactiva esta ruta de decodificación y no es un parche directo de LMCache; evalúa el impacto operativo y aísla la red mientras esperas una corrección compatible.[2], [1], [3], [4], [5]
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
return pickle.loads(data)
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
# Contención temporal con cierre seguro; no es un parche upstream.
raise PermissionError("LMCache peer deserialization disabled pending vendor fix")
Lista de Verificación de Seguridad para Ingeniería
- ✓Inventaría los despliegues de LMCache e identifica los que usan modo multiproceso o distribuido; registra las versiones del paquete y del contenedor.[1], [2]
- ✓Comprueba la dirección real de enlace ZMQ y las rutas de red. No des por segura una red privada si cargas o inquilinos no confiables pueden alcanzar el endpoint.[2], [5]
- ✓Hasta que el proveedor publique una corrección, desactiva el transporte multiproceso cuando sea posible o limítalo a loopback si basta operar en un solo host. Si necesitas varios nodos, limita el puerto a pares expresamente confiables; reduce el alcance, pero no hace seguro pickle. Para cualquier despliegue enrutable futuro, exige pares ZMQ autenticados (por ejemplo, CURVE o HMAC por mensaje) y sustituye pickle por un formato de datos validado; una lista de permitidos en el firewall no es autenticación.
- ✓Ejecuta el servicio con una cuenta dedicada sin privilegios y elimina capacidades innecesarias del contenedor; el registro CVE indica que el contenedor oficial se ejecuta como root.[2]
- ✓Sigue los avisos y versiones de seguridad de LMCache. Actualiza solo a una versión que corrija expresamente
CVE-2026-105192; el material revisado no identifica una versión corregida.[1], [2] - ✓Busca conexiones inesperadas al puerto de transporte multiproceso (5555 de forma predeterminada según el registro CVE) e investiga la exposición antes de asumir que hubo compromiso.[2], [5]
Fuentes
- 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