Axios formDataToJSON堆栈溢出漏洞可致拒绝服务
CVE-2026-67312是Axios中一个中危拒绝服务漏洞,源于formDataToJSON函数在处理嵌套括号字段名时无递归深度限制。攻击者可构造特制FormData导致栈溢出,使Node.js进程崩溃。本文分析漏洞原理、影响范围、PoC与缓解方案。
🔓 Medium 漏洞利用
攻击者通过构造包含成千上万个嵌套括号段的FormData字段名,触发axios formDataToJSON函数的无限制递归,导致JavaScript调用栈溢出,造成拒绝服务甚至进程崩溃。该漏洞影响axios 0.28.0及以上版本,可通过直接调用formToJSON或发送JSON类型FormData请求触发。
来源:OSV | 2026-07-20 | 原文链接
🔍 关键发现
- axios formDataToJSON函数在解析嵌套括号字段名时缺乏深度限制,导致递归调用栈溢出。
- 漏洞影响axios 0.28.0及以上版本,包括公开API axios.formToJSON和内部transformRequest对FormData的JSON序列化。
- 攻击者仅需控制FormData字段名,无需认证或特殊权限,单次请求即可导致进程崩溃。
⚔️ 攻击链分析
["攻击者构造特殊FormData,字段名为'a' + '[x]'.repeat(15000)等大量嵌套括号。", '将FormData直接传给axios.formToJSON()或作为请求体发送且Content-Type为application/json。', 'axios内部调用formDataToJSON,parsePropPath分割出上万个路径段,buildPath递归处理,最终触发RangeError: Maximum call stack size exceeded。', '若应用未捕获该异常,进程终止,服务不可用。']
🚩 失陷指标 (IOC)
CVE-2026-67312PoC字段名模式: 'a' + '[x]'.repeat(15000)RangeError: Maximum call stack size exceeded
🛡️ 缓解建议
- ✅ 在调用axios.formToJSON()之前,对不可信FormData字段名进行校验或规范化,限制方括号嵌套深度。
- ✅ 避免将不可信FormData通过axios以Content-Type: application/json发送,除非必要且已过滤字段名。
- ✅ 在应用层捕获axios请求或formToJSON调用抛出的异常,防止进程直接崩溃(尽管栈溢出时可能无法可靠捕获)。
涉及漏洞:["CVE-2026-67312"]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 该漏洞影响哪些axios版本?
影响axios 0.28.0及以上版本(包括1.x),0.27.2及以下版本未引入formDataToJSON,不受影响。
❓ 如何检测是否被攻击?
监控日志中是否出现'RangeError: Maximum call stack size exceeded'异常,或请求中包含超长嵌套括号的FormData字段名。
❓ 攻击者需要什么条件才能利用?
攻击者只需能控制传递给axios.formToJSON或JSON序列化FormData的字段名,无需认证,远程即可发起拒绝服务攻击。