Axios HTTP/2流式上传绕过maxBodyLength限制:攻击者可发送任意大体积请求体
Axios HTTP/2流式上传漏洞(CVE暂无)允许攻击者绕过maxBodyLength限制,导致资源滥用。影响Node.js环境下使用httpVersion:2且请求体为流的应用。缓解方法包括设置maxRedirects:0或预截断流。
🔓 Medium 漏洞利用
Axios在Node.js环境中,当使用HTTP/2协议发送流式请求体时,未正确实施maxBodyLength限制。攻击者可通过控制流对象绕过上限,导致出站带宽浪费、上游配额消耗等资源滥用问题,但无代码执行或凭证泄露风险。
来源:OSV | 2026-07-20 | 原文链接
🔍 关键发现
- Axios的HTTP/2适配器(http2Transport)完全忽略options.maxBodyLength选项,而HTTP/1.1的follow-redirects机制和原生http/https传输均能正确执行该限制。
- 字节计数转换器(Stream Transform)仅在config.maxRedirects === 0时激活,但在HTTP/2路径下既未使用follow-redirects,也未进入该转换器,导致上传流直接被pipe到HTTP/2请求中。
- PoC验证:设置maxBodyLength:1024,实际发送2MB数据,服务端成功接收全部字节,证明限制完全失效。
⚔️ 攻击链分析
攻击者构造一个可控制内容的流对象 -> 通过axios发起POST请求,指定httpVersion:2且设置有限maxBodyLength -> 流数据直接传入HTTP/2 request,未经过字节计数检查 -> 服务器接收超出限制的请求体。
🛡️ 缓解建议
- ✅ 对于axios >=1.15.1,在调用HTTP/2流式上传时显式设置maxRedirects:0,可触发现有的字节计数转换器。
- ✅ 在传递给axios之前,对不受信的流使用自定义字节计数转换器进行预截断,或在上游前置服务中拒绝超大请求体。
- ✅ 避免对不受信的流式上传使用httpVersion:2,或改用String/Buffer等缓冲体(此类数据会在传输前进行检查)。
涉及漏洞:[]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 如何检测我的应用是否受此漏洞影响?
检查axios调用是否同时满足:使用Node.js HTTP适配器、httpVersion:2、data为流对象、设置了有限maxBodyLength。若满足则受影响,可执行PoC验证。
❓ 该漏洞影响浏览器端吗?
不影响。浏览器XHR/fetch适配器不涉及该逻辑,且HTTP/2仅在Node.js环境中由本机适配器实现。
❓ 官方有发布修复版本吗?
截至2026-07-20尚无修复版本。建议按照工作区缓解措施(设置maxRedirects:0)或自行补丁。