Axios, Prototype Pollution Crash, CVE-2026-25639 (Medium)

Listen to this Post

How CVE-2026-25639 works:

This CVE affects axios versions 1.13.3 and 1.13.4. When a user passes a config object containing `”__proto__”` as a key (e.g., {"__proto__": {"x": 1}}), axios’s `mergeConfig` function iterates over the config’s own keys. The `mergeMap` dictionary attempts to resolve the key "__proto__", which walks the prototype chain and returns `Object.prototype` (a non-function). axios then tries to call this value as a function, causing a `TypeError` and crashing the Node.js process. The fix in v1.13.5 added a block that rejects __proto__, constructor, and `prototype` as config keys, plus a `hasOwnProp` guard on `mergeMap` access. However, this fix does NOT address other prototype pollution gadgets where a polluted `Object.prototype` injects keys like `parseReviver` or `transport` from a separate co-dependency (e.g., lodash <4.17.21). Those remain exploitable up to 1.13.6.

dailycve form:

Platform: Node.js
Version: 1.13.3-1.13.4
Vulnerability: Prototype pollution crash
Severity: Medium
date: 2024-04-15 (approx)

Prediction: Already patched (1.13.5)

What Undercode Say:

Analytics – the following bash commands test for the prototype pollution gadget in a vulnerable axios process:

Check if axios version is affected
npm list axios | grep -E "1.13.[0-4]"
Simulate pollution via lodash (if used)
node -e "const _ = require('lodash'); _.merge({}, JSON.parse('{\"<strong>proto</strong>\":{\"parseReviver\":()=>{}}}')); const axios = require('axios'); console.log(axios.defaults.parseReviver);"

Exploit:

An attacker who can inject prototype pollution into the same Node.js process (e.g., via malicious JSON merge in lodash) can activate gadgets:
– parseReviver – intercept and modify all JSON responses (exfiltrate data, escalate privileges).
– transport – hijack every HTTP request, stealing credentials, headers, and body.
– transformRequest/Response – run arbitrary functions on request/response data.

Proof-of-concept code (client-side pollution):

Object.prototype.parseReviver = (key, val) => {
console.log(<code>[bash] ${key}=${JSON.stringify(val)}</code>);
return key === 'admin' ? true : val;
};
// Any axios.get() will now tamper responses.

Protection from this CVE:

  1. Upgrade lodash to >=4.17.21 and all prototype‑pollution‑prone dependencies.
  2. Apply the suggested fixes in axios (not yet released):

– Use `hasOwnProperty` before reading `parseReviver` in lib/defaults/index.js.
– Add `utils.hasOwnProp(config2, prop)` guard in `mergeConfig.js` line 102.
– Check `hasOwnProp` on `config.transport` in lib/adapters/http.js.

3. Freeze `Object.prototype` early in application startup:

Object.freeze(Object.prototype);

4. Use `–disable-proto` flag in Node.js (experimental).

Impact:

  • Confidentiality: Credentials (Basic auth, headers) and full response data exfiltrated.
  • Integrity: JSON responses silently tampered (e.g., role → admin, balance → 999999).
  • Availability: Not directly impacted, but crash possible via proto payload.
  • Scope: Any Node.js application using axios 0.19.0–1.13.6 alongside a prototype‑pollution‑vulnerable library (lodash, merge, etc.) is fully compromised.

🎯Let’s Practice Exploiting & Learn Patching For Free:

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top