FlawOpen

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

● CVE-2026-105192 · CVSS 9.8[2] · 严重
安全研究 · FlawOpen

CVE-2026-105192:LMCache 多进程模式中的未认证 pickle 反序列化

CVE-2026-105192 会让能够访问 LMCache 多进程传输端点的未认证对端触发不安全的 pickle 反序列化。请检查 ZMQ 端点是否可路由、限制访问,并关注厂商修复。[1], [2]

CVSS 向量CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 通俗易懂的原理解析 (ELI5)

LMCache 收到网络对端寄来的密封包裹,却用一种可能执行其中隐藏指令的方式打开它。服务器还没检查包裹声称的消息类型,问题就已发生。 这就像快递员没有核对收件人,就让包裹里的自动装置启动。[1], [2]

核心概念与专有名词

CWE-502:不安全反序列化
Python pickle 在重建对象时可能执行行为,因此不能用于处理不可信网络对端提供的数据。[1], [2]
LMCache 多进程模式
LMCache 组件通过 ZeroMQ 传输通信的模式。CVE 记录描述了未认证的 ROUTER 端点。[2], [5]
MessagePack 扩展
解码期间,MessagePack 扩展值会进入 DeviceIPCWrapper.Deserialize,早于请求类型分派。[2], [4], [3]
暴露边界
CVE 记录称传输默认绑定 localhost。可路由的 --host 或可访问的集群网络会改变可发送消息的主体。[2], [5]
受影响版本
披露信息称,截至 2026-10-07,受影响版本为 0.3.9 至 0.5.5,也包括 0.5.6 候选版和开发分支。[1], [2]
CWE-306:关键功能缺少身份验证
CVE 记录还列出了 CWE-306,因为 ZeroMQ ROUTER 不验证对端身份。这是传输边界上的独立弱点,与不安全的 pickle 对象重建(CWE-502)不同。风险仍以端点可达为前提;默认绑定到 localhost 本身不会让远程主机访问该端点。[2]

框架映射

攻击执行流程分解

步骤 1

部署启用了多进程传输

问题涉及 LMCache 多进程/分布式模式,并非所有 LMCache 安装。[2], [1]

步骤 2

对端能够访问 ZMQ 端点

CVE 记录称默认使用 localhost;运维人员可以设置可路由的 --host。可达性是前提。[2], [5]

步骤 3

解码过程调用 pickle.loads

代码为 1 的 MessagePack 扩展进入 DeviceIPCWrapper.Deserialize,并在处理器检查消息类型前调用 pickle.loads。[2], [4], [3]

步骤 4

进程处理重建后的对象

记录指出代码以 LMCache 进程权限执行;官方容器以 root 运行。这说明影响,不代表某个部署必然暴露。[2], [3]

部署条件与响应

条件评估
未启用多进程模式此 CVE 路径未启用。
多进程模式仅绑定 loopback远程网络对端通常无法访问端点;仍需检查主机网络与本地信任边界。
绑定到可路由地址或集群端口暴露按可能可达处理,立即限制访问并检查进程权限。
受影响版本披露信息称,截至 2026-10-07,受影响版本为 0.3.9 至 0.5.5,也包括 0.5.6 候选版和开发分支。

源代码对比:漏洞与安全实现

CVE Program 记录将 CVE-2026-105192 归于 JFrog,并记载 MessagePack 扩展 → DeviceIPCWrapper.Deserialize → pickle.loads 的调用路径、默认 localhost 绑定、可路由的 --host 选项及 CVSS 9.8。上游代码确认了反序列化调用。本文不提供可武器化的 pickle,也不声称厂商已发布补丁。必须能够访问该端点才有此风险;默认本地绑定本身不会让服务可从远程网络访问。临时代码示例会关闭该解码路径,并非可直接套用的 LMCache 补丁;请评估服务影响,并在等待受支持修复期间隔离网络。[2], [1], [3], [4], [5]

存在漏洞的实现
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
加固后的安全修复
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # 临时的故障关闭式遏制措施,并非上游补丁。
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

工程与系统安全加固清单

参考来源

← AI Security Directory →