Every CVE Search/ Get API key

CVE-2026-101908

Axios: Prototype pollution gadget in fetch adapter can alter outbound requests

6.9 MediumFix available

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
None

Exploit likelihood

0.47%Up 0.1 points since Sep 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.9

Axios: Prototype pollution gadget in fetch adapter can alter outbound requests

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
CVE-2026-101908
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Weakness
CWE-1321
Updated
2026-11-02
EUVDEUVD-2026-88387 6.9

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
EUVD-2026-88387
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-vh66-26gq-q6x8 6.9

Axios: Prototype pollution gadget in fetch adapter can alter outbound requests

Summary

Axios fetch adapter requests can be altered by inherited properties on fetchOptions. The adapter resolves method, headers, body, signal, and credentials into resolvedOptions, creates a Request, and then calls fetch(request, fetchOptions) instead of fetch(request, resolvedOptions). In runtimes such as Node's undici-backed fetch, inherited fetchOptions.headers can override the headers already placed on the Request.

Axios does not create the prototype pollution source. This is a read-side gadget that becomes exploitable after same-process prototype pollution.

Impact

An attacker with a prior prototype-pollution primitive can cause affected fetch-adapter requests to send attacker-controlled headers and drop caller-specified headers. This can affect authorization, cache behavior, metadata-service interactions, or application-specific header-based controls.

The issue is specific to fetch-adapter behavior and does not affect Node HTTP adapter requests.

Affected Functionality

Affected:

  • adapter: 'fetch'.
  • Runtime environments where the fetch adapter is selected.
  • Requests where fetchOptions is an object that does not have safe own values for sensitive fetch init fields.

Not affected:

  • Node HTTP adapter.
  • Requests that do not use the fetch adapter.
  • Processes where Object.prototype is not polluted.

Technical Details

lib/adapters/fetch.js builds:

const resolvedOptions = {
  ...fetchOptions,
  signal: composedSignal,
  method: method.toUpperCase(),
  headers: toByteStringHeaderObject(headers.normalize()),
  body: data,
  duplex: 'half',
  credentials: isCredentialsSupported ? withCredentials : undefined,
};

request = isRequestSupported && new Request(url, resolvedOptions);

let response = await (isRequestSupported
  ? _fetch(request, fetchOptions)
  : _fetch(url, resolvedOptions));

The fallback path without Request uses resolvedOptions, but the Request path passes the original fetchOptions as the second argument to fetch(). That second argument can contain inherited properties from Object.prototype.

Local verification on axios 1.18.1 set Object.prototype.headers = { Authorization: 'Bearer POLLUTED' } and called the fetch adapter with headers: { 'X-Good': 'yes' }, fetchOptions: {}. The loopback server received Authorization: Bearer POLLUTED and did not receive X-Good.

Proof of Concept of Attack

Constrained local demonstration:

Object.prototype.headers = { Authorization: 'Bearer POLLUTED' };
try {
  await axios.get(url, {
    adapter: 'fetch',
    headers: { 'X-Good': 'yes' },
    fetchOptions: {}
  });
} finally {
  delete Object.prototype.headers;
}

Expected safe behavior is that the sanitized axios headers remain in force. Current behavior can use the inherited fetch init headers instead.

Workarounds

Use the Node HTTP adapter for security-sensitive server-side requests until fixed. If the fetch adapter must be used, avoid passing empty fetchOptions objects in processes where prototype pollution is possible, and set explicit safe own values for fetch init fields.

<details> <summary><h3>Original report</h3></summary>

Hello, I’m not completely sure if this is something you’d consider a security issue, since it depends on prototype pollution happening somewhere else first, but I wanted to report it just in case.

I was testing the fetch adapter with polluted prototype values and found that Object.prototype.headers can change the request axios sends.

The issue seems to be in lib/adapters/fetch.js. Axios creates a Request with the resolved headers/method/body, but then sends it with fetch(request, fetchOptions). With undici, if fetchOptions doesn’t have its own headers, an inherited Object.prototype.headers value can be used during the final fetch call.

I tested it with this:

import http from 'node:http';
import axios from 'axios';

const server = http.createServer((req, res) => {
 …
Record
GHSA-vh66-26gq-q6x8
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Weakness
CWE-1321
Updated
2026-11-02
NVD 6.9

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
CVE-2026-101908
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-1321
Updated
2026-11-02
OSV 6.9

Axios: Prototype pollution gadget in fetch adapter can alter outbound requests

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
CVE-2026-101908
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Weakness
CWE-1321
Updated
2026-11-02
OSVDEBIAN-CVE-2026-101908 6.9

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
DEBIAN-CVE-2026-101908
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Updated
2026-11-02
Show 15 moreShow less
OSVGHSA-vh66-26gq-q6x8 6.9

Axios: Prototype pollution gadget in fetch adapter can alter outbound requests

Summary

Axios fetch adapter requests can be altered by inherited properties on fetchOptions. The adapter resolves method, headers, body, signal, and credentials into resolvedOptions, creates a Request, and then calls fetch(request, fetchOptions) instead of fetch(request, resolvedOptions). In runtimes such as Node's undici-backed fetch, inherited fetchOptions.headers can override the headers already placed on the Request.

Axios does not create the prototype pollution source. This is a read-side gadget that becomes exploitable after same-process prototype pollution.

Impact

An attacker with a prior prototype-pollution primitive can cause affected fetch-adapter requests to send attacker-controlled headers and drop caller-specified headers. This can affect authorization, cache behavior, metadata-service interactions, or application-specific header-based controls.

The issue is specific to fetch-adapter behavior and does not affect Node HTTP adapter requests.

Affected Functionality

Affected:

  • adapter: 'fetch'.
  • Runtime environments where the fetch adapter is selected.
  • Requests where fetchOptions is an object that does not have safe own values for sensitive fetch init fields.

Not affected:

  • Node HTTP adapter.
  • Requests that do not use the fetch adapter.
  • Processes where Object.prototype is not polluted.

Technical Details

lib/adapters/fetch.js builds:

const resolvedOptions = {
  ...fetchOptions,
  signal: composedSignal,
  method: method.toUpperCase(),
  headers: toByteStringHeaderObject(headers.normalize()),
  body: data,
  duplex: 'half',
  credentials: isCredentialsSupported ? withCredentials : undefined,
};

request = isRequestSupported && new Request(url, resolvedOptions);

let response = await (isRequestSupported
  ? _fetch(request, fetchOptions)
  : _fetch(url, resolvedOptions));

The fallback path without Request uses resolvedOptions, but the Request path passes the original fetchOptions as the second argument to fetch(). That second argument can contain inherited properties from Object.prototype.

Local verification on axios 1.18.1 set Object.prototype.headers = { Authorization: 'Bearer POLLUTED' } and called the fetch adapter with headers: { 'X-Good': 'yes' }, fetchOptions: {}. The loopback server received Authorization: Bearer POLLUTED and did not receive X-Good.

Proof of Concept of Attack

Constrained local demonstration:

Object.prototype.headers = { Authorization: 'Bearer POLLUTED' };
try {
  await axios.get(url, {
    adapter: 'fetch',
    headers: { 'X-Good': 'yes' },
    fetchOptions: {}
  });
} finally {
  delete Object.prototype.headers;
}

Expected safe behavior is that the sanitized axios headers remain in force. Current behavior can use the inherited fetch init headers instead.

Workarounds

Use the Node HTTP adapter for security-sensitive server-side requests until fixed. If the fetch adapter must be used, avoid passing empty fetchOptions objects in processes where prototype pollution is possible, and set explicit safe own values for fetch init fields.

<details> <summary><h3>Original report</h3></summary>

Hello, I’m not completely sure if this is something you’d consider a security issue, since it depends on prototype pollution happening somewhere else first, but I wanted to report it just in case.

I was testing the fetch adapter with polluted prototype values and found that Object.prototype.headers can change the request axios sends.

The issue seems to be in lib/adapters/fetch.js. Axios creates a Request with the resolved headers/method/body, but then sends it with fetch(request, fetchOptions). With undici, if fetchOptions doesn’t have its own headers, an inherited Object.prototype.headers value can be used during the final fetch call.

I tested it with this:

import http from 'node:http';
import axios from 'axios';

const server = http.createServer((req, res) => {
 …
Record
GHSA-vh66-26gq-q6x8
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Weakness
CWE-1321
Updated
2026-11-02
OSVRHSA-2026:74869 8.2

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:74869
CVSS 3.1
8.2 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H
Updated
2026-11-02
OSVRHSA-2026:74871 8.2

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:74871
CVSS 3.1
8.2 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H
Updated
2026-11-02
OSVRHSA-2026:74872 8.2

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:74872
CVSS 3.1
8.2 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-101908 6.9

Axios is a promise-based HTTP client for the browser and Node.js. From 1.7.0 until 1.20.0, the fetch adapter constructs a Request with sanitized resolvedOptions but then calls fetch with the original fetchOptions. A separate same-process prototype-pollution flaw populates Object.prototype.headers so fetchOptions.headers resolves through inheritance. The inherited fetchOptions.headers value overrides the sanitized Request headers through the second argument to fetch after Request construction. Attacker-controlled request headers can alter authorization, caching, metadata-service access, or application-specific behavior. This issue is fixed in version 1.20.0.

Record
UBUNTU-CVE-2026-101908
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N
Updated
2026-11-02
OSVCLSA-2026-1790854830 No score

TuxCare security update for axios (10 CVEs)

TuxCare rebuilt axios to address 10 CVEs. Fixed in 1.18.1-tuxcare.1.

Record
CLSA-2026-1790854830
Updated
2026-11-02
OSVCLSA-2026-1791667309 No score

TuxCare security update for axios (6 CVEs)

TuxCare rebuilt axios to address 6 CVEs. Fixed in 1.16.0-tuxcare.2.

Record
CLSA-2026-1791667309
Updated
2026-11-02
OSVCLSA-2026-1792190983 No score

TuxCare security update for axios (6 CVEs)

TuxCare rebuilt axios to address 6 CVEs. Fixed in 1.13.5-tuxcare.2.

Record
CLSA-2026-1792190983
Updated
2026-11-02
OSVCLSA-2026-1792429081 No score

TuxCare security update for axios (12 CVEs)

TuxCare rebuilt axios to address 12 CVEs. Fixed in 1.17.0-tuxcare.3.

Record
CLSA-2026-1792429081
Updated
2026-11-02
OSVCLSA-2026-1792429317 No score

TuxCare security update for axios (11 CVEs)

TuxCare rebuilt axios to address 11 CVEs. Fixed in 1.18.0-tuxcare.2.

Record
CLSA-2026-1792429317
Updated
2026-11-02
OSVCLSA-2026-1792488905 No score

TuxCare security update for axios (12 CVEs)

TuxCare rebuilt axios to address 12 CVEs. Fixed in 1.19.0-tuxcare.1.

Record
CLSA-2026-1792488905
Updated
2026-11-02
OSVCLSA-2026-1793099904 No score

TuxCare security update for axios (4 CVEs)

TuxCare rebuilt axios to address 4 CVEs. Fixed in 1.16.1-tuxcare.3.

Record
CLSA-2026-1793099904
Updated
2026-11-02
OSVCLSA-2026-1793101849 No score

TuxCare security update for axios (32 CVEs)

TuxCare rebuilt axios to address 32 CVEs. Fixed in 1.13.2-tuxcare.2.

Record
CLSA-2026-1793101849
Updated
2026-11-02
OSVCLSA-2026-1793109367 No score

TuxCare security update for axios (6 CVEs)

TuxCare rebuilt axios to address 6 CVEs. Fixed in 1.13.6-tuxcare.1.

Record
CLSA-2026-1793109367
Updated
2026-11-02
OSVCLSA-2026-1793110604 No score

TuxCare security update for axios (32 CVEs)

TuxCare rebuilt axios to address 32 CVEs. Fixed in 1.12.2-tuxcare.1.

Record
CLSA-2026-1793110604
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
axios
npm
1.7.0 up to 1.20.0
1.20.0
axios
TuxCare:npm
From an advisory covering 10 CVEs
1.18.1-tuxcare.0 up to 1.18.1-tuxcare.1, plus listed versions
1.18.1
1.18.1-tuxcare.1
axios
TuxCare:npm
From an advisory covering 6 CVEs
1.16.0-tuxcare.0 up to 1.16.0-tuxcare.2, plus listed versions
1.16.01.16.0-tuxcare.1
1.16.0-tuxcare.2
axios
TuxCare:npm
From an advisory covering 6 CVEs
1.13.5-tuxcare.0 up to 1.13.5-tuxcare.2, plus listed versions
1.13.51.13.5-tuxcare.1
1.13.5-tuxcare.2
axios
TuxCare:npm
From an advisory covering 12 CVEs
1.17.0-tuxcare.0 up to 1.17.0-tuxcare.3, plus listed versions
1.17.01.17.0-tuxcare.11.17.0-tuxcare.2
1.17.0-tuxcare.3
axios
TuxCare:npm
From an advisory covering 11 CVEs
1.18.0-tuxcare.0 up to 1.18.0-tuxcare.2, plus listed versions
1.18.01.18.0-tuxcare.1
1.18.0-tuxcare.2
axios
TuxCare:npm
From an advisory covering 12 CVEs
1.19.0-tuxcare.0 up to 1.19.0-tuxcare.1, plus listed versions
1.19.0
1.19.0-tuxcare.1
axios
TuxCare:npm
From an advisory covering 4 CVEs
1.16.1-tuxcare.0 up to 1.16.1-tuxcare.3, plus listed versions
1.16.11.16.1-tuxcare.11.16.1-tuxcare.2
1.16.1-tuxcare.3
axios
TuxCare:npm
From an advisory covering 32 CVEs
1.13.2-tuxcare.0 up to 1.13.2-tuxcare.2, plus listed versions
1.13.21.13.2-tuxcare.1
1.13.2-tuxcare.2
axios
TuxCare:npm
From an advisory covering 6 CVEs
1.13.6-tuxcare.0 up to 1.13.6-tuxcare.1, plus listed versions
1.13.6
1.13.6-tuxcare.1
Show 11 moreShow less
Affected packages
PackageAffectedFixed
axios
TuxCare:npm
From an advisory covering 32 CVEs
1.12.2-tuxcare.0 up to 1.12.2-tuxcare.1, plus listed versions
1.12.2
1.12.2-tuxcare.1
node-axios
Debian:13
All versions, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.13.2+dfsg-11.14.0+dfsg-1
Show 7 moreShow less
1.15.0-11.15.2-11.16.0-11.18.0-11.19.0-11.20.0-11.8.4+dfsg-1
None known
node-axios
Debian:14
before 1.20.0-1, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.13.2+dfsg-11.14.0+dfsg-1
Show 6 moreShow less
1.15.0-11.15.2-11.16.0-11.18.0-11.19.0-11.8.4+dfsg-1
1.20.0-1
grafana13.1
Red Hat:hummingbird:1
From an advisory covering 12 CVEs
before 0:13.1.6-0.6.hum1
0:13.1.6-0.6.hum1
grafana12.4
Red Hat:hummingbird:1
From an advisory covering 12 CVEs
before 0:12.4.12-0.3.hum1
0:12.4.12-0.3.hum1
grafana13.2
Red Hat:hummingbird:1
From an advisory covering 11 CVEs
before 0:13.2.1-0.9.hum1
0:13.2.1-0.9.hum1
node-axios
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
0.19.0+dfsg-20.19.0+dfsg-2ubuntu0.1~esm1
None known
node-axios
Ubuntu:Pro:22.04:LTS
All versions, plus listed versions
0.21.1+dfsg-10.23.0+dfsg-20.24.0+dfsg-10.25.0+dfsg-20.26.0+dfsg-10.26.0+dfsg-1ubuntu0.1~esm1
None known
node-axios
Ubuntu:Pro:24.04:LTS
All versions, plus listed versions
1.2.1+dfsg-11.5.1+dfsg-11.6.2+dfsg-11.6.8+dfsg-21.6.8+dfsg-2ubuntu0.1~esm1
None known
node-axios
Ubuntu:26.10
All versions, plus listed versions
1.13.2+dfsg-1build11.16.0-11.18.0-11.19.0-1
None known
node-axios
Ubuntu:Pro:26.04:LTS
All versions, plus listed versions
1.11.0+dfsg-11.12.1+dfsg-11.13.2+dfsg-1build11.13.2+dfsg-1ubuntu0.1~esm1
None known

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-101908 is a medium vulnerability (CVSS 6.9) in Axios, published September 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.47%, the 40th percentile. Fixed in axios 1.20.0.

References

Show 83 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open