axios fetch适配器maxBodyLength绕过:未知长度ReadableStream可无限上传
axios fetch适配器存在maxBodyLength绕过漏洞(CVE-2026-67317),当请求体为未知长度的ReadableStream时,大小限制失效。攻击者可利用此漏洞发送超大数据,造成资源消耗。本文分析漏洞原理、PoC、影响范围及缓解措施,帮助开发者安全使用axios。
🔓 Medium 漏洞利用
axios的fetch适配器在请求体为未知长度的WHATWG ReadableStream时,未能强制执行maxBodyLength限制。攻击者可借此绕过上传大小限制,发送超大数据,导致意外出站流量和资源消耗。该漏洞影响使用fetch适配器的Node.js、浏览器及边缘运行时环境。
来源:OSV | 2026-07-20 | 原文链接
🔍 关键发现
- fetch适配器的getBodyLength()未处理ReadableStream,导致resolveBodyLength返回undefined。
- maxBodyLength检查仅在长度为有限数字时触发,未知长度流会绕过预检。
- 即使开启onUploadProgress,trackStream包装器也仅报告进度,不执行字节上限。
- HTTP适配器通过逐块计数强制执行maxBodyLength,不受此漏洞影响。
⚔️ 攻击链分析
1. 攻击者构造一个未知长度的ReadableStream作为请求体 → 2. 使用axios fetch适配器发送POST请求,maxBodyLength设置为较小值 → 3. axios因无法获取长度而跳过预检查,将流直接传给fetch → 4. 服务器收到完整超限数据
🚩 失陷指标 (IOC)
N/AN/A
🛡️ 缓解建议
- ✅ 在Node.js环境中,对于不可信的流上传,使用默认的HTTP适配器而非fetch适配器。
- ✅ 在应用层包装/计数ReadableStream,当字节数超过限制时主动中止请求。
- ✅ 升级至已修复该漏洞的axios版本(如有)。
涉及漏洞:["CVE-2026-67317"]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 如何检测我的axios应用是否受影响?
检查是否使用adapter: 'fetch',且请求体为ReadableStream,同时设置了maxBodyLength。若axios版本未修复,则受影响。
❓ 攻击者利用此漏洞能造成什么危害?
能绕过上传大小限制,发送任意大流量,导致带宽耗尽、API配额耗尽或资源消耗,但不涉及数据泄露或代码执行。
❓ 在Node.js中如何规避此问题?
尽量使用HTTP适配器,或在应用层对ReadableStream计数并中止超过限制的流。不要依赖fetch适配器的maxBodyLength保护未知长度流。