2026年10月21日,Node.js 项目发布 22.23.4、24.22.1 和 26.12.1 三个版本线更新,集中修复 10 项漏洞。其中最严重的是 CVE-2026-111497:Brotli 解码器中的越界写入缺陷,攻击者提供特制的 Brotli 压缩数据,可能触发内存破坏并导致远程代码执行。受影响的是 22.x 低于 22.23.4、24.x 低于 24.22.1、26.x 低于 26.12.1 的版本;已停止维护的 Node.js 20 及更早版本不在本次修复范围内。

这次更新值得后端开发者、容器镜像维护者和安全运维重点关注,原因不只是漏洞评级高,而是缺陷位于 Node.js 捆绑的 Brotli 解码库中。只要应用会解压来自外部的 Brotli 数据,受影响的不只是直接调用压缩接口的代码,还可能包括框架、中间件、代理组件或命令行工具中隐式启用解压的路径。同批更新还修复了两项高危的 TLS 主机名验证绕过问题(CVE-2026-105482、CVE-2026-105483),以及另外七项较低 severity 的问题。对于仍在使用旧版本线的组织,本次公告再次暴露了“版本线本身已无补丁”的风险。
关键变化与影响范围
官方给出的修复版本对应关系较为清晰:
| 版本线 | 受影响范围 | 修复版本 |
|---|---|---|
| Node.js 22.x | 低于 22.23.4 | 22.23.4 |
| Node.js 24.x | 低于 24.22.1 | 24.22.1 |
| Node.js 26.x | 低于 26.12.1 | 26.12.1 |
| Node.js 20 及更早 | 不再提供修复 | 需迁移到受支持版本线 |
更隐蔽的暴露面在构建链和运行环境中。容器基础镜像可能仍包含旧版 Node.js;CI 流水线若缓存了 Node 二进制或依赖安装产物,可能在重新构建时把漏洞版本带回镜像;Serverless 的运行时层、开发机上的全局工具、部分 AI agent 命令行工具,也可能捆绑独立的 Node.js 或同一 Brotli 解码器。资料中提到 Bun 等运行时同样捆绑了解码组件,但这类判断应以各项目官方公告和实际版本核对为准,不能仅凭“使用了 Brotli”就推定受影响。
关于在野利用,目前公开信息存在不同表述。Node.js 官方公告确认了漏洞和修复版本;有第三方文章称 CISA 已将该漏洞纳入已知被利用漏洞目录,也有报道称尚未确认实际攻击。此类状态会随时间变化,读者应以 CISA 目录和 Node.js 官方安全公告的原始条目为准,不宜把转述当作最终结论。
资产盘点与升级验证
实际处置应从“按版本线盘点”开始,而不是只升级某个业务应用。先列出生产服务器、容器镜像、CI runner、构建缓存、Serverless 层和开发终端中所有 Node.js 运行时,逐一记录 node --version 与镜像构建来源。对容器镜像,不能只看 Dockerfile 中的基础镜像标签,还要检查最终镜像内实际存在的二进制;对 CI,需要确认缓存是否会在新构建中复用旧 Node 版本。
升级时,22、24、26 三条线分别落到 22.23.4、24.22.1、26.12.1 或各自线内更高修复版本。升级后重新构建所有相关镜像和制品,避免只更新宿主机而把旧版本继续发布出去。验证至少包括:运行时版本核对、镜像内版本核对、Brotli 解压相关接口的回归测试,以及 TLS 主机名验证相关连接的检查。若业务依赖旧版 ABI 或原生模块,应先在测试环境确认兼容性,再进入生产。
回滚与持续核查
回滚方案应建立在可追溯的镜像摘要和版本清单上,而不是简单回退到上一个标签。升级前保留旧镜像、依赖锁文件和构建日志;升级后观察解压路径是否出现异常崩溃、原生解码器报错、异常子进程或非预期外连。若验证失败,回滚到已知可用的镜像摘要,并同步恢复对应的运行时版本,避免出现“应用回滚了、基础镜像仍是新版”或相反的不一致状态。
对无法升级的 Node.js 20 及更早系统,应将其视为迁移优先级,而不是长期依赖临时缓解。短期可通过限制不可信 Brotli 数据的入口、在边界层做解压前置检查来降低暴露,但这些措施不能替代补丁。最终需要回答的问题很具体:哪些生产系统运行 Node.js,它们分别位于哪条版本线,构建链中是否还藏着旧版本,以及能否用可复核的证据证明已经更新。
- it2021
- it2021.com
- 代码执行
- 命令行工具
- 安全运维
- 远程代码执行





1F
刚升完24.22.1,还得查查镜像里实际版本
2F
Brotli这个点确实容易忽略,中间件自动解压的太多了
3F
容器基础镜像最容易漏,标签对不代表里面版本对