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。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)