系统:运行中
← 返回所有攻击
INFRASTRUCTURE MEDIUM NEW

vLLM 结构化输出:一条正则即可冻结推理 worker

2026 年 7 月的一则公告显示,vLLM 结构化输出的正则参数在编译用户模式时没有任何超时限制,一次精心构造的请求即可挂起 worker 并中断服务。已在 0.24.0 修复。

2026-07-15 // 5 min affects: vllm, vllm-<0.24.0, structured-outputs-api

这是什么?

2026 年 7 月 6 日,面向 vLLM 发布了一则安全公告。vLLM 是部署最广泛的大语言模型开源推理与服务引擎之一。该缺陷是结构化输出功能中的一个拒绝服务问题:允许调用方将模型输出约束为符合某个正则表达式的 API 参数,会把用户提供的模式直接交给语法编译器,没有任何时间或复杂度上限。一次携带恶意模式的请求即可无限期地占住一个推理 worker。该问题被归类为正则表达式复杂度低效缺陷(CWE-1333,即通常所说的 ReDoS),影响 0.24.0 之前的所有版本,并已在该版本修复。

这既不是提示词层面的攻击,也不是模型越狱,而是一个经典的服务层可用性缺陷,只不过恰好位于 LLM 特有的功能之中——正是随着团队把受约束解码接入生产 API 而不断扩大的那类攻击面。

工作原理

结构化输出通过在每个 token 上约束解码器,让应用能够强制模型输出符合某种模式(JSON、语法或原始正则表达式)的文本。为此,所选正则必须被编译成采样器会查询的状态机。

在受影响的版本中,这一编译步骤没有任何防护。在 xgrammar 后端,模式会直接抵达正则编译器;在 outlines 后端,校验会拒绝诸如环视(lookaround)和反向引用(backreference)等结构性写法,却不做任何复杂度分析——因此由嵌套量词构造的模式能通过所有检查,随后引发爆炸。某些正则形态会让编译器探索指数级数量的状态,于是一个短小、看似无害的字符串就转化为几乎无上限的计算量。由于该请求经网络无需认证即被接受,且编译发生在任何生成之前,一次构造的调用便足以挂起 worker,并使路由到它的所有正常请求陷入饥饿。报告的影响仅涉及可用性——没有代码执行,也没有数据泄露——攻击向量为网络,且无需任何权限。我们在此有意不复现任何触发模式;重点是机制本身,而非可直接使用的载荷。

为何重要

vLLM 处于大量自托管与企业级 LLM 技术栈的核心,通常位于一个信任其调用方的内部网关之后。结构化输出是让模型响应可被程序解析的常见方式,因此这个易受攻击的参数并非偏僻角落,而恰恰是在自动化、高吞吐流水线中被频繁使用的功能——而未被察觉的挂起在这类场景中危害最大。在共享的多租户部署中,任何一个能设置正则的租户都可能拖垮同一 worker 池上其他所有租户的服务;而一个暴露在外的端点,会把一行请求变成低成本的宕机。这是一个有益的提醒:LLM 服务层在承担模型特有风险之外,也继承了普通 Web 服务的一切常规风险。同一引擎中相邻的可用性缺陷——从音频上传导致的内存耗尽问题更广义的服务层攻击面——都指向同一条教训。

防御

将 vLLM 升级到 0.24.0 或更高版本。这是主要且完整的修复:补丁加入了有界的编译步骤,使得恶意模式会快速失败,而不再挂起。公告还记录了一个编译超时控制项(VLLM_REGEX_COMPILATION_TIMEOUT_S,默认五秒),它会抛出错误而非无限期阻塞,为你提供一个可记录与告警的信号。

除打补丁外,请将正则参数视为不可信输入。如果你的应用并不需要调用方提供正则,就禁用或在代码中固定结构化输出的模式,而不要让用户值直接通过。若必须接受,请在编译前校验模式的长度与复杂度,并拒绝嵌套量词。不要直接暴露推理端点:要求认证,并按调用方施加速率限制,使单个客户端无法独占 worker。

在检测方面,留意在编译期间停止响应或 CPU 飙升的推理 worker,并在修复到位后监控编译超时错误。常用的系统工具——用 top/htop 定位卡住的 worker,对可疑进程做跟踪以判断其是否卡在正则编译中——都能揭示正在进行的尝试。

状态

项目详情
受影响vLLM,0.24.0 之前的所有版本
修复版本vLLM 0.24.0(PR #45118)
缺陷类型CWE-1333,正则表达式复杂度低效(ReDoS)
影响拒绝服务——仅可用性;无需认证、网络、无需权限
严重度CVSS 4.0 8.7(高,CNA)/ CVSS 3.1 7.5(高,NVD);本站评级:中
参考CVE-2026-55574(发布于 2026-07-06);公告 GHSA-rwxx-mrjm-wc2m

Sources