Packages / axios / Security

HighVulnerabilityGHSA-43fc-jf86-j433CVE-2026-25639Published 9 Feb 2026

Axios is Vulnerable to Denial of Service via __proto__ Key in mergeConfig

Affected releases · axios

  • 1.x1.0.0 – 1.13.4Fixed in 1.13.5
  • 0.30.x0.30.0 – 0.30.2Fixed in 0.30.3
  • 0.29.x and older0.1.0 – 0.29.0No fix, no longer updated

On 1.x, the newest line:

npm install axios@1.13.5
1.x
  1. Affected

    1.0.0 – 1.13.4

    57 releases

  2. Fixed

    1.13.5 – 1.20.0

    14 releases, latest

0.x
  1. Affected

    0.1.0 – 0.30.2

    62 releases

  2. Fixed

    0.30.3 – 0.34.0

    7 releases

140 stable releases of axios, oldest to newest, one row per major.

Is your project affected?

Paste your package.json, or type the range you declare for axios. It is read in your browser and sent nowhere.

What happens

Denial of Service via proto Key in mergeConfig

Summary

The mergeConfig function in axios crashes with a TypeError when processing configuration objects containing __proto__ as an own property. An attacker can trigger this by providing a malicious configuration object created via JSON.parse(), causing complete denial of service.

Details

The vulnerability exists in lib/core/mergeConfig.js at lines 98-101:

utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {
  const merge = mergeMap[prop] || mergeDeepProperties;
  const configValue = merge(config1[prop], config2[prop], prop);
  (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
});

When prop is '__proto__':

  1. JSON.parse('{"__proto__": {...}}') creates an object with __proto__ as an own enumerable property

  2. Object.keys() includes '__proto__' in the iteration

  3. mergeMap['__proto__'] performs prototype chain lookup, returning Object.prototype (truthy object)

  4. The expression mergeMap[prop] || mergeDeepProperties evaluates to Object.prototype

  5. Object.prototype(...) throws TypeError: merge is not a function

The mergeConfig function is called by:

  • Axios._request() at lib/core/Axios.js:75

  • Axios.getUri() at lib/core/Axios.js:201

  • All HTTP method shortcuts (get, post, etc.) at lib/core/Axios.js:211,224

PoC

import axios from "axios";

const maliciousConfig = JSON.parse('{"__proto__": {"x": 1}}');
await axios.get("https://httpbin.org/get", maliciousConfig);

Reproduction steps:

  1. Clone axios repository or npm install axios

  2. Create file poc.mjs with the code above

  3. Run: node poc.mjs

  4. Observe the TypeError crash

Verified output (axios 1.13.4):

TypeError: merge is not a function
    at computeConfigValue (lib/core/mergeConfig.js:100:25)
    at Object.forEach (lib/utils.js:280:10)
    at mergeConfig (lib/core/mergeConfig.js:98:9)

Control tests performed:

TestConfigResult
Normal config{"timeout": 5000}SUCCESS
Malicious configJSON.parse('{"__proto__": {"x": 1}}')CRASH
Nested object{"headers": {"X-Test": "value"}}SUCCESS

Attack scenario: An application that accepts user input, parses it with JSON.parse(), and passes it to axios configuration will crash when receiving the payload {"__proto__": {"x": 1}}.

Impact

Denial of Service - Any application using axios that processes user-controlled JSON and passes it to axios configuration methods is vulnerable. The application will crash when processing the malicious payload.

Affected environments:

  • Node.js servers using axios for HTTP requests

  • Any backend that passes parsed JSON to axios configuration

This is NOT prototype pollution - the application crashes before any assignment occurs.