Axios HTTP/2 流式上传绕过 maxBodyLength 限制漏洞分析

CVE-2026-67318 是 Axios 中一个中危漏洞,影响 Node.js HTTP/2 流式上传。攻击者可通过流式请求体绕过 maxBodyLength 限制,导致超出配额的数据传输,消耗带宽和资源。本文深入分析漏洞成因、PoC 及缓解措施,帮助开发者修复和预防。

🔓 Medium 漏洞利用

攻击者可通过控制传给 Axios 的流式请求体,在 HTTP/2 协议下绕过 maxBodyLength 硬限制,导致应用发送超出配额的数据。该漏洞源于 Node.js HTTP/2 适配器未执行 maxBodyLength,且流式包装器仅在 maxRedirects: 0 时生效,影响依赖此限制进行资源管控的 Node.js 应用。

来源:OSV | 2026-07-20 | 原文链接

🔍 关键发现

  • 在 Node.js HTTP/2 适配器中,maxBodyLength 被存入 options,但 Node 原生 http2.request 不会读取该选项,导致限制失效。
  • 流式上传的字节计数 Transform 包装器仅在 config.maxRedirects === 0 时启用,HTTP/2 默认路径绕过该包装器。
  • PoC 显示 maxBodyLength 设为 1KB 时,通过流式上传 2MB 数据可成功传输,验证绕过有效。
  • 受影响的调用需同时满足 Node HTTP 适配器、httpVersion: 2、data 为流、有限 maxBodyLength 且内容可受攻击者影响。
  • 浏览器适配器、字符串/Buffer/ArrayBuffer 请求体不受影响,因为这些场景在传输选择前已检查或使用不同适配器。

⚔️ 攻击链分析

1. 攻击者构造超大流式 payload,通过上传接口提交给使用 Axios 的 Node.js 应用。 2. 应用将请求配置为 httpVersion: 2 和有限的 maxBodyLength,并将流直接传给 axios.post()。 3. Axios 选择 HTTP/2 传输,因 http2Transport 不检查 maxBodyLength,且流包装器未启用,导致整个流被发送。 4. 上游服务器收到超出限制的数据,造成带宽消耗、配额用尽或可用性影响。

🛡️ 缓解建议

  • ✅ 升级 Axios 至包含修复的版本(暂未发布),并关注官方安全公告。
  • ✅ 对于 Axios >=1.15.1,在受影响的 HTTP/2 流式上传调用中设置 maxRedirects: 0,以启用现有的流包装器。
  • ✅ 在将流传给 Axios 前,使用字节计数 Transform 对流进行预限制,或直接拒绝超过 maxBodyLength 的上传。
  • ✅ 避免对不受信任的流式上传使用 httpVersion: 2,改用 HTTP/1.1 或缓冲请求体。

涉及漏洞:["CVE-2026-67318"]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 如何判断应用是否受此漏洞影响?

如果 Node.js 应用使用 Axios 发送 httpVersion: 2 且 data 为流,并配置了有限的 maxBodyLength,则可能受影响。检查代码中 httpVersion 和流式调用。

❓ 攻击者利用该漏洞能造成什么危害?

主要造成资源消耗:超出限制的带宽、出口流量成本、上游配额消耗,以及有限可用性影响。不会导致代码执行或数据泄露。

❓ 有哪些临时缓解措施?

在 Axios 1.15.1+ 中为 HTTP/2 流式上传设置 maxRedirects: 0;对不受信任的流式上传避免使用 HTTP/2;或在上传前自行进行字节计数并强制截断。

[!] CONTACT_CHANNELS

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

> PING_AUTHOR (@A1RedTeam)