第三块「运行时底座」开始松动
如果你看过我前面写的 PHP 和 GitLab 那两篇,会发现一个趋势:最近的高危漏洞,越来越多出在「看不见的底层」——语言运行时、正则引擎、解码器。10 月 21 日,这次轮到 Node.js。
Node.js 官方在 10 月 21 日发布安全更新,一次性修复了 10 个问题,其中最严重的是 CVE-2026-111497:Brotli 解码器的越界写,可导致远程代码执行,CVSS 4.0 评分 9.2,高危。
这个漏洞到底是什么
Brotli 是一种压缩算法,Node.js 内置了它的解码器。问题出在:当解码器遇到一个「精心构造的畸形压缩流」时,会写出缓冲区边界,造成越界写。攻击者利用这一点,可以造成内存泄露,甚至以 Node.js 进程的权限执行任意代码——说白了就是拿下这台机器。
受影响的是 22.x、24.x、26.x 三条受支持版本线,官方修复版本为 v26.12.1、v24.22.1、v22.23.4。而 20.x 已经到达生命周期终点(EOL),不会再收到这个补丁——还在跑 20.x 的,等于裸奔。
一个必须澄清的关键点
这类漏洞被报道时,很容易被夸大成「所有 Node 服务都会被黑」。事实上不是。Vercel 的安全公告讲得很清楚:Node.js 自身不会主动解压 Brotli 数据。真正的暴露条件,是你的应用代码、或者某个依赖库,去解压了「攻击者可控制」的 Brotli 数据——比如请求体是一段 Brotli,或者去 fetch 了一个返回 Brotli 的响应。
这意味着两件事:
- 不是「装了 Node 就危险」,而是「会处理 Brotli 输入的那部分代码路径危险」;
- 但反过来,「只在 fetch 响应上」这条路径,只有升级运行时本身才能覆盖——你在应用层是堵不住的。
所以准确的说法是:风险是有条件的,但一旦命中,后果是整套的 RCE。这也是为什么官方、各大云平台都把它列为本轮最高优先级。
发现它的,又是 AI
这条漏洞由 OpenAI Codex Security 的 Khai Tran 和 Sylvie Mayer 报告,修复者是 Node.js 核心团队的 mcollina 和 aduh95。这已经是我近期第三篇「AI 挖出底层漏洞」的稿子了——从 PHP 的 GPT-6 辅助发现,到 GitLab 的赏金计划,再到这里。AI 参与漏洞发现,正在从「新闻」变成「日常」。
同批还修了什么
这次发布不只有 Brotli 一件事,官方一揽子修了 10 个问题,包括几个同样值得注意的:
- eMudhra 中间 CA 泄露:一家第三方证书机构的多张中间 CA 证书的私钥存在泄露风险,多个根证书项目已将其移除,Node 内置的 CA 库也同步更新;
- Undici 更新:Node 内置 HTTP 客户端,本轮修复了与 TLS 主机名校验绕过相关的两处高危;
- OpenSSL、c-ares、SQLite 等依赖的例行安全更新。
这组修复放在一起,说明看 Node 安全不能只看「Node 自己」,它的内置依赖(CA、HTTP 客户端、TLS、DNS、数据库)同样是攻击面。
现在该做什么
三步,直接照做:
- 升级到 v26.12.1 / v24.22.1 / v22.23.4(npm 里换 runtime,或直接更新容器的 base image);
- 20.x 用户立即迁移到 22.x 或 24.x——EOL 分支没有补丁;
- 排查 Brotli 解压路径:凡是会解压请求体或第三方响应里 Brotli 数据的代码、中间件、依赖,优先重点加固或加 WAF 拦截畸形压缩流。
我的判断
这已经是我在这个站写的第三篇「运行时层」漏洞了(PHP 内存管理 → GitLab/Ruby 正则引擎 → Node.js Brotli 解码器)。它们的共性很清楚:出问题的不是业务代码,而是语言运行时和内置依赖里那些「多年没动、但无处不在」的底层组件。
对开发者的启示也很一致:你可以在业务层把代码审得干干净净,但只要栈底层的某个老解码器、老正则引擎有个埋了多年的 bug,你就依然可能被一击命中。运行时安全,正在从「可选项」变成 CI/CD 和运维清单里必须单列的一项。










暂无评论内容