返回首页

当前位置: 网站首页 > 网络安全 > 正文

网络安全

网络安全

当前位置: 网站首页 > 网络安全 > 正文

【漏洞预警】Node.js曝Brotli解码器RCE(CVE-2026-111497)等4个高危漏洞

时间:2026-10-26 16:35    点击:次

一、漏洞概述

2026年10月26日,安全运营中心监测到Node.js官方发布了10月安全更新,本次更新修复了10个漏洞,包含4个高危漏洞。其中最需要重点关注的是CVE-2026-111497(Brotli 解码器 RCE),漏洞威胁等级:严重(CVSS v4.0评分9.2)。另外三个高危漏洞为 CVE-2026-105482(dns.resolve* 空字节截断)、CVE-2026-105483(TLS主机名校验绕过,仅影响26.x/24.x)和 CVE-2026-106069(TLS 主机名校验绕过),其余为中危、低危漏洞。

二、漏洞详情

CVE-2026-111497 Brotli 解码器越界写

(一)漏洞原理

Brotli 流在声明只有一种数据块类型后再做块类型切换,属于格式错误。旧代码对该错误返回与「还需要更多输入」相同的值,调用方未检查返回值,解码器带着错误状态继续运行。随后对内部8 字节残余比特缓存的写入可以越过该缓存,覆盖解码器状态中的位置、距离和环形缓冲区相关字段,形成越界写。补丁将该情况改为立即返回格式错误BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH(值为 -17)。

(二)受影响场景

本漏洞在进程对不可信数据执行Brotli解压时触发。以下场景会执行该解压:

1. 应用作为HTTP客户端访问外部资源。内置fetch()(由  undici  实现)在响应头为 Content- Encoding: br 时调用zlib.createBrotliDecompress。axios、got默认同样解压,可配置关闭。按用户给定URL抓取外部资源(URL 预览、图片代理、webhook 回调、构建产物或软件包下载)且使用上述客户端时 ,可能形成该漏洞的攻击路径;实际触发需要上游返回特制的恶意Brotli数据。

2. 应用作为HTTP服务端,使用Express 5 / body-parser 2的json()、raw()。请求头为Content-Encoding: br 时解压请求体(inflate 选项默认为true)。

3. 应用自行调用zlib.brotliDecompress、zlib.brotliDecompressSync、zlib.createBrotliDecompress(文件或构建产物解压、持续集成缓存等)。仅使用 http.createServer、未再接会解压的中间件时,入站请求体不会自动解压。

(三)漏洞危害

Node.js官方评级为High,漏洞标题为越界写可导致远程代码执行。Google给出CVSS 4.0 评分9.2(Critical)。具体影响分三层讨论:

拒绝服务:构造流可让解码器自旋或挂起,Node异步 zlib默认只有4个libuv线程,几个请求就能占满并拖垮同进程的fs/crypto/DNS,同步API直接卡事件循环。

内存泄露:越界读可能把堆内容带进解压输出或错误路径 ,泄露密钥、指针等。

远程代码执行:越界写可污染pos、max_distance、ringbuffer等字段,进而做任意读写并劫持控制流;Vercel 的安全公告也确认研究者在未修复的22/24/26上演示了进程内存泄漏和命令执行。

可利用性需客观看待。公开PoC在披露后48小时内已出现多个,Imperva等团队在特定Node构建上完成了无需调试器的 RCE;但成功往往依赖堆布局、分配器行为、ASLR和多次尝试,不是对任意Node服务都能稳定一击必中。

(四)处置建议

优先升级并重启会解压不可信Brotli的进程。容器镜像、CI运行器、 Electron等内嵌Node或同一套Brotli C库的程序一并升级。

部分Linux发行版把Node动态链接到系统libbrotlidec。这种情况除升级Node外,还需将系统Brotli库升到1.0.10、1.1.1或1.2.1(或发行版已backport的对应版本)。

第三方研究指出漏洞涉及PHP multipart上传处理中未认证的远程代码执行路径,另有分析指向session.upload_progress处理函数(php_session_rfc1867_callback)中的堆释放后使用(Use-After-Free),被缓存的zval指针在释放后仍被引用,最终可达zend_call_function形成代码执行。完整技术成因与利用条件将在官方补丁发布时一并公开。PHP官方紧急安全更新定于2026年10月21日22:00(北京时间)发布,若细节扩散或出现攻击,补丁可能提前发布。

三、影响版本

 

CVE 编号

严重程度

漏洞名称

受影响版本

CVE-2026-111497

高危

Brotli 解码器 RCE

26.x、24.x、22.x

CVE-2026-105482

高危

dns.resolve* 空字节截断

26.x、24.x、22.x

CVE-2026-105483

高危

TLS 主机名校验绕过

26.x、24.x

CVE-2026-106069

高危

TLS 主机名校验绕过

26.x、24.x、22.x

CVE-2026-105481

中危

HTTP 请求与响应顺序错误

26.x、24.x、22.x

CVE-2026-106072

中危

TLS 证书主机名校验不当

26.x、24.x、22.x

CVE-2026-106074

中危

密码学随机值重复

26.x、24.x、22.x

CVE-2026-106070

低危

ZIP 校验失败后暴露不可信数据

26.x

CVE-2026-106071

低危

权限模型文件系统访问绕过

26.x

CVE-2026-106073

低危

fs.realpathSync 权限绕过

26.x、24.x、22.x

 

四、处置建议

(一)临时处置

1. CVE-2026-111497(Brotli 解码器越界写)

·防护类设备或反向代理若能检查HTTP头部,可拒绝Content-Encoding中含br的入站请求(按编码令牌比较,忽略大小写)。

·应用作为客户端访问不可信上游时:axios、got可关闭自动解压。

2. CVE-2026-105482(`dns.resolve*`域名空字节截断)

在调用 dns.resolve* 前检查域名:若包含空字节( '\0'),拒绝本次查询。

以上临时缓解措施不能替代升级,建议尽快升级到修复版本。

(二)官方修复

升级到修复版本(22.23.4、24.22.1或26.12.1)并重启。容器更换镜像标签后重建、滚动发布。CI运行器、Electron应用同样升级其内嵌运行时。