{"id":"CVE-2026-25639","aliases":["GHSA-43fc-jf86-j433"],"url":"https://o3.security/vulnerability/CVE-2026-25639","summary":"Axios affected by Denial of Service via __proto__ Key in mergeConfig","details":"# Denial of Service via **proto** Key in mergeConfig\n\n### Summary\n\nThe `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.\n\n### Details\n\nThe vulnerability exists in `lib/core/mergeConfig.js` at lines 98-101:\n\n```javascript\nutils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n  const merge = mergeMap[prop] || mergeDeepProperties;\n  const configValue = merge(config1[prop], config2[prop], prop);\n  (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n});\n```\n\nWhen `prop` is `'__proto__'`:\n\n1. `JSON.parse('{\"__proto__\": {...}}')` creates an object with `__proto__` as an own enumerable property\n2. `Object.keys()` includes `'__proto__'` in the iteration\n3. `mergeMap['__proto__']` performs prototype chain lookup, returning `Object.prototype` (truthy object)\n4. The expression `mergeMap[prop] || mergeDeepProperties` evaluates to `Object.prototype`\n5. `Object.prototype(...)` throws `TypeError: merge is not a function`\n\nThe `mergeConfig` function is called by:\n\n- `Axios._request()` at `lib/core/Axios.js:75`\n- `Axios.getUri()` at `lib/core/Axios.js:201`\n- All HTTP method shortcuts (`get`, `post`, etc.) at `lib/core/Axios.js:211,224`\n\n### PoC\n\n```javascript\nimport axios from \"axios\";\n\nconst maliciousConfig = JSON.parse('{\"__proto__\": {\"x\": 1}}');\nawait axios.get(\"https://httpbin.org/get\", maliciousConfig);\n```\n\n**Reproduction steps:**\n\n1. Clone axios repository or `npm install axios`\n2. Create file `poc.mjs` with the code above\n3. Run: `node poc.mjs`\n4. Observe the TypeError crash\n\n**Verified output (axios 1.13.4):**\n\n```\nTypeError: merge is not a function\n    at computeConfigValue (lib/core/mergeConfig.js:100:25)\n    at Object.forEach (lib/utils.js:280:10)\n    at mergeConfig (lib/core/mergeConfig.js:98:9)\n```\n\n**Control tests performed:**\n| Test | Config | Result |\n|------|--------|--------|\n| Normal config | `{\"timeout\": 5000}` | SUCCESS |\n| Malicious config | `JSON.parse('{\"__proto__\": {\"x\": 1}}')` | **CRASH** |\n| Nested object | `{\"headers\": {\"X-Test\": \"value\"}}` | SUCCESS |\n\n**Attack scenario:**\nAn 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}}`.\n\n### Impact\n\n**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.\n\nAffected environments:\n\n- Node.js servers using axios for HTTP requests\n- Any backend that passes parsed JSON to axios configuration\n\nThis is NOT prototype pollution - the application crashes before any assignment occurs.","published":"2026-02-09T20:11:22.374Z","modified":"2026-09-12T03:30:44.980524838Z","cvss":{"score":7.5,"severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"},"epss":null,"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"npm","name":"axios","fixedVersion":"1.13.5"},{"ecosystem":"npm","name":"axios","fixedVersion":"0.30.3"}],"fix":{"url":"https://github.com/axios/axios/commit/28c721588c7a77e7503d0a434e016f852c597b57","label":"axios/axios@28c7215"},"references":[{"type":"WEB","url":"https://github.com/axios/axios/releases/tag/v0.30.3"},{"type":"WEB","url":"https://github.com/axios/axios/releases/tag/v1.13.5"},{"type":"WEB","url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-25639.json"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:10184"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:11414"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:13542"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:13548"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:19712"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:25041"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:2694"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:3087"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:3105"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:3106"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:3107"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:3109"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:36882"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:41064"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:4942"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5142"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5168"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5174"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5633"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5636"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5665"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:5807"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6170"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6174"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6192"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6277"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6308"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6309"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6428"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6497"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6567"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6568"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:6802"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:7249"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:8218"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:8229"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:8499"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:8500"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:8501"},{"type":"ADVISORY","url":"https://access.redhat.com/errata/RHSA-2026:9848"},{"type":"ADVISORY","url":"https://access.redhat.com/security/cve/CVE-2026-25639"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/25xxx/CVE-2026-25639.json"},{"type":"ADVISORY","url":"https://github.com/axios/axios/security/advisories/GHSA-43fc-jf86-j433"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-25639"},{"type":"REPORT","url":"https://bugzilla.redhat.com/show_bug.cgi?id=2438237"},{"type":"FIX","url":"https://github.com/axios/axios/commit/28c721588c7a77e7503d0a434e016f852c597b57"},{"type":"FIX","url":"https://github.com/axios/axios/commit/d7ff1409c68168d3057fc3891f911b2b92616f9e"},{"type":"FIX","url":"https://github.com/axios/axios/pull/7369"},{"type":"FIX","url":"https://github.com/axios/axios/pull/7388"},{"type":"PACKAGE","url":"https://github.com/axios/axios"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-09-12T03:30:44.980524838Z"}}