多模态输入即攻击面:vLLM 视频解码器远程代码执行(CVE-2026-22778)
CVE-2026-22778 让一个恶意视频 URL 在 vLLM 服务器上变成远程代码执行,它把 PIL 的信息泄露与 FFmpeg JPEG2000 解码器的堆溢出串联起来。已在 0.14.1 修复。
摘要 关于 LLM 安全的讨论大多围绕提示词(prompt)。CVE-2026-22778 提醒我们:推理服务器的媒体解码流水线同样是攻击面。向一个提供视频模型的 vLLM 端点发送恶意视频,可以把内存地址泄露与内置原生解码器中的堆溢出串联起来,实现远程代码执行——完全不涉及提示词注入。受影响版本为 vLLM
0.8.3至0.14.0;修复在 0.14.1。vLLM 默认不带身份认证,因此暴露在公网的部署可被直接触达。
这是什么?
vLLM 是部署最广泛的大语言模型服务引擎之一,其 Python 包每月下载量超过三百万次。当它服务于多模态模型时,用户输入就不再只是文本:图像和视频会被提交到 API,并在到达模型之前先经过解码。
CVE-2026-22778(GitHub 公告 GHSA-4r2x-xpjr-7cvv)由 OX Security 于 2026 年 2 月 2 日首次公开分析,此后被 NVD 及多个漏洞数据库收录,是该解码路径中的一个远程代码执行漏洞。能够向提供视频模型的 vLLM 实例提交构造视频 URL 的攻击者,可在主机上执行任意命令。不提供视频模型的部署不受影响。
工作原理
所披露的问题是一次链式利用——两个各自单独看来不强、但组合起来极具破坏力的弱点。下文仅在概念层面描述其机制,不在此复现任何可用的攻击载荷。
第一环是信息泄露。当向多模态端点发送一张无效图像时,Python 图像库(PIL)会抛出错误,而其错误消息被返回给客户端。该消息中包含一个堆内存地址。泄露哪怕一个有效地址,都会让本应由 ASLR(地址空间布局随机化)保护的搜索空间崩塌——防御者形容其效果是把大约四十亿种可能的猜测缩减到屈指可数的几次。
第二环是 JPEG2000 解码器中的堆缓冲区溢出。vLLM 使用 OpenCV 解码视频,而 OpenCV 内置了 FFmpeg 5.1.x。JPEG2000 解码器信任图像的通道定义(cdef)元数据来重映射颜色通道,却不重新校验缓冲区大小,于是本应写入某一通道的数据可能被写入另一通道更小的缓冲区,溢出到相邻的堆内存。由于攻击者同时控制图像几何尺寸与通道映射,他便控制了被覆写的内存数量以及受影响的相邻对象。结合上一步泄露的地址,这种控制足以覆写一个函数指针,并将执行流重定向到诸如 system() 之类的 libc 例程。
触发条件是再普通不过的 API 调用:把视频 URL 传给针对视频模型的补全(completions)或调用(invocations)请求。通过 pip 或 Docker 默认安装的 vLLM 实例没有任何身份认证,因此暴露在公网的端点可被直接触达。
为何重要
其教训远不止于这一个 CVE。团队会在提示词注入和越狱上反复推敲,却把不可信的图像和视频直接转发给原生的 C/C++ 解码器——这类代码有着悠久的内存安全漏洞历史——并且与模型及其凭据运行在同一进程中。技术栈中的「AI」部分,继承了其底层媒体处理库的全部经典内存破坏风险。
影响范围之所以大,源于推理服务器的位置:紧邻 GPU、模型权重、内部网络与 API 密钥。此处的 RCE 意味着服务器被完全接管、数据外泄与横向移动。而且该溢出存在于一个内置的第三方依赖中,因此某个组织可能在从未编写或审查过那行脆弱代码的情况下就已暴露。截至披露时,没有公开证据表明已遭野外利用,但受影响版本横跨多个发行版。
防御措施
- 升级到 vLLM 0.14.1 或更高版本。 修复通过 #31987、#32319 和 #32668 三个拉取请求落地——它对泄露的错误消息进行脱敏,并更新了存在漏洞的解码器。用
pip show vllm检查你的版本。 - 若无法立即升级,在生产环境中暂时禁用视频模型功能。 仅通过已修复路径服务文本或图像的部署,不暴露于这一特定利用链。
- 绝不要把裸露的 vLLM 端点暴露给不可信网络。 vLLM 默认无认证;把它置于经过认证的网关之后,限制入站流量,并将每一个上传的媒体对象都当作敌意输入对待。
- 对解码与推理层做沙箱隔离。 在出站网络受限、最小权限的精简容器中运行服务,并与敏感数据存储分段,使解码器被攻陷后无法向环境其余部分横向移动。
- 不要把库的原始错误返回给客户端。 泄露异常文本——地址、栈帧、路径——是一种反复出现的信息泄露原语。在 API 边界拦截并替换内部错误消息。
- 追踪你的原生依赖。 图像与视频解码器(OpenCV、FFmpeg、PIL)是你 LLM 攻击面的一部分。在 SBOM 中固定并监控它们,并以对待模型框架本身同等的紧迫性为其打补丁。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| CVE-2026-22778 公告 | GitHub (GHSA-4r2x-xpjr-7cvv) | 2026 | 信息泄露 + 堆溢出链式,经视频实现 RCE |
| 公开技术分析 | OX Security | 2026-02-02 | PIL 地址泄露 + FFmpeg JPEG2000 溢出 |
| 受影响版本 | vLLM | 0.8.3 → 0.14.0 | 仅服务视频模型的部署 |
| 已修复版本 | vLLM 0.14.1 | — | 修复 PR #31987、#32319、#32668 |
正确的视角不是「又一个 vLLM CVE」。而是:多模态端点悄无声息地把一个 LLM 服务的攻击面延伸到了已有数十年历史的原生媒体代码——而这片攻击面,理应获得与任何其他不可信解析器同等的隔离、对输入的不信任,以及依赖卫生。