Node.js 是一款广泛使用的开源服务器端 JavaScript 运行时,大量网站与后端服务基于其构建,其内置 zlib 模块静态集成了 Brotli 压缩算法的 C 语言解码器。2026年10月21日,Node.js 官方发布安全更新,披露该 Brotli 解码器存在越界写漏洞。解码器处理块类型切换时未正确传播校验失败:当数据流声明的块类型数量为 1(此时格式规定不存在块类型切换树)却又发出块切换命令时,失败结果被上层三个返回类型为 void 的封装函数丢弃,解码器携带未被有效赋值的块类型与不一致的块状态继续解码,越界索引被用于访问 Huffman 表与上下文映射,造成堆内存越界写。未经身份验证的远程攻击者可投递特制的 Brotli 数据流触发该漏洞,导致内存破坏并可能以 Node.js 进程权限执行任意代码,造成服务器失陷。成功利用要求宿主应用将不可信数据交由该解码器处理,主要路径为内置 fetch() 自动解压 HTTPS 响应体,以及 body-parser 2.1.0 及以上版本与 @fastify/compress 在鉴权前解压 br 请求体;利用可靠性依赖于运行时版本、构建形态与内存分配器布局,截至披露时未见公开利用代码与在野利用报告。受影响版本:22.23.4、24.22.1、26.12.1 之前的所有 22.x/24.x/26.x 版本(官方补丁仅覆盖这三条受支持分支,已停止维护的 18.x、20.x、25.x 等版本线不会获得修复)。
针对 Node.js 21.x 及更早版本(含 18.x、20.x)以及 23.x、25.x 等非 LTS 版本:
Node.js 官方已停止支持,不会获得本次安全更新,需迁移至受支持的版本线;部分发行版和长期支持(LTS)服务商可能提供安全补丁,请联系供应商确认修复情况。
针对受支持的版本线,Node.js 官方已发布安全更新版本,具体如下:
Node.js < 22.23.4(22.x 分支),升级至 22.23.4 或该分支更新版本。
Node.js < 24.22.1(24.x 分支),升级至 24.22.1 或该分支更新版本。
Node.js < 26.12.1(26.x 分支),升级至 26.12.1 或该分支更新版本。
升级后须重启全部 Node.js 进程;以单文件可执行程序、启动快照、内嵌运行时或固定标签容器镜像打包的副本不随宿主升级而更新,需重新构建。使用动态链接系统 Brotli 库的发行版打包版本时,须同时将系统 brotli 升级至 v1.2.1、v1.1.1 或 v1.0.10 及以上,仅升级 Node.js 不生效。