Node.js修复10个安全漏洞,其中Brotli漏洞可致远程代码执行
Node.js项目为22、24和26版本线发布安全更新。最严重的漏洞是Brotli解压组件中的内存错误,可能导致远程代码执行。此次更新还修复了两处TLS验证绕过漏洞,并移除了对eMudhra证书的信任。
Node.js项目于2026年10月21日为22、24和26版本线发布了安全更新。根据Node.js的安全公告,此次更新修复了10个漏洞,其中高危4个、中危3个、低危3个。修复版本为22.23.4、24.22.1和26.12.1。
最严重的漏洞:Brotli解码器
Brotli是网络上广泛使用的压缩格式,浏览器和服务器都可以用它压缩网页。Node.js自带一个解码器来解压Brotli数据。公告显示,编号为CVE-2026-111497的漏洞是该解码器中的越界写入,可能导致远程代码执行,三个版本线均受影响。发布说明显示,此次修复是将Brotli项目自身代码中的修复移植到了Node.js中。
Node.js未公布该漏洞的触发方式和严重程度评分(CVSS)。凡是解压来自外部、可能被攻击者构造的Brotli数据的应用都面临风险,例如解压以Content-Encoding: br压缩的请求正文的服务器,或解压来自不受自己控制的服务器的压缩响应的程序。
两处TLS验证漏洞
另外两个高危漏洞与Node.js验证所连接服务器证书的方式有关。CVE-2026-105483中,当IP地址以全角数字书写时,证书中的主机名检查可被绕过;CVE-2026-106069中,当主机名被宽松地解析为IP地址时也会出现同样问题。这类漏洞可能让中间人冒充被访问的服务器。第四个高危漏洞是CVE-2026-105482:dns.resolve会在NUL字符处截断名称。
其他修复
- 中危:保持连接(keep-alive)的套接字会处理在请求发送之前写入的响应(CVE-2026-105481);非规范IPv4主机名的证书验证不当(CVE-2026-106072);
crypto.randomUUID()和randomInt()的熵缓存被保存进启动快照,导致每个进程重复生成相同的"随机"值(CVE-2026-106074)。 - 低危:涉及ZIP读取器和权限模型的三个漏洞(CVE-2026-106070、CVE-2026-106071、CVE-2026-106073)。
- 依赖更新:c-ares、OpenSSL(3.5.9)、SQLite和undici。受信任根证书列表也更新到NSS 3.131.1,移除了对私钥遭泄露的印度证书机构eMudhra的证书信任。
应对建议
请在服务器和开发环境中用node -v检查版本,并按所在版本线升级到22.23.4、24.22.1或26.12.1。使用Docker的用户请基于新的Node.js基础镜像重新构建镜像,仍在运行旧镜像的容器依然存在风险。通过Linux发行版包管理器安装Node.js的用户,请关注发行版自己的安全公告。Node.js 20及更早版本已停止支持,不会获得此次修复;Node.js提醒,每次安全发布时都应视停止支持的版本为受影响版本。
目前的细节仅来自Node.js的公告和发布说明,项目尚未公布技术细节和严重程度评分。在弄清Brotli漏洞可在哪些使用方式下被外部触发之前,优先更新接收外部压缩数据的应用是最稳妥的做法。建议同时关注独立安全研究人员的评估,从不同角度了解事态发展。