GitHub 于 9 月 4 日 21:37:00 UTC 发布了 GHSA-48jh-3gj7-fg8v——即 CVE-2026-73556,CVSS 5.3,针对 vLLM,这一最广泛部署的开源推理服务器。各家信息流将其解读为一项新的拒绝服务漏洞。事实上,这与项目在 7 月修复过的那个问题是同一个,只是仍然存留在修复未触及的代码路径中。

同源路径

公告表述得很明确:"对 GHSA-rwxx-mrjm-wc2m 的修复……在 xgrammaroutlines 后端中用 compile_regex_with_timeout 包裹了正则编译(而对于 outlines,还加入了 validate_regex_is_buildable)。lm-format-enforcer 后端则没有任何保护:它会直接编译攻击者提供的正则,既没有超时限制,也没有可构建性检查。" 这三个后端最终都会走到同一个 interegular DFA 构建过程;其中两个受到限制,另一个没有。

测量结果

公告给出了自己的计时结果:基线 '[0-9]{3}' 的编译耗时为 0.0002 秒;而攻击者的 '(a{1,300}){300}' 在 20 秒内都未完成,“interegular 的 FSM 构建中有一个核心一直卡在 100% 负载”。由于语法编译发生在引擎的结构化输出路径中,请求不会返回,并且后续并发请求会在其后排队停滞——这是工作线程级别的拒绝服务。公告指出,在 outlines 后端上发起完全相同的请求会返回一个干净的错误。

收到的表述哪里说错了

有两点。首先,这不是一种新的攻击类别,而是补丁完整性失败——真正值得注意的是,一项安全修复落在三个同级调用点中的两个上,而六周都没人发现。其次,“受影响版本 < 0.26.0”读起来像是当前仍然暴露:0.26.0 已于 7 月 27 日发布,当前版本是 0.28.0,因此这一披露比修复晚了 39 天。任何一直跟进 vLLM 版本更新的人在 7 月后就不再暴露;任何仍锁定在更低版本的人,自那时起一直处于暴露状态,只是自己并不知道。

几乎算不上条件的前提

公告记录称,“vLLM 默认不提供身份验证”。这次攻击只需要向 /v1/completions 发送一个带结构化输出正则的 POST 请求——不需要凭据,不需要除该端点之外的模型访问,也不需要任何特殊配置,唯一例外是选择 lm-format-enforcer 后端。结构化输出恰恰是大多数生产部署会开启的功能,因为它能让 JSON 响应更可靠。