Axios Fetch适配器流上传绕过maxBodyLength限制漏洞分析
Axios的fetch适配器存在严重性为Medium的安全漏洞,攻击者利用WHATWG ReadableStream上传未知长度的请求体可绕过maxBodyLength限制。本文详细分析漏洞原理、攻击链、PoC及缓解措施,帮助开发者避免意外网络出口流量与资源消耗风险。
🔓 Medium 漏洞利用
Axios的fetch适配器在处理未知长度的ReadableStream请求体时,未强制执行maxBodyLength配置项,导致攻击者可上传超过限制的数据。该漏洞影响使用fetch适配器的Node.js、浏览器及边缘运行时环境,攻击者通过可控流数据可导致意外网络出口流量和资源消耗。
来源:OSV | 2026-07-20 | 原文链接
🔍 关键发现
- fetch适配器在计算请求体长度时未处理ReadableStream类型,导致getBodyLength()返回undefined
- 预发送检查仅当长度为有限数字时才会拦截,因此对实时流完全跳过限制
- 即使启用onUploadProgress,包裹流只报告进度而不执行字节上限终止
⚔️ 攻击链分析
['攻击者构造一个未知长度的WHATWG ReadableStream作为请求体数据', '配置maxBodyLength为有限值(如1024字节)', '通过fetch适配器发送POST请求,预检查因长度未知而跳过', '服务器端接收到完整的大流量数据(如2MB),绕过大小限制']
🚩 失陷指标 (IOC)
axios版本 >= fetch适配器引入版本(约1.16+)且使用adapter:'fetch'请求中data参数为ReadableStream且无Content-Length头部
🛡️ 缓解建议
- ✅ 在Node.js环境中优先使用原生的HTTP适配器(默认),避免显式选择'fetch'适配器
- ✅ 在应用层对流进行包装计数,当超过maxBodyLength时主动中止请求
- ✅ 升级axios到修复版本(尚未发布),或持续关注安全公告
涉及漏洞:[]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 漏洞影响哪些axios版本?
影响引入fetch适配器的所有版本(约v1.16+),具体取决于运行时是否选用fetch适配器。
❓ 攻击者需要哪些条件才能利用?
应用程序使用adapter:'fetch'或环境默认选择fetch,且传递了可控的未知长度ReadableStream作为请求体,并依赖maxBodyLength做限制。
❓ HTTP适配器是否受影响?
不受影响。HTTP适配器在lib/adapters/http.js中通过逐块计数强制执行maxBodyLength,会抛出ERR_BAD_REQUEST。