Axios formDataToJSON 递归缺陷可致拒绝服务(CVE-2026-67313)

Axios CVE-2026-67313 漏洞:formDataToJSON 由于未限制递归深度,攻击者构造深嵌套 FormData 字段名可导致拒绝服务。了解受影响版本、PoC 代码及有效缓解措施,避免服务暴露于 DoS 风险。

🔓 Medium 漏洞利用

Axios 0.28.0 及以上版本中的 formDataToJSON 函数存在无限制递归缺陷,攻击者构造包含数千嵌套括号的 FormData 字段名,可触发调用栈溢出(RangeError),导致请求失败或进程终止。该漏洞主要影响将不可信 FormData 转换为 JSON 的服务端应用,形成拒绝服务风险。

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

🔍 关键发现

  • Axios 0.28.0 及以后版本的 formDataToJSON 在解析嵌套字段名时存在无最大深度限制的递归调用。
  • 攻击者可利用类似 "a[x][x]..." 的字段名(数千层级)触发 V8 调用栈溢出,造成拒绝服务。
  • 与 toFormData 序列化器(已有 maxDepth 保护)不同,formDataToJSON 缺少等效保护,且攻击面覆盖默认 transformRequest 路径。

⚔️ 攻击链分析

1. 攻击者构造带有超深嵌套括号的 FormData 字段名;2. 提交给目标应用的接口,使应用对该 FormData 调用 formToJSON() 或以其为 application/json 请求体发送;3. axios 的 formDataToJSON 递归解析字段名,调用栈溢出并抛出 RangeError;4. 请求失败,若异常未捕获则可能导致进程终止,造成拒绝服务。

🚩 失陷指标 (IOC)

  • FormData 字段名包含数千个重复的方括号片段(如 'a[x][x][x]...')
  • 服务端异常日志中出现 'RangeError: Maximum call stack size exceeded' 且发生在 axios 的 formDataToJSON 路径

🛡️ 缓解建议

  • ✅ 避免将不可信 FormData 直接传递给 axios.formToJSON() 或使用 application/json Content-Type 提交 FormData。
  • ✅ 在调用前校验 FormData 字段名,限制嵌套深度在应用预期 schema 范围内(例如拒绝超过 100 层的括号)。
  • ✅ 将 FormData 作为 multipart 发送,不设置 application/json,可绕过此转换路径。
  • ✅ 及时关注官方修复版本并升级 axios,同时确保应用正确处理 Promise 拒绝,避免进程崩溃。

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


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

🤖 常见问题解答(FAQ)

❓ 哪些 axios 版本受影响?

Axios 0.28.0 及之后所有版本(含 1.x)均受影响,0.28.0 之前版本不存在该公开 API 和转换逻辑。

❓ 如何判断应用是否可利用此漏洞?

若应用会对用户可控的 FormData 调用 axios.formToJSON(),或发送 FormData 时设置 Content-Type: application/json,则可能被触发栈溢出。

❓ 能否通过捕获异常规避 DoS?

捕获异常可防止进程终止,但递归行为仍在,消耗资源且请求失败,不应作为主要缓解手段。

[!] CONTACT_CHANNELS

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

> PING_AUTHOR (@A1RedTeam)