FlawOpen

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

● CVE-2026-105192 · CVSS 9.8[2] · Crítica
Pesquisa · FlawOpen

CVE-2026-105192: desserialização pickle sem autenticação no modo multiprocessado do LMCache

A CVE-2026-105192 permite que um par sem autenticação, ao alcançar o transporte multiprocessado do LMCache, acione desserialização insegura de pickle. Verifique se o endpoint ZMQ é roteável, restrinja o acesso e acompanhe uma correção do fornecedor.[1], [2]

Vetor CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 Explicação em Linguagem Simples (ELI5)

O LMCache recebe um pacote lacrado de um par da rede e o abre com um mecanismo capaz de executar instruções escondidas nele. A falha ocorre antes de o servidor verificar que tipo de mensagem o pacote declara ser.[1], [2]

Conceitos Centrais e Termos

CWE-502: desserialização insegura
O pickle do Python pode executar comportamentos ao reconstruir objetos. Não é seguro para dados enviados por um par de rede não confiável.[1], [2]
Modo multiprocessado do LMCache
Modo em que componentes do LMCache se comunicam por transporte ZeroMQ. O registro CVE descreve um endpoint ROUTER sem autenticação.[2], [5]
Extensão MessagePack
Um valor de extensão MessagePack chega a DeviceIPCWrapper.Deserialize durante a decodificação, antes da seleção do tipo de requisição.[2], [4], [3]
Limite de exposição
Segundo o registro CVE, o transporte usa localhost por padrão. Um --host roteável ou uma rede de cluster acessível altera quem pode enviar mensagens.[2], [5]
Versões afetadas
A divulgação cita as versões 0.3.9 a 0.5.5, incluindo candidatos a 0.5.6 e a branch de desenvolvimento, em 07/10/2026.[1], [2]
CWE-306: ausência de autenticação em função crítica
O registro CVE também atribui CWE-306 porque o ROUTER ZeroMQ não autentica os pares. Esse é um problema distinto no limite de transporte, separado da reconstrução insegura por pickle (CWE-502). A exposição ainda depende de um endpoint alcançável; o vínculo padrão ao localhost não é acessível remotamente por si só.[2]

Mapeamentos de frameworks

Fluxo de Ataque Passo a Paso

Passo 1

A implantação habilita o transporte multiprocessado

O problema afeta o modo multiprocessado/distribuído, não todas as instalações do LMCache.[2], [1]

Passo 2

Um par alcança o endpoint ZMQ

O registro CVE informa que o padrão é localhost; o operador pode configurar um --host roteável. A possibilidade de acesso é um pré-requisito.[2], [5]

Passo 3

A decodificação chama pickle.loads

A extensão MessagePack de código 1 chega a DeviceIPCWrapper.Deserialize, que chama pickle.loads antes de o manipulador validar o tipo da mensagem.[2], [4], [3]

Passo 4

O processo trata o objeto reconstruído

O registro afirma que a execução usa os privilégios do processo LMCache; o contêiner oficial executa como root. Isso descreve o impacto, não prova exposição de uma implantação específica.[2], [3]

Condição de implantação e resposta

CondiçãoAvaliação
Modo multiprocessado desativadoEste caminho da CVE não fica habilitado.
Modo multiprocessado com vínculo apenas em loopbackPares remotos não devem alcançar o endpoint; verifique a rede do host e os limites locais de confiança.
Vínculo roteável ou porta do cluster expostaConsidere potencialmente acessível; restrinja o acesso imediatamente e avalie os privilégios do processo.
Versões afetadasA divulgação cita as versões 0.3.9 a 0.5.5, incluindo candidatos a 0.5.6 e a branch de desenvolvimento, em 07/10/2026.

Código-Fonte: Vulnerável vs. Seguro

O registro do CVE Program atribui a CVE-2026-105192 à JFrog e documenta o caminho extensão MessagePack → DeviceIPCWrapper.Deserialize → pickle.loads, o vínculo localhost padrão, a opção --host roteável e CVSS 9,8. O código upstream confirma a chamada ao desserializador. Este artigo não inclui pickle weaponizado nem afirma existir correção do fornecedor. É necessário alcançar o endpoint; o vínculo local padrão, por si só, não o torna acessível remotamente. O exemplo de código temporário desativa esse caminho de decodificação e não é um patch direto do LMCache; avalie o impacto operacional e isole a rede enquanto aguarda uma correção suportada.[2], [1], [3], [4], [5]

IMPLEMENTAÇÃO VULNERÁVEL
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
PATCH SEGURO E ROBUSTO
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # Contenção temporária com falha fechada; não é um patch upstream.
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

Lista de Verificação de Segurança para Engenharia

Fontes

← AI Security Directory →