事件经过
LMCache 的多进程/分布式模式打开一个未认证的 ZeroMQ ROUTER(默认端口5555),以便工作进程共享 KV 缓存块。消息为 msgpack 格式,扩展代码1被传递给 DeviceIPCWrapper.Deserialize,后者在解码请求参数时调用 pickle.loads。因此,当传输绑定到可路由地址(如多节点部署所做的那样)时,单个未认证的 ZMQ 消息即可作为 LMCache 进程执行代码——在官方容器镜像中为 root。
影响分析
LMCache 是许多团队会附加到 vLLM 推理服务器的 KV 缓存层;能够访问传输端口的攻击者可在模型服务主机上获得预认证 RCE,读取/写入模型权重和提示缓存,并转向服务集群。这完全是 AI 服务基础设施缺陷。一个同类/相关问题(CVE-2026-107204)和一个可选的 /run_script 端点扩大了暴露面。
攻击途径
向传输端口发送单个未认证的 ZMQ DEALER 消息,携带精心构造的 msgpack 扩展,触发 pickle.loads
受影响系统
LMCache 0.3.9 至 0.5.5(及 0.5.6 发布候选版)用作 vLLM 的 KV-cache 层;当 ZeroMQ 传输绑定可路由地址时暴露 / 示例 K8s 清单绑定所有接口
缓解措施
升级到 LMCache 0.5.6(用版本化类型化 MessagePack 替换 pickle;示例 K8s 清单现在绑定 localhost,镜像以非 root 运行)。在此之前,将传输保持在 localhost/可信集群上,防火墙封禁端口5555,并以非 root 运行