CVE-2026-9675CVE-2026-9675是undici WebSocket客户端中的一个拒绝服务漏洞。该漏洞源于undici WebSocket客户端在处理WebSocket分片消息时,仅对每一帧(per-frame)的大小执行了maxPayloadSize限制检查,但未对分片消息的累积未压缩大小进行校验。攻击者可以通过恶意WebSocket服务器持续发送大量小分片帧,每一帧单独来看均能通过per-frame验证,但累积起来将导致客户端进程的内存无限增长,最终引发内存耗尽和拒绝服务。
该漏洞影响使用undici WebSocket客户端(即new WebSocket(...))且可能被诱导连接到攻击者控制或已被攻陷的WebSocket端点的应用程序。这是一个undici 8.1.0版本特有的回归漏洞。undici 6.25.0版本线从一开始就内置了等效的累积检查,因此不受影响;undici 7.x版本线从未引入maxPayloadSize特性,同样不受影响。
该漏洞的CVSS 3.1评分为7.5,属于高危级别。攻击向量为网络(AV:N),无需认证(PR:N),无需用户交互(UI:N),对机密性影响低(C:L),对完整性无影响(I:N),对可用性影响高(A:H)。这意味着该漏洞容易被远程利用,可导致目标服务完全不可用。
undici是Node.js生态系统中广泛使用的HTTP/1.1客户端库,其WebSocket客户端实现在处理分片消息(fragmented messages)时存在安全缺陷。
WebSocket协议允许将单个消息分割为多个帧进行传输,接收端需要重组这些分片以还原完整消息。在undici 8.1.0版本中,maxPayloadSize参数仅用于限制单个帧的大小(per-frame validation),但在累积重组过程中未对整个消息的未压缩总大小进行校验。
攻击利用方式如下:
1. 攻击者搭建一个恶意WebSocket服务器,或攻陷一个合法的WebSocket端点。
2. 客户端通过undici的WebSocket接口连接到该恶意端点。
3. 服务器发送大量小分片帧(每个帧大小均小于maxPayloadSize限制),这些帧属于同一个未压缩消息。
4. undici客户端在接收每一帧时通过per-frame验证,但不断将分片数据累积到内存缓冲区中。
5. 由于缺少累积大小限制,内存缓冲区持续增长,最终导致客户端进程内存耗尽。
6. 客户端进程因内存不足而崩溃或变得无响应,造成拒绝服务。
此漏洞的CVSS评分向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H,表明该漏洞通过网络即可远程利用,攻击复杂度低,无需任何权限或用户交互即可触发。