Every CVE Search/ Get API key

CVE-2026-101901

Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization

8.2 HighFix available

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. 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
High

Exploit likelihood

0.54%Up 0.2 points since Sep 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.2

Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
CVE-2026-101901
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
EUVDEUVD-2026-88370 8.2

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
EUVD-2026-88370
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-542g-h47m-68v8 8.2

Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization

Summary

Axios versions with Node.js HTTP/2 support can terminate the caller’s process when a ClientHttp2Session emits an error event that is not handled by axios.

This affects applications that use the Node HTTP adapter with httpVersion: 2. A malicious, unavailable, or non-HTTP/2 endpoint can cause an uncaught exception instead of a normal rejected axios request.

Impact

The impact is denial of service. In affected applications, an attacker who can influence the request destination, or operate the destination server, may be able to crash the Node.js process.

This does not affect default HTTP/1.1 usage, browser XHR/fetch adapters, or applications that do not enable axios HTTP/2 support.

Affected Functionality

Affected path:

  • Node.js HTTP adapter
  • httpVersion: 2
  • HTTP/2 session creation/reuse through Http2Sessions
  • Network/session failures emitted as ClientHttp2Session error events

Caller-controlled http2Options can make the issue easier to trigger, but passing arbitrary attacker input into axios config is caller-controlled behavior and should not be the primary advisory framing.

Technical Details

Http2Sessions.getSession() creates a session with http2.connect(authority, options) but only registers a close handler. It does not register an error handler on the returned ClientHttp2Session.

When the session emits error, Node treats it as an unhandled EventEmitter error and throws. This can bypass the normal axios Promise rejection path and terminate the process.

Proof of Concept of Attack

import axios from './index.js';

await axios.get('http://127.0.0.1:1/', {
  httpVersion: 2,
  timeout: 1000
});

Expected vulnerable behavior: the process exits with an uncaught ECONNREFUSED session error instead of only rejecting the axios request.

Workarounds

Disable axios HTTP/2 for untrusted or user-influenced destinations and use the default HTTP/1.1 adapter until a fixed release is available. Also avoid passing attacker-controlled values into http2Options; axios config is trusted application input.

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

Hi, i'm RelunSec a security researcher working with InsiteTech.jp

i want let you known, i finded a DoS in axios, to reproduce that, that is the example of a server

const http = require('http');
// Import the local axios version to ensure the patch is active
const axios = require('../../lib/axios.js').default; 
const url = require('url');

// A public HTTP/2 server to make internal requests to.
// This simulates an external service your application might interact with over HTTP/2.
const TARGET_URL = 'https://nghttp2.org/'; 
const PORT = 3000;

const server = http.createServer(async (req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const http2optionId = parsedUrl.query.http2optionId;

  if (!http2optionId) {
  console.warn(`[SERVER] Rejected request: Missing http2optionId parameter`);
  res.writeHead(400, { 'Content-Type': 'text/plain' });
  res.end('Error: Missing http2optionId query parameter. Usage: ?http2optionId=value\n');
  return; 
}

  console.log(`[SERVER] Received request with http2optionId: ${http2optionId}`);

  // Create an Axios instance configured for HTTP/2
  // The 'id' in http2Options makes each session configuration unique.
  const axiosInstance = axios.create({
    baseURL: TARGET_URL,
    httpVersion: 2,
    http2Options: {
      // rejectUnauthorized: false, // Uncomment if targeting a local HTTP/2 server with self-signed cert
      id: http2optionId, // This is the attacker-controlled unique part
    },
    // Adding a short timeout to prevent attacker from waiting too long if target is slow
    timeout: 5000 
  });

  try {
    const response = await axiosInstance.get('/');
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end(`Internal HTTP/2 request successful for ID: ${http2optionId}\nStatus: ${response.status}`);
  } catch (error) {
    // Check for the specific error…
Record
GHSA-542g-h47m-68v8
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
NVD 8.2

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
CVE-2026-101901
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/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-400
Updated
2026-11-02
OSV 8.2

Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
CVE-2026-101901
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
Updated
2026-11-02
OSVDEBIAN-CVE-2026-101901 8.2

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
DEBIAN-CVE-2026-101901
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/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-542g-h47m-68v8 8.2

Axios: Denial of Service via Unhandled 'error' Event in HTTP/2 ClientHttp2Session Initialization

Summary

Axios versions with Node.js HTTP/2 support can terminate the caller’s process when a ClientHttp2Session emits an error event that is not handled by axios.

This affects applications that use the Node HTTP adapter with httpVersion: 2. A malicious, unavailable, or non-HTTP/2 endpoint can cause an uncaught exception instead of a normal rejected axios request.

Impact

The impact is denial of service. In affected applications, an attacker who can influence the request destination, or operate the destination server, may be able to crash the Node.js process.

This does not affect default HTTP/1.1 usage, browser XHR/fetch adapters, or applications that do not enable axios HTTP/2 support.

Affected Functionality

Affected path:

  • Node.js HTTP adapter
  • httpVersion: 2
  • HTTP/2 session creation/reuse through Http2Sessions
  • Network/session failures emitted as ClientHttp2Session error events

Caller-controlled http2Options can make the issue easier to trigger, but passing arbitrary attacker input into axios config is caller-controlled behavior and should not be the primary advisory framing.

Technical Details

Http2Sessions.getSession() creates a session with http2.connect(authority, options) but only registers a close handler. It does not register an error handler on the returned ClientHttp2Session.

When the session emits error, Node treats it as an unhandled EventEmitter error and throws. This can bypass the normal axios Promise rejection path and terminate the process.

Proof of Concept of Attack

import axios from './index.js';

await axios.get('http://127.0.0.1:1/', {
  httpVersion: 2,
  timeout: 1000
});

Expected vulnerable behavior: the process exits with an uncaught ECONNREFUSED session error instead of only rejecting the axios request.

Workarounds

Disable axios HTTP/2 for untrusted or user-influenced destinations and use the default HTTP/1.1 adapter until a fixed release is available. Also avoid passing attacker-controlled values into http2Options; axios config is trusted application input.

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

Hi, i'm RelunSec a security researcher working with InsiteTech.jp

i want let you known, i finded a DoS in axios, to reproduce that, that is the example of a server

const http = require('http');
// Import the local axios version to ensure the patch is active
const axios = require('../../lib/axios.js').default; 
const url = require('url');

// A public HTTP/2 server to make internal requests to.
// This simulates an external service your application might interact with over HTTP/2.
const TARGET_URL = 'https://nghttp2.org/'; 
const PORT = 3000;

const server = http.createServer(async (req, res) => {
  const parsedUrl = url.parse(req.url, true);
  const http2optionId = parsedUrl.query.http2optionId;

  if (!http2optionId) {
  console.warn(`[SERVER] Rejected request: Missing http2optionId parameter`);
  res.writeHead(400, { 'Content-Type': 'text/plain' });
  res.end('Error: Missing http2optionId query parameter. Usage: ?http2optionId=value\n');
  return; 
}

  console.log(`[SERVER] Received request with http2optionId: ${http2optionId}`);

  // Create an Axios instance configured for HTTP/2
  // The 'id' in http2Options makes each session configuration unique.
  const axiosInstance = axios.create({
    baseURL: TARGET_URL,
    httpVersion: 2,
    http2Options: {
      // rejectUnauthorized: false, // Uncomment if targeting a local HTTP/2 server with self-signed cert
      id: http2optionId, // This is the attacker-controlled unique part
    },
    // Adding a short timeout to prevent attacker from waiting too long if target is slow
    timeout: 5000 
  });

  try {
    const response = await axiosInstance.get('/');
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end(`Internal HTTP/2 request successful for ID: ${http2optionId}\nStatus: ${response.status}`);
  } catch (error) {
    // Check for the specific error…
Record
GHSA-542g-h47m-68v8
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400
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-101901 8.2

Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Http2Sessions does not install adequate error handling for a ClientHttp2Session during Axios HTTP/2 session initialization or reuse. A request uses httpVersion: 2 and the ClientHttp2Session emits an error during session initialization or reuse. The unhandled session error escapes normal Promise rejection handling. The uncaught error can terminate the Node.js process and cause denial of service. This issue is fixed in version 1.20.0.

Record
UBUNTU-CVE-2026-101901
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/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-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-1792193199 No score

TuxCare security update for axios (4 CVEs)

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

Record
CLSA-2026-1792193199
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-1792447518 No score

TuxCare security update for axios (7 CVEs)

TuxCare rebuilt axios to address 7 CVEs. Fixed in 1.16.1-tuxcare.1.

Record
CLSA-2026-1792447518
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-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
OSVROOT-APP-NPM-CVE-2026-101901 No score

CVE-2026-101901 in axios - Patched by Root

Root has patched CVE-2026-101901 in the axios package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-CVE-2026-101901
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
axios
npm
1.13.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.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 4 CVEs
1.16.0-tuxcare.0 up to 1.16.0-tuxcare.3, plus listed versions
1.16.01.16.0-tuxcare.11.16.0-tuxcare.2
1.16.0-tuxcare.3
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 7 CVEs
1.16.1-tuxcare.0 up to 1.16.1-tuxcare.1, plus listed versions
1.16.1
1.16.1-tuxcare.1
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 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 12 moreShow less
Affected packages
PackageAffectedFixed
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
axios
Root:npm
before 1.18.0-aikido.1
1.18.0-aikido.11.16.1-aikido.51.18.1-aikido.11.19.0-aikido.11.19.0-aikido.21.15.0-aikido.14
@rootio/axios
Root:npm
before 1.18.0-root.io.1
1.18.0-root.io.11.16.1-root.io.51.18.1-root.io.11.19.0-root.io.11.19.0-root.io.21.15.0-root.io.14
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-101901 is a high vulnerability (CVSS 8.2) 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.54%, the 45th 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