Every CVE Search/ Get API key

CVE-2026-67321

axios 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 Denial of Service via maxDepth bypass

6.9 MediumFix available

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
Low

Exploit likelihood

0.53%Up 0.2 points since Aug 2, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.9

axios 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 Denial of Service via maxDepth bypass

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
CVE-2026-67321
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-674
Updated
2026-11-02
EUVDEUVD-2026-51812 6.9

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
EUVD-2026-51812
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-3mcp-22mf-vrw3 6.9

Duplicate Advisory: Axios form serializer maxDepth bypass via {} metatoken

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-hcpx-6fm6-wx23. This link is maintained to preserve external references.

Original Description

axios before 0.33.0 contains an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
GHSA-3mcp-22mf-vrw3
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-674
Updated
2026-11-02
GitHub AdvisoriesGHSA-hcpx-6fm6-wx23 6.9

Axios form serializer maxDepth bypass via {} metatoken

Summary

Axios versions in the fixed lines for GHSA-62hf-57xw-28j9 still contain an incomplete depth-limit bypass in lib/helpers/toFormData.js. When serializing an object with a top-level key ending in {}, axios calls JSON.stringify() on that value before the formSerializer.maxDepth guard can inspect the nested structure.

An attacker who can control object keys and nested values passed by an application into axios form or parameter serialization can trigger a raw RangeError: Maximum call stack size exceeded, causing a denial of service in the affected request path.

Impact

The impact is availability only. No confidentiality or integrity impact was confirmed.

Server-side applications are the primary concern when they accept user-controlled input and pass it into axios as data or params for multipart/form-data, application/x-www-form-urlencoded, or default parameter serialization. Browser impact is limited to the page or request context unless the application builds a broader failure mode around the thrown exception.

The attack requires control over a top-level object key ending in {} and a deeply nested object value. The option formSerializer.metaTokens: false is not a workaround because it only changes the emitted key name; the value is still stringified.

Affected Functionality

Affected paths include:

  • lib/helpers/toFormData.js when a top-level key ends with {}.
  • lib/helpers/toURLEncodedForm.js, which delegates to helpers.defaultVisitor.
  • lib/helpers/AxiosURLSearchParams.js, used by default params serialization.
  • Request transforms in lib/defaults/index.js when object data is serialized as multipart/form-data or application/x-www-form-urlencoded.

Unaffected paths include:

  • Already-created FormData or URLSearchParams values that axios does not walk with toFormData.
  • Custom paramsSerializer.serialize implementations that do not call axios toFormData.
  • Non-{} deeply nested values in toFormData, which hit ERR_FORM_DATA_DEPTH_EXCEEDED as intended.

Technical Details

In lib/helpers/toFormData.js, defaultVisitor() handles top-level keys ending in {} before recursive traversal:

if (value && !path && typeof value === 'object') {
  if (utils.endsWith(key, '{}')) {
    key = metaTokens ? key : key.slice(0, -2);
    value = JSON.stringify(value);
  }
}

The depth guard is in build():

if (depth > maxDepth) {
  throw new AxiosError(
    'Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth,
    AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED
  );
}

For {} metatoken values, build() only sees the top-level property. The nested value is handed directly to native JSON.stringify(), which recurses internally and can throw RangeError before axios emits the intended AxiosError.

Proof of Concept of Attack

Safe local PoC with no network I/O:

import toFormData from './lib/helpers/toFormData.js';

function buildDeep(depth) {
  const head = {};
  let cur = head;

  for (let i = 0; i < depth; i += 1) {
    cur.x = {};
    cur = cur.x;
  }

  return head;
}

try {
  toFormData({ 'evil{}': buildDeep(10000) });
} catch (err) {
  console.log(err.name, err.code || '', err.message);
}

// Expected affected result:
// RangeError  Maximum call stack size exceeded

Expected fixed behavior is an AxiosError with code ERR_FORM_DATA_DEPTH_EXCEEDED.

Workarounds

Reject or depth-limit untrusted objects before passing them to axios serialization.

Strip or reject top-level keys ending in {} from untrusted objects when using axios form serialization.

For query parameters, use a custom paramsSerializer.serialize that enforces a depth limit.

For form bodies, construct FormData or URLSearchParams manually after validating input depth.

<details> <summary>Original Report</summary>

Summary

The maxDepth=100 guard added in axios 1.15.0 to fix GHSA-62hf-57xw-28j9 lives inside the build() recursion in…

Record
GHSA-hcpx-6fm6-wx23
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-674
Updated
2026-11-02
NVD 6.9

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
CVE-2026-67321
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-674
Updated
2026-11-02
OSV 6.9

axios 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 Denial of Service via maxDepth bypass

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
CVE-2026-67321
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-674
Updated
2026-11-02
Show 14 moreShow less
OSVDEBIAN-CVE-2026-67321 7.5

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
DEBIAN-CVE-2026-67321
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVGHSA-3mcp-22mf-vrw3 6.9

Duplicate Advisory: Axios form serializer maxDepth bypass via {} metatoken

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-hcpx-6fm6-wx23. This link is maintained to preserve external references.

Original Description

axios before 0.33.0 contains an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
GHSA-3mcp-22mf-vrw3
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-674
Updated
2026-11-02
OSVGHSA-hcpx-6fm6-wx23 6.9

Axios form serializer maxDepth bypass via {} metatoken

Summary

Axios versions in the fixed lines for GHSA-62hf-57xw-28j9 still contain an incomplete depth-limit bypass in lib/helpers/toFormData.js. When serializing an object with a top-level key ending in {}, axios calls JSON.stringify() on that value before the formSerializer.maxDepth guard can inspect the nested structure.

An attacker who can control object keys and nested values passed by an application into axios form or parameter serialization can trigger a raw RangeError: Maximum call stack size exceeded, causing a denial of service in the affected request path.

Impact

The impact is availability only. No confidentiality or integrity impact was confirmed.

Server-side applications are the primary concern when they accept user-controlled input and pass it into axios as data or params for multipart/form-data, application/x-www-form-urlencoded, or default parameter serialization. Browser impact is limited to the page or request context unless the application builds a broader failure mode around the thrown exception.

The attack requires control over a top-level object key ending in {} and a deeply nested object value. The option formSerializer.metaTokens: false is not a workaround because it only changes the emitted key name; the value is still stringified.

Affected Functionality

Affected paths include:

  • lib/helpers/toFormData.js when a top-level key ends with {}.
  • lib/helpers/toURLEncodedForm.js, which delegates to helpers.defaultVisitor.
  • lib/helpers/AxiosURLSearchParams.js, used by default params serialization.
  • Request transforms in lib/defaults/index.js when object data is serialized as multipart/form-data or application/x-www-form-urlencoded.

Unaffected paths include:

  • Already-created FormData or URLSearchParams values that axios does not walk with toFormData.
  • Custom paramsSerializer.serialize implementations that do not call axios toFormData.
  • Non-{} deeply nested values in toFormData, which hit ERR_FORM_DATA_DEPTH_EXCEEDED as intended.

Technical Details

In lib/helpers/toFormData.js, defaultVisitor() handles top-level keys ending in {} before recursive traversal:

if (value && !path && typeof value === 'object') {
  if (utils.endsWith(key, '{}')) {
    key = metaTokens ? key : key.slice(0, -2);
    value = JSON.stringify(value);
  }
}

The depth guard is in build():

if (depth > maxDepth) {
  throw new AxiosError(
    'Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth,
    AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED
  );
}

For {} metatoken values, build() only sees the top-level property. The nested value is handed directly to native JSON.stringify(), which recurses internally and can throw RangeError before axios emits the intended AxiosError.

Proof of Concept of Attack

Safe local PoC with no network I/O:

import toFormData from './lib/helpers/toFormData.js';

function buildDeep(depth) {
  const head = {};
  let cur = head;

  for (let i = 0; i < depth; i += 1) {
    cur.x = {};
    cur = cur.x;
  }

  return head;
}

try {
  toFormData({ 'evil{}': buildDeep(10000) });
} catch (err) {
  console.log(err.name, err.code || '', err.message);
}

// Expected affected result:
// RangeError  Maximum call stack size exceeded

Expected fixed behavior is an AxiosError with code ERR_FORM_DATA_DEPTH_EXCEEDED.

Workarounds

Reject or depth-limit untrusted objects before passing them to axios serialization.

Strip or reject top-level keys ending in {} from untrusted objects when using axios form serialization.

For query parameters, use a custom paramsSerializer.serialize that enforces a depth limit.

For form bodies, construct FormData or URLSearchParams manually after validating input depth.

<details> <summary>Original Report</summary>

Summary

The maxDepth=100 guard added in axios 1.15.0 to fix GHSA-62hf-57xw-28j9 lives inside the build() recursion in…

Record
GHSA-hcpx-6fm6-wx23
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-674
Updated
2026-11-02
OSVRHSA-2026:47619 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update

Record
RHSA-2026:47619
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:48241 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:48241
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVRHSA-2026:48758 8.1

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:48758
CVSS 3.1
8.1 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-67321 6.9

axios versions 0.31.1 before 0.33.0 and 1.15.1 before 1.18.0 contain an incomplete depth-limit bypass in toFormData.js when serializing objects with top-level keys ending in '{}'. Attackers who control object keys and nested values passed to axios form or parameter serialization can trigger a RangeError from JSON.stringify, causing denial of service in the affected request path.

Record
UBUNTU-CVE-2026-67321
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVCLSA-2026-1790767846 No score

TuxCare security update for axios (10 CVEs)

TuxCare rebuilt axios to address 10 CVEs. Fixed in 1.16.0-tuxcare.1.

Record
CLSA-2026-1790767846
Updated
2026-11-02
OSVCLSA-2026-1792139363 No score

TuxCare security update for axios (9 CVEs)

TuxCare rebuilt axios to address 9 CVEs. Fixed in 1.17.0-tuxcare.2.

Record
CLSA-2026-1792139363
Updated
2026-11-02
OSVCLSA-2026-1792476444 No score

TuxCare security update for axios (10 CVEs)

TuxCare rebuilt axios to address 10 CVEs. Fixed in 1.16.1-tuxcare.2.

Record
CLSA-2026-1792476444
Updated
2026-11-02
OSVopenSUSE-SU-2026:11680-1 No score

agama-web-ui-24+0.a836cced5-52.1 on GA media

These are all security issues fixed in the agama-web-ui-24+0.a836cced5-52.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:11680-1
Updated
2026-11-02
OSVROOT-APP-NPM-CVE-2026-67321 No score

CVE-2026-67321 in axios - Patched by Root

Root has patched CVE-2026-67321 in the axios package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-CVE-2026-67321
Updated
2026-11-02
OSVROOT-APP-NPM-GHSA-3mcp-22mf-vrw3 No score

GHSA-3mcp-22mf-vrw3 in axios - Patched by Root

Root has patched GHSA-3mcp-22mf-vrw3 in the axios package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-GHSA-3mcp-22mf-vrw3
Updated
2026-11-02
OSVROOT-APP-NPM-GHSA-hcpx-6fm6-wx23 No score

GHSA-hcpx-6fm6-wx23 in axios - Patched by Root

Root has patched GHSA-hcpx-6fm6-wx23 in the axios package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-GHSA-hcpx-6fm6-wx23
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
axios
npm
0.31.1 up to 0.33.0
0.33.0
axios
npm
1.15.1 up to 1.18.0
1.18.0
axios
TuxCare:npm
1.16.0-tuxcare.0 up to 1.16.0-tuxcare.1, plus listed versions
1.16.0
1.16.0-tuxcare.1
axios
TuxCare:npm
1.17.0-tuxcare.0 up to 1.17.0-tuxcare.2, plus listed versions
1.17.01.17.0-tuxcare.1
1.17.0-tuxcare.2
axios
TuxCare:npm
1.16.1-tuxcare.0 up to 1.16.1-tuxcare.2, plus listed versions
1.16.11.16.1-tuxcare.1
1.16.1-tuxcare.2
node-axios
Debian:12
All versions, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.13.2+dfsg-11.14.0+dfsg-1
Show 17 moreShow less
1.15.0-11.15.2-11.16.0-11.18.0-11.19.0-11.2.1+dfsg-11.2.1+dfsg-1+deb12u11.20.0-11.5.1+dfsg-11.6.2+dfsg-11.6.8+dfsg-11.6.8+dfsg-21.7.3+dfsg-11.7.4+dfsg-11.7.7+dfsg-11.7.9+dfsg-11.8.4+dfsg-1
None known
node-axios
Debian:13
All versions, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.13.2+dfsg-11.14.0+dfsg-1
Show 7 moreShow less
1.15.0-11.15.2-11.16.0-11.18.0-11.19.0-11.20.0-11.8.4+dfsg-1
None known
node-axios
Debian:14
before 1.18.0-1, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.13.2+dfsg-11.14.0+dfsg-1
Show 4 moreShow less
1.15.0-11.15.2-11.16.0-11.8.4+dfsg-1
1.18.0-1
grafana12.4
Red Hat:hummingbird:1
before 0:12.4.6-0.2.hum1
0:12.4.6-0.2.hum1
grafana13.1
Red Hat:hummingbird:1
before 0:13.1.1-0.3.hum1
0:13.1.1-0.3.hum1
Show 10 moreShow less
Affected packages
PackageAffectedFixed
jaeger
Red Hat:hummingbird:1
before 0:2.20.0-0.8.hum1
0:2.20.0-0.8.hum1
axios
Root:npm
before 1.18.0-aikido.1
1.18.0-aikido.1
@rootio/axios
Root:npm
before 1.18.0-root.io.1
1.18.0-root.io.1
axios
Root:npm
before 1.16.0-aikido.3
1.16.0-aikido.31.17.0-aikido.31.15.2-aikido.51.16.1-aikido.41.17.0-aikido.21.15.2-aikido.41.16.0-aikido.21.16.1-aikido.30.31.1-aikido.31.16.1-aikido.5
@rootio/axios
Root:npm
before 1.16.0-root.io.3
1.16.0-root.io.31.17.0-root.io.31.15.2-root.io.51.16.1-root.io.41.17.0-root.io.21.15.2-root.io.41.16.0-root.io.21.16.1-root.io.30.31.1-root.io.31.16.1-root.io.5
node-axios
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
0.19.0+dfsg-20.19.0+dfsg-2ubuntu0.1~esm1
None known
node-axios
Ubuntu:Pro:22.04:LTS
All versions, plus listed versions
0.21.1+dfsg-10.23.0+dfsg-20.24.0+dfsg-10.25.0+dfsg-20.26.0+dfsg-10.26.0+dfsg-1ubuntu0.1~esm1
None known
node-axios
Ubuntu:Pro:24.04:LTS
All versions, plus listed versions
1.2.1+dfsg-11.5.1+dfsg-11.6.2+dfsg-11.6.8+dfsg-21.6.8+dfsg-2ubuntu0.1~esm1
None known
node-axios
Ubuntu:Pro:26.04:LTS
All versions, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.2+dfsg-1build11.13.2+dfsg-1ubuntu0.1~esm1
None known
agama-web-ui
openSUSE:Tumbleweed
before 24+0.a836cced5-52.1
24+0.a836cced5-52.1

History

History
RecordedChangedSources
affected
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-67321 is a medium vulnerability (CVSS 6.9) in Axios, published July 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.53%, the 45th percentile. Fixed in axios 0.33.0.

References

Show 108 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open