Vulnerabilities in pkg:npm/axios
PACKAGECVE-2026-101904 is a MODERATE remote code execution vulnerability (CWE-1321: Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')) affecting Axios libraries in the npm ecosystem. The issue involves header injection via inherited headers after minimal interceptor. Remediation is available by upgrading affected packages to version 1.20.0.
pkg:npm/axios
Vulnerability advisories affecting package pkg:npm/axios. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-j8rh-479h-cp32 | CVE-2026-101904 | MODERATE | Axios: Header Injection via Inherited headers After Minimal Interceptor |
| GHSA-4hqw-qxg8-jxx2 | CVE-2026-101900 | MODERATE | Axios: Fetch Adapter Header Injection via Inherited FormData getHeaders |
| GHSA-m8m8-qj5v-23w3 | CVE-2026-101905 | HIGH | Axios: Node HTTP adapter prototype-pollution gadget allows request socket hijack via inherited createConnection |
| GHSA-44g4-m2mj-wpvx | CVE-2026-101899 | MODERATE | Axios: CIDR-form NO_PROXY entries are ignored, causing proxy exclusion bypass for internal IP ranges |
| GHSA-r4gj-5m52-g5wh | CVE-2026-101907 | HIGH | Axios: maxRedirects: 0 is not enforced by the fetch adapter, allowing redirect-based SSRF |
| GHSA-vh66-26gq-q6x8 | CVE-2026-101908 | MODERATE | Axios: Prototype pollution gadget in fetch adapter can alter outbound requests |
| GHSA-9fr6-4gfg-395g | CVE-2026-101902 | MODERATE | Axios: Prototype-Pollution Gadget in the Default Instance Allows Inherited Object.prototype.method to Override HTTP Method |
| GHSA-c29m-xwm3-cm6r | CVE-2026-101903 | HIGH | Axios: ReDoS in fromDataURI data: URL parser freezes the Node event loop (DoS) |
| GHSA-mghh-pgcx-3jjj | CVE-2026-101906 | HIGH | Axios: ReDoS (O(N²)) in shouldBypassProxy host normalization, reachable via untrusted redirect Location |
| GHSA-x97p-jq2g-jp4f | CVE-2026-101909 | HIGH | Axios: Prototype Pollution Gadget in axios toFormData Options |
| GHSA-3pq3-5fj3-cg6v | CVE-2026-101898 | HIGH | Axios: HTTP/2 adapter bypasses configured DNS lookup and proxy controls |
| GHSA-542g-h47m-68v8 | CVE-2026-101901 | HIGH | Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization |
| GHSA-hcpx-6fm6-wx23 | CVE-2026-67321 | MODERATE | Axios form serializer maxDepth bypass via {} metatoken |
| GHSA-3mcp-22mf-vrw3 | - | MODERATE | Duplicate Advisory: Axios form serializer maxDepth bypass via {} metatoken |
| GHSA-gcfj-64vw-6mp9 | CVE-2026-67320 | HIGH | Axios Node HTTP adapter can use an inherited proxy after interceptor config cloning |
| GHSA-68jp-44vc-2x5h | - | HIGH | Duplicate Advisory: Axios Node HTTP adapter can use an inherited proxy after interceptor config cloning |
| GHSA-7q8q-rj6j-mhjq | CVE-2026-67319 | MODERATE | Axios: Nested axios option objects can consume polluted prototype values |
| GHSA-9wx3-p993-35vp | - | MODERATE | Duplicate Advisory: Axios: Nested axios option objects can consume polluted prototype values |
| GHSA-42h9-826w-cgv3 | CVE-2026-67313 | MODERATE | Axios: Excessive recursion in formDataToJSON can cause denial of service |
| GHSA-fq2j-3j99-rx65 | - | MODERATE | Duplicate Advisory: Axios: Excessive recursion in formDataToJSON can cause denial of service |
| GHSA-f4gw-2p7v-4548 | CVE-2026-67315 | MODERATE | Axios: NO_PROXY bypass for 0.0.0.0 local addresses in axios |
| GHSA-jqh4-m9w3-8hp9 | CVE-2026-67317 | MODERATE | Axios: Fetch adapter `ReadableStream` uploads bypass `maxBodyLength` |
| GHSA-6hqm-hm2v-3p2p | - | MODERATE | Duplicate Advisory: Axios: NO_PROXY bypass for 0.0.0.0 local addresses in axios |
| GHSA-39j5-w47m-2gmv | - | MODERATE | Duplicate Advisory: Axios: Fetch adapter `ReadableStream` uploads bypass `maxBodyLength` |
| GHSA-mwf2-3pr3-8698 | CVE-2026-67318 | MODERATE | Axios: HTTP/2 streamed uploads bypass `maxBodyLength` |
| GHSA-fqj3-h9pc-443h | - | MODERATE | Duplicate Advisory: Axios: HTTP/2 streamed uploads bypass `maxBodyLength` |
| GHSA-pmv8-rq9r-6j72 | CVE-2026-67312 | MODERATE | Axios: Deep formToJSON Key Recursion Can Cause Denial of Service |
| GHSA-4ww2-rjh2-xpv9 | - | MODERATE | Duplicate Advisory: Axios: Deep formToJSON Key Recursion Can Cause Denial of Service |
| GHSA-mmx7-hfxf-jppx | CVE-2026-67316 | MODERATE | Axios: Prototype pollution gadgets can alter axios request construction |
| GHSA-f2r5-pqh9-r8f8 | - | MODERATE | Duplicate Advisory: Axios: Prototype pollution gadgets can alter axios request construction |
| GHSA-xj6q-8x83-jv6g | CVE-2026-67314 | MODERATE | Axios: Prototype pollution auth subfields can inject Basic auth |
| GHSA-38gx-cfqf-f652 | - | MODERATE | Duplicate Advisory: Axios: Prototype pollution auth subfields can inject Basic auth |
| GHSA-pjwm-pj3p-43mv | CVE-2026-44492 | HIGH | axios's shouldBypassProxy does not recognize IPv4-mapped IPv6 addresses, allowing NO_PROXY bypass (incomplete fix for CVE-2025-62718) |
| GHSA-3g43-6gmg-66jw | CVE-2026-44495 | HIGH | axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollution Gadget in Config Merge |
| GHSA-35jp-ww65-95wh | CVE-2026-44494 | HIGH | axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `config.proxy` |
| GHSA-898c-q2cr-xwhg | CVE-2026-44490 | MODERATE | axios has DoS & Header Injection via Prototype Pollution Read-Side Gadgets in axios merge functions |
| GHSA-654m-c8p4-x5fp | CVE-2026-44489 | LOW | Axios has a Patch Bypass: Proxy-Authorization Header Injection via Prototype Pollution — Incomplete Null-Prototype Fix |
| GHSA-777c-7fjr-54vf | CVE-2026-44488 | HIGH | Allocation of Resources Without Limits or Throttling in Axios |
| GHSA-p92q-9vqr-4j8v | CVE-2026-44487 | HIGH | Axios: Proxy-Authorization Credential Leak to Origin Server Across HTTP-to-HTTPS Redirect in Axios Node.js HTTP Adapter |
| GHSA-j5f8-grm9-p9fc | CVE-2026-44486 | HIGH | Axios: Proxy-Authorization header leaks to redirect target when proxy is re-evaluated to direct connection |
| GHSA-62hf-57xw-28j9 | CVE-2026-42039 | MODERATE | Axios: unbounded recursion in toFormData causes DoS via deeply nested request data |
| GHSA-hfxv-24rg-xrqf | CVE-2026-44496 | HIGH | Axios: Regular Expression Denial of Service (ReDoS) via Cookie Name Injection |
| GHSA-fvcv-3m26-pcqx | CVE-2026-40175 | MODERATE | Axios has Unrestricted Cloud Metadata Exfiltration via Header Injection Chain |
| GHSA-q8qp-cvcw-x6jj | CVE-2026-42264 | HIGH | Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking |
| GHSA-43fc-jf86-j433 | CVE-2026-25639 | HIGH | Axios is Vulnerable to Denial of Service via __proto__ Key in mergeConfig |
| GHSA-3p68-rc4w-qgx5 | CVE-2025-62718 | MODERATE | Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF |
| GHSA-445q-vr5w-6q77 | CVE-2026-42037 | MODERATE | Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream |
| GHSA-m7pr-hjqh-92cm | CVE-2026-42038 | MODERATE | Axios: no_proxy bypass via IP alias allows SSRF |
| GHSA-5c9x-8gcm-mpgx | CVE-2026-42034 | MODERATE | Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0 |
| GHSA-vf2m-468p-8v99 | CVE-2026-42036 | MODERATE | Axios: HTTP adapter streamed responses bypass maxContentLength |
| GHSA-pf86-5x62-jrwf | CVE-2026-42033 | HIGH | Axios: Prototype Pollution Gadgets - Response Tampering, Data Exfiltration, and Request Hijacking |
| GHSA-6chq-wfr3-2hj9 | CVE-2026-42035 | HIGH | Axios: Header Injection via Prototype Pollution |
| GHSA-xx6v-rp6x-q39c | CVE-2026-42042 | MODERATE | Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in `withXSRFToken` Boolean Coercion |
| GHSA-w9j2-pvgh-6h63 | CVE-2026-42041 | MODERATE | Axios: Authentication Bypass via Prototype Pollution Gadget in `validateStatus` Merge Strategy |
| GHSA-pmwg-cvhr-8vh7 | CVE-2026-42043 | HIGH | Axios: Incomplete Fix for CVE-2025-62718 — NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0 |
| GHSA-3w6x-2g7m-8v23 | CVE-2026-42044 | MODERATE | Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in `parseReviver` |
| GHSA-xhjh-pmcv-23jw | CVE-2026-42040 | LOW | Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams |
| GHSA-qj83-cq47-w5f8 | CVE-2026-39865 | MODERATE | Axios HTTP/2 Session Cleanup State Corruption Vulnerability |
| GHSA-4hjh-wcwx-xvwj | CVE-2025-58754 | HIGH | Axios is vulnerable to DoS attack through lack of data size check |
| GHSA-jr5f-v2jv-69x6 | CVE-2025-27152 | HIGH | axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL |
| GHSA-rm8p-cx58-hcvx | CVE-2025-54371 | HIGH | Withdrawn Advisory: Axios has Transitive Critical Vulnerability via form-data |
| GHSA-8hc4-vh64-cxmj | CVE-2024-39338 | HIGH | Server-Side Request Forgery in axios |
| GHSA-wf5p-g6vw-rhxx | CVE-2023-45857 | MODERATE | Axios Cross-Site Request Forgery Vulnerability |
| GHSA-cph5-m8f7-6c5x | CVE-2021-3749 | HIGH | axios Inefficient Regular Expression Complexity vulnerability |
| GHSA-4w2v-q235-vp99 | CVE-2020-28168 | MODERATE | Axios vulnerable to Server-Side Request Forgery |
| GHSA-42xw-2xvc-qx8m | CVE-2019-10742 | HIGH | Denial of Service in axios |
CVE-2026-101904 at a Glance
How to Fix CVE-2026-101904
To remediate this vulnerability, upgrade all affected Axios dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install axios@1.20.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls axios
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-101904, inspect your project dependencies using npm:
npm ls axios
Analyze the terminal output to locate any version of Axios in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.20.0), your application is affected.
Note: The npm ls axios command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1321: Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'), where the product receives input from an upstream component that specifies attributes that are to be initialized or updated in an object, but it does not properly control modifications of attributes of the object prototype. In Axios, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-101904 Affected Axios Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
axios
|
npm |
≥ 1.0.0
< 1.20.0
|
1.20.0
|
References
Frequently Asked Questions
What is CVE-2026-101904?
Which Axios versions are affected?
What version fixes CVE-2026-101904?
Is axios affected?
What CWE is associated with CVE-2026-101904?
How can I check npm dependencies for CVE-2026-101904?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-j8rh-479h-cp32",
"modified" : "2026-09-30T15:35:14Z",
"published" : "2026-09-30T15:35:14Z",
"aliases" : [ "CVE-2026-101904" ],
"summary" : "Axios: Header Injection via Inherited headers After Minimal Interceptor",
"details" : "## Summary\n\nAxios request interceptors may return a replacement config object. If an interceptor returns a plain object without an own `headers` property, `dispatchRequest()` later evaluates `config.headers` and can resolve an inherited `Object.prototype.headers` value. In a process where another vulnerability has polluted `Object.prototype.headers`, axios can send attacker-controlled headers.\n\nAxios does not create the prototype pollution source, and the interceptor itself is trusted caller code. The vulnerable behavior is the post-interceptor axios config read that reopens a prototype-pollution gadget after earlier null-prototype config hardening.\n\n## Impact\n\nAn attacker with a prior same-process prototype-pollution primitive can inject headers into affected axios requests when the application uses an interceptor that rebuilds config and omits headers. Depending on the target service, injected headers can affect cache behavior, conditional requests, metadata services, or application-specific authorization and routing logic.\n\nThe issue is conditional and should not be described as affecting every interceptor or every request.\n\n## Affected Functionality\n\nAffected:\n\n- Request interceptor chains where an interceptor returns a new ordinary object.\n- Replacement config objects that omit an own `headers` property.\n- `dispatchRequest()` header normalization through `AxiosHeaders.from(config.headers)`.\n\nNot affected:\n\n- Requests whose interceptor preserves an own `headers` property.\n- Interceptors that mutate and return the existing null-prototype config.\n- Processes without prototype pollution.\n\n## Technical Details\n\n`lib/core/dispatchRequest.js` contains:\n\n```js\nconfig.headers = AxiosHeaders.from(config.headers);\n```\n\nThe initial merged config is null-prototype, but an interceptor can replace it with a normal object. If that object has no own `headers`, the read can resolve `Object.prototype.headers`.\n\nLocal verification on axios `1.18.1` polluted `Object.prototype.headers = { 'X-Poisoned': 'yes' }`, installed an interceptor that returned `{ url, method, timeout, proxy: false }`, and sent a request. The loopback server received `X-Poisoned: yes`.\n\n## Proof of Concept of Attack\n\nConstrained local demonstration:\n\n```js\nObject.prototype.headers = { 'X-Poisoned': 'yes' };\n\nconst client = axios.create();\nclient.interceptors.request.use((config) => ({\n url: config.url,\n method: config.method,\n timeout: config.timeout\n}));\n\nawait client.get(url);\n```\n\nExpected safe behavior is that missing headers normalize to an empty header set. Current affected behavior reads inherited `Object.prototype.headers`.\n\n## Workarounds\n\nInterceptors that rebuild config should always set an own `headers` property, for example by preserving `config.headers` or setting `headers: {}`. Mutating and returning the existing merged config also avoids replacing the null-prototype object.\n\n<details>\n <summary><h3>Original report</h3></summary>\n \n\n## Summary\n\nAxios 1.17.0 blocks the old `Object.prototype.common` header bucket gadget. However, if a request interceptor rebuilds a minimal config object and omits `headers`, `dispatchRequest()` reads inherited `Object.prototype.headers`.\n\nThis allows attacker-controlled headers to be placed on the wire.\n\n## Affected Version\n\nValidated on:\n\n- axios: `1.17.0`\n- commit: `4306df2`\n- runtime: Node.js `v24.15.0`\n\n## Preconditions\n\n- A separate prototype-pollution primitive can write an object to `Object.prototype.headers`.\n- A request interceptor rebuilds config and omits own `headers`.\n\n## Root Cause\n\n`dispatchRequest()` uses:\n\n```js\nconfig.headers = AxiosHeaders.from(config.headers);\n```\n\nIf `config` is a normal object returned by an interceptor and lacks own `headers`, this reads `Object.prototype.headers`.\n\n## Impact\n\nAn attacker can inject request headers. Depending on the target service, this can cause cache manipulation, conditional-response suppression, request smuggling preconditions, metadata-service header injection, or application-specific authorization bypass.\n\n## Proof of Concept\n\n```js\nimport axios from './index.js';\nimport http from 'http';\n\nconst start = (handler) => new Promise((resolve) => {\n const server = http.createServer(handler);\n server.listen(0, '127.0.0.1', () => resolve(server));\n});\n\nconst stop = (server) => new Promise((resolve) => server.close(resolve));\n\nconst hits = [];\n\nconst server = await start((req, res) => {\n hits.push(req.headers);\n res.setHeader('Content-Type', 'application/json');\n res.end('{\"ok\":true}');\n});\n\ntry {\n Object.prototype.headers = {\n 'X-Poisoned': 'yes',\n 'If-None-Match': '*'\n };\n\n const client = axios.create();\n client.interceptors.request.use((config) => ({\n url: config.url,\n method: config.method,\n timeout: config.timeout\n }));\n\n await client.get(`http://127.0.0.1:${server.address().port}/headers`, {\n timeout: 3000\n });\n\n console.log(hits[0]);\n} finally {\n delete Object.prototype.headers;\n await stop(server);\n}\n```\n\nObserved wire headers:\n\n```json\n{\n \"x-poisoned\": \"yes\",\n \"if-none-match\": \"*\",\n \"user-agent\": \"axios/1.17.0\"\n}\n```\n\n## References\n\n- https://github.com/axios/axios/security/advisories/GHSA-898c-q2cr-xwhg\n- https://osv.dev/vulnerability/GHSA-898c-q2cr-xwhg\n</details>\n---",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "axios"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.0.0"
}, {
"fixed" : "1.20.0"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/axios/axios/security/advisories/GHSA-j8rh-479h-cp32"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-101904"
}, {
"type" : "WEB",
"url" : "https://github.com/axios/axios/pull/11141"
}, {
"type" : "WEB",
"url" : "https://github.com/axios/axios/commit/d19040bda7a8be2f82c3c6e1a5bc03917daee39a"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/axios/axios"
}, {
"type" : "WEB",
"url" : "https://github.com/axios/axios/releases/tag/v1.20.0"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1321", "CWE-74" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-30T15:35:14Z",
"nvd_published_at" : "2026-09-28T18:17:18Z"
}
}