FlawOpen

flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192

● CVE-2026-105192 · CVSS 9.8[2] · Crítica
Investigación · FlawOpen

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]

Vector CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 Explicación en Lenguaje Sencillo (ELI5)

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-306 porque 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

  • Referencia CWE para la debilidad descrita en esta guía: CWE-306 CWE-502

Flujo de Ataque Paso a Paso

Paso 1

El despliegue habilita el transporte multiproceso

El problema afecta al modo multiproceso/distribuido, no a todas las instalaciones de LMCache.[2], [1]

Paso 2

Un par puede alcanzar el endpoint ZMQ

El registro CVE indica localhost como valor predeterminado; el operador puede configurar un --host enrutable. La accesibilidad es un requisito.[2], [5]

Paso 3

La decodificación invoca pickle.loads

La extensión MessagePack de código 1 llega a DeviceIPCWrapper.Deserialize, que llama a pickle.loads antes de que el manejador valide el tipo de mensaje.[2], [4], [3]

Paso 4

El proceso maneja el objeto reconstruido

El registro indica que el código se ejecuta con los privilegios del proceso LMCache; el contenedor oficial se ejecuta como root. Esto describe el impacto, no demuestra la exposición de un despliegue concreto.[2], [3]

Condición de despliegue y respuesta

CondiciónEvaluación
Modo multiproceso deshabilitadoEsta ruta de la CVE no está habilitada.
Modo multiproceso enlazado solo a loopbackNo 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 expuestoTrátalo como potencialmente accesible; restringe el acceso de inmediato y evalúa los privilegios del proceso.
Versiones afectadasLa 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]

IMPLEMENTACIÓN VULNERABLE
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
PARCHE SEGURO Y ROBUSTO
@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

Fuentes

← AI Security Directory →