CVE-2026-44490: Axios Prototype Pollution via Merge and Property Descriptor Gadgets
Axios, a widely-used HTTP client for JavaScript environments, contains two prototype-pollution vulnerabilities that can be exploited when an upstream dependency (such as lodash) has already polluted JavaScript's Object.prototype. An attacker cannot directly trigger these gadgets, but if your application uses a vulnerable dependency alongside axios, malicious code or data flowing through your supply chain could cause axios to either leak polluted properties in HTTP headers or crash on every request with a TypeError. Versions before 0.32.0 (for the 0.x line) and before 1.16.0 (for the 1.x line) are affected.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 4.8 MEDIUM · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:L
- Weaknesses (CWE)
- CWE-1321
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-11 / 2026-06-17
NVD description (verbatim)
Axios is a promise based HTTP client for the browser and Node.js. Prior to 0.32.0 and 1.16.0, axios exposes two read-side prototype-pollution gadgets. When Object.prototype is polluted by an upstream dependency in the same process (e.g. lodash _.merge / CVE-2018-16487), axios silently picks up the polluted values. (1) lib/utils.js line 406 builds merge()'s accumulator as result = {}, so result[targetKey] (line 414) walks Object.prototype and the polluted bucket's own keys are copied into the merged headers and ride out on the wire. (2) lib/core/mergeConfig.js line 26 builds the hasOwnProperty descriptor as a plain-object literal. Object.defineProperty reads descriptor.get/descriptor.set via the prototype chain, so a polluted Object.prototype.get or Object.prototype.set makes the call throw TypeError synchronously on every axios request. This vulnerability is fixed in 0.32.0 and 1.16.0.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability manifests in two distinct code paths. First, axios's merge() utility in lib/utils.js initializes an accumulator object and copies keys from Object.prototype when it has been polluted; these polluted values then propagate into HTTP request headers. Second, lib/core/mergeConfig.js defines a property descriptor as a plain object literal, allowing Object.defineProperty to read getter/setter functions from a polluted prototype chain, triggering a synchronous TypeError during descriptor setup on every request. Both issues are gadget-class—they require upstream prototype pollution (e.g., from lodash_.merge or similar) to be exploited in the same process context. The root cause is insufficient isolation of prototype chain lookups from user-controlled or polluted data.
Business impact
The business risk depends on your supply-chain composition. If your application uses axios alongside a vulnerable dependency that pollutes Object.prototype, you face two distinct failure modes: silent data leakage (where internal or sensitive header values escape to the wire) or denial of service (where every axios request fails with an uncaught TypeError, disrupting service availability). In a multi-tenant or API-driven environment, this could expose request metadata or cause cascading outages. However, the impact is constrained by the requirement for upstream pollution—direct network attackers cannot trigger these gadgets without prior code execution or supply-chain compromise.
Affected systems
axios versions 0.x prior to 0.32.0 and 1.x prior to 1.16.0 are affected. Any Node.js or browser-based application bundling axios alongside a prototype-pollution source (e.g., lodash <4.17.21) is at risk. This includes backend APIs, CLI tools, Electron apps, and frontend build tooling that uses axios for HTTP operations. The vulnerability does not affect axios 0.32.0, 1.16.0, or later versions.
Exploitability
Exploitability is constrained but not zero. An attacker cannot remotely exploit this vulnerability in isolation—it requires that Object.prototype is already polluted by an upstream dependency in the same process. The practical attack vector is supply-chain compromise: a malicious or compromised npm package could pollute the prototype and then trigger the axios gadgets to leak data or cause denial of service. The CVSS score of 4.8 (MEDIUM) reflects this; integrity and availability are impacted, but only under the specific precondition of upstream pollution. Direct remote exploitation without prior code execution is not feasible.
Remediation
Upgrade axios to 0.32.0 (for the 0.x line) or 1.16.0 (for the 1.x line) or later. Simultaneously, audit and upgrade all upstream dependencies, particularly lodash, to versions that do not pollute Object.prototype (lodash 4.17.21 or later). Implement npm audit and lockfile review practices to prevent introduction of vulnerable transitive dependencies. Consider using npm's allow/deny list policies or namespace isolation techniques if you operate a large monorepo or managed application portfolio.
Patch guidance
The fix is straightforward: update axios to the patched versions listed above. There are no known compatibility issues or breaking changes in the patched releases. If you use yarn, npm, or pnpm, run upgrade axios and re-lock your dependencies. Verify that your lockfile reflects the new versions before deploying. If you cannot upgrade immediately, isolate axios from untrusted code paths and ensure your dependency tree is free of known prototype-pollution sources (verify this with npm audit --production and manual code review of critical paths).
Detection guidance
Monitor for TypeError exceptions originating from axios operations, particularly in mergeConfig() or merge() calls. Check application logs for patterns like 'Cannot read property get/set of undefined' or similar descriptor-related errors. Scan your node_modules tree and package-lock.json for vulnerable versions of axios and for upstream polluters such as lodash <4.17.21. Use software composition analysis (SCA) tools like Snyk, WhiteSource, or Dependabot to flag outdated dependencies. In a containerized environment, build-time scanning of npm metadata before deployment can catch these issues before they reach production.
Why prioritize this
Although CVSS is MEDIUM and KEV inclusion is false, this vulnerability warrants prompt attention because it targets a ubiquitous HTTP client in JavaScript ecosystems. The gadget-class nature means it is low-severity in isolation but becomes critical if combined with upstream pollution—a scenario that is realistic in complex supply chains. Prioritize this fix if your application uses axios for critical API communication or if you operate in a high-risk supply-chain environment (e.g., publishing packages to npm, running untrusted code, or depending on many transitive packages).
Risk score, explained
The CVSS 3.1 score of 4.8 (MEDIUM) reflects a network-accessible vulnerability with high attack complexity (AC:H)—the requirement for prior prototype pollution constrains the likelihood of exploitation in the wild. There is no confidentiality impact (C:N), but integrity (I:L) and availability (A:L) are degraded if the preconditions are met. The score appropriately penalizes the constraint of requiring upstream pollution while acknowledging that silent data leakage and denial of service are real when that precondition holds.
Frequently asked questions
Can axios be exploited directly over the network without prior code execution?
No. The vulnerability requires that Object.prototype is already polluted by code running in the same Node.js or browser process—typically an upstream npm dependency. A network attacker cannot pollute the prototype remotely; they would need to compromise a dependency in your supply chain or trick you into installing malicious code.
If I upgrade axios but my other dependencies still have prototype-pollution bugs, am I still at risk?
No. The patched axios versions 0.32.0 and 1.16.0 include defensive code that prevents the merge() and mergeConfig() gadgets from being exploited, even if Object.prototype is polluted. However, you should still upgrade polluted dependencies for the sake of your entire application—prototype pollution can affect other libraries and systems beyond axios.
What is the difference between the two gadgets described in this CVE?
The first gadget (in lib/utils.js) silently copies polluted properties into HTTP headers, potentially leaking sensitive metadata on the wire. The second gadget (in lib/core/mergeConfig.js) reads a polluted Object.prototype.get or Object.prototype.set and passes it to Object.defineProperty, causing a synchronous TypeError that crashes every axios request. One gadget exfiltrates data; the other denies service.
How do I know if my application is vulnerable?
Check your package-lock.json (or yarn.lock) for axios versions <0.32.0 (0.x line) or <1.16.0 (1.x line). Run 'npm list axios' in your project root. Then run 'npm audit' to check for upstream dependencies with known prototype-pollution vulnerabilities (e.g., lodash <4.17.21). If you find axios in the vulnerable range and any upstream polluter, you are at risk.
This analysis is provided for informational purposes and reflects publicly available vulnerability data as of the publication date. SEC.co makes no warranty regarding the completeness or accuracy of remediation guidance specific to your environment. Always verify patch availability and compatibility through official vendor advisories before deploying updates to production. Prototype-pollution impacts depend on your specific dependency composition; conduct a thorough supply-chain audit tailored to your application's architecture. This vulnerability does not appear on CISA's Known Exploited Vulnerabilities (KEV) list as of the publication date, but KEV status may change. For the latest guidance, consult the axios GitHub repository and official security advisories from your organization's software vendors. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-44489LOWAxios Prototype Pollution & Proxy Credential Injection
- CVE-2026-44494HIGHAxios Prototype Pollution to MITM Gadget Chain (v1.0.0–1.15.x)
- CVE-2026-12208MEDIUMPrototype Pollution in jsonata-js Library—Exploitation and Remediation Guide
- CVE-2026-12209MEDIUMRubyLouvre Avalon Prototype Pollution Vulnerability – Exploitation Active
- CVE-2026-44495HIGHAxios Prototype Pollution Gadget Vulnerability (0.31.0 & 1.15.1)
- CVE-2026-45302HIGHPrototype Pollution in parse-nested-form-data Before 1.0.1
- CVE-2026-46509HIGHPrototype Pollution in deepobj JavaScript Library
- CVE-2026-46510HIGHform-data-objectizer Prototype Pollution Vulnerability (CVSS 8.2)