LMCache 严重远程代码执行漏洞仍未修复,公开的 PoC 漏洞利用程序已发布
原创
ZM
ZM
暗镜
2026年10月13日 06:00
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
LMCache 中的一个严重漏洞允许未经身份验证的攻击者利用不安全的 Python pickle反序列化,对可达的多进程部署执行任意代码。该漏洞的编号为 CVE-2026-105192,CVSS 评分为 9.8。JFrog 于 2026 年 10 月 7 日发布了一份安全公告和一个公开的概念验证漏洞利用程序,并表示截至该日期,尚无修复版本可用。
JFrog 安全研究团队的 Yuval Moravchick 发现了该漏洞,相关文档已记录在 JFSA-2026-001694382 号公告中。易受攻击的解码路径最早出现在 0.3.9 版本中,并且仍然存在于 0.5.5 版本中,以及所有版本候选版本(直至 0.5.6rc3)和 10 月 7 日审查的开发分支中。LMCache 的多进程模式(也称为分布式模式)会打开一个 ZeroMQ ROUTER 套接字,允许工作进程注册和共享键值缓存块。虽然此传输是为同级 LMCache 进程设计的,但它缺乏身份验证(例如 CURVE、ZAP 或密码保护),使得可达实例容易受到不受信任的消息的影响。默认情况下,此传输使用本地主机。运维人员可以通过使用 --host 选项配置可路由地址来启用节点之间的连接。JFrog 强调,9.8 的严重评分仅适用于这种可通过网络访问的配置,而不适用于默认的单主机部署,后者无法从其他机器访问。仅在 vLLM 进程中运行的 LMCache 不会打开受影响的端口。
传入的消息使用 MessagePack,扩展代码为 1,并关联到 DeviceIPCWrapper。解码过程中,lmcache/v1/multiprocess/custom\\_types.py 中的扩展钩子会将嵌入的数据转发到 lmcache/v1/platform/base/ipc\\_wrapper.py 中的 DeviceIPCWrapper.Deserialize 函数。该函数会调用 pickle.loads,从而允许攻击者控制的序列化对象触发代码执行。
重要的是,反序列化发生在服务器处理 REGISTER\_KV\_CACHE 参数期间,即请求处理程序执行之前。因此,后续的任何参数检查或处理程序错误都无法阻止解码过程中已执行的代码。JFrog 的公开演示通过 ZeroMQ DEALER 套接字向传输的默认端口 5555 发送精心构造的多部分消息。缓存有效负载包含一个 MessagePack 扩展,其中包含一个恶意 pickle 对象,该对象在重建期间执行操作系统命令。
该演示会将 id 命令的输出写入 /tmp/zmq\\_pwn 目录,从而确认该命令是在 LMCache 进程账户下执行的。官方容器镜像会以 root 用户身份运行此进程,这确认了该命令是在容器内部以 root 用户身份执行的,而不是演示如何逃逸到底层主机。执行后,服务器记录了一个类型错误,因为处理程序接收到了命令的返回值,而不是预期的包装对象。但这个错误发生得太晚,无法阻止攻击。JFrog 建议使用安全的序列化格式替换基于 pickle 的网络反序列化,并使用 CURVE 或逐消息 HMAC 验证等方法对 ZeroMQ 传输进行身份验证。除非配置了身份验证,否则应禁止可路由绑定。在这些变更实施之前,运维人员应避免使用可路由的 --host 设置,尽可能保持本地主机绑定,并通过防火墙规则限制所需的集群访问权限。虽然网络隔离可以减少暴露风险,但并不能彻底解决漏洞;任何能够连接到易受攻击的传输层的系统仍然可以以 LMCache 进程的权限执行代码。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论