CVE-2026-39865
Axios HTTP/2 Session Cleanup State Corruption Vulnerability
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
5.9
Axios HTTP/2 Session Cleanup State Corruption Vulnerability
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-662
- Updated
- 2026-11-02
EUVDEUVD-2026-20501
5.9
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
EUVD-2026-20501- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-qj83-cq47-w5f8
5.9
Axios HTTP/2 Session Cleanup State Corruption Vulnerability
Summary
Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. This denial-of-service vulnerability affects axios versions prior to 1.13.2 when HTTP/2 is enabled.
Details
The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array.
Vulnerable Code:
while (i--) {
if (entries[i][0] === session) {
entries.splice(i, 1);
if (len === 1) {
delete this.sessions[authority];
return;
}
}
}
Root Cause:
After calling entries.splice(i, 1) to remove a session, the original code only returned early if len === 1. For arrays with multiple entries, the iteration continued after modifying the array, causing undefined behavior and potential crashes when accessing shifted array indices.
Fixed Code:
while (i--) {
if (entries[i][0] === session) {
if (len === 1) {
delete this.sessions[authority];
} else {
entries.splice(i, 1);
}
return;
}
}
The fix restructures the control flow to immediately return after removing a session, regardless of whether the array is being emptied or just having one element removed. This prevents continued iteration over a modified array and eliminates the state corruption vulnerability.
Affected Component:
lib/adapters/http.js- Http2Sessions class, session cleanup in connection close handler
PoC
- Set up a malicious HTTP/2 server that accepts multiple concurrent connections from an axios client
- Establish multiple concurrent HTTP/2 sessions with the axios client
- Close all sessions simultaneously with precise timing
- The flawed cleanup logic attempts to iterate over and modify the sessions array concurrently
- This causes the client to access invalid memory locations, resulting in a process crash
Prerequisites:
- Client must use axios with HTTP/2 enabled
- Client must connect to attacker-controlled HTTP/2 server
- Multiple concurrent HTTP/2 sessions must be established
- Server must close all sessions simultaneously with precise timing
Impact
Who is impacted:
- Applications using axios with HTTP/2 enabled
- Applications connecting to untrusted or attacker-controlled HTTP/2 servers
- Node.js applications using axios for HTTP/2 requests
Impact Details:
- Denial of Service: Malicious server can crash the axios client process by accepting and closing multiple concurrent HTTP/2 connections simultaneously
- Availability Impact: Complete loss of availability for the client process through crash (though service may auto-restart)
- Scope: Impact is limited to the single client process making the requests; does not escape to affect other components or systems
- No Confidentiality or Integrity Impact: Vulnerability only causes process crash, no information disclosure or data modification
CVSS Score: 5.9 (Medium) CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CWE Classifications:
- CWE-400: Uncontrolled Resource Consumption
- CWE-662: Improper Synchronization
- Record
GHSA-qj83-cq47-w5f8- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
NVD
5.9
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-662
- Updated
- 2026-11-02
OSV
5.9
Axios HTTP/2 Session Cleanup State Corruption Vulnerability
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-662
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-39865
5.9
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
DEBIAN-CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVGHSA-qj83-cq47-w5f8
5.9
Axios HTTP/2 Session Cleanup State Corruption Vulnerability
Summary
Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. This denial-of-service vulnerability affects axios versions prior to 1.13.2 when HTTP/2 is enabled.
Details
The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array.
Vulnerable Code:
while (i--) {
if (entries[i][0] === session) {
entries.splice(i, 1);
if (len === 1) {
delete this.sessions[authority];
return;
}
}
}
Root Cause:
After calling entries.splice(i, 1) to remove a session, the original code only returned early if len === 1. For arrays with multiple entries, the iteration continued after modifying the array, causing undefined behavior and potential crashes when accessing shifted array indices.
Fixed Code:
while (i--) {
if (entries[i][0] === session) {
if (len === 1) {
delete this.sessions[authority];
} else {
entries.splice(i, 1);
}
return;
}
}
The fix restructures the control flow to immediately return after removing a session, regardless of whether the array is being emptied or just having one element removed. This prevents continued iteration over a modified array and eliminates the state corruption vulnerability.
Affected Component:
lib/adapters/http.js- Http2Sessions class, session cleanup in connection close handler
PoC
- Set up a malicious HTTP/2 server that accepts multiple concurrent connections from an axios client
- Establish multiple concurrent HTTP/2 sessions with the axios client
- Close all sessions simultaneously with precise timing
- The flawed cleanup logic attempts to iterate over and modify the sessions array concurrently
- This causes the client to access invalid memory locations, resulting in a process crash
Prerequisites:
- Client must use axios with HTTP/2 enabled
- Client must connect to attacker-controlled HTTP/2 server
- Multiple concurrent HTTP/2 sessions must be established
- Server must close all sessions simultaneously with precise timing
Impact
Who is impacted:
- Applications using axios with HTTP/2 enabled
- Applications connecting to untrusted or attacker-controlled HTTP/2 servers
- Node.js applications using axios for HTTP/2 requests
Impact Details:
- Denial of Service: Malicious server can crash the axios client process by accepting and closing multiple concurrent HTTP/2 connections simultaneously
- Availability Impact: Complete loss of availability for the client process through crash (though service may auto-restart)
- Scope: Impact is limited to the single client process making the requests; does not escape to affect other components or systems
- No Confidentiality or Integrity Impact: Vulnerability only causes process crash, no information disclosure or data modification
CVSS Score: 5.9 (Medium) CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CWE Classifications:
- CWE-400: Uncontrolled Resource Consumption
- CWE-662: Improper Synchronization
- Record
GHSA-qj83-cq47-w5f8- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-39865
5.9
CVE-2026-39865 in axios - Patched by Root
Root has patched CVE-2026-39865 in the axios package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-06
OSVUBUNTU-CVE-2026-39865
5.9
Axios is a promise based HTTP client for the browser and Node.js. Starting in version 1.13.0 and prior to 1.13.2, Axios HTTP/2 session cleanup logic contains a state corruption bug that allows a malicious server to crash the client process through concurrent session closures. The vulnerability exists in the Http2Sessions.getSession() method in lib/adapters/http.js. The session cleanup logic contains a control flow error when removing sessions from the sessions array. This vulnerability is fixed in 1.13.2.
- Record
UBUNTU-CVE-2026-39865- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
axiosnpm |
1.13.0 up to 1.13.2 | 1.13.2 |
node-axiosDebian:12 |
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 17 moreShow less1.15.0-11.15.2-11.16.0-11.18.0-11.19.0-11.2.1+dfsg-11.2.1+dfsg-1+deb12u11.20.0-11.5.1+dfsg-11.6.2+dfsg-11.6.8+dfsg-11.6.8+dfsg-21.7.3+dfsg-11.7.4+dfsg-11.7.7+dfsg-11.7.9+dfsg-11.8.4+dfsg-1 |
None known |
node-axiosDebian: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 less1.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-axiosDebian:14 |
before 1.13.2+dfsg-1, plus listed versions 1.11.0+dfsg-11.12.1+dfsg-11.13.1+dfsg-11.8.4+dfsg-1 |
1.13.2+dfsg-1 |
axiosRoot:npm |
before 1.12.1-aikido.7 | 1.12.1-aikido.71.12.1-aikido.81.12.1-aikido.91.12.1-aikido.101.8.4-aikido.51.7.9-aikido.71.12.1-aikido.111.12.1-aikido.121.12.1-aikido.131.12.1-aikido.141.12.1-aikido.151.12.1-aikido.161.12.1-aikido.171.12.1-aikido.181.8.4-aikido.61.8.4-aikido.71.8.4-aikido.81.8.4-aikido.91.12.1-aikido.191.12.1-aikido.201.8.4-aikido.101.7.9-aikido.81.7.9-aikido.91.7.9-aikido.101.7.9-aikido.111.8.4-aikido.111.7.9-aikido.121.8.4-aikido.121.7.9-aikido.131.13.2-aikido.71.13.2-aikido.81.13.2-aikido.91.13.2-aikido.101.13.2-aikido.111.13.2-aikido.12 |
@rootio/axiosRoot:npm |
before 1.12.1-root.io.3 | 1.12.1-root.io.31.7.9-root.io.61.8.4-root.io.31.12.1-root.io.41.12.1-root.io.51.12.1-root.io.61.8.4-root.io.41.12.1-root.io.71.12.1-root.io.81.12.1-root.io.91.12.1-root.io.101.8.4-root.io.51.7.9-root.io.71.12.1-root.io.111.12.1-root.io.121.12.1-root.io.131.12.1-root.io.141.12.1-root.io.151.12.1-root.io.161.12.1-root.io.171.12.1-root.io.181.8.4-root.io.61.8.4-root.io.71.8.4-root.io.81.8.4-root.io.91.12.1-root.io.191.12.1-root.io.201.8.4-root.io.101.7.9-root.io.81.7.9-root.io.91.7.9-root.io.101.7.9-root.io.111.8.4-root.io.111.7.9-root.io.121.8.4-root.io.121.7.9-root.io.131.13.2-root.io.11.13.2-root.io.21.13.2-root.io.31.13.2-root.io.41.13.2-root.io.51.13.2-root.io.61.13.2-root.io.71.13.2-root.io.81.13.2-root.io.91.13.2-root.io.101.13.2-root.io.111.13.2-root.io.12 |
node-axiosUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 0.19.0+dfsg-20.19.0+dfsg-2ubuntu0.1~esm1 |
None known |
node-axiosUbuntu: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-axiosUbuntu: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-axiosUbuntu:25.10 |
All versions, plus listed versions 1.7.9+dfsg-11.8.4+dfsg-11.11.0+dfsg-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected, facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-39865 is a medium vulnerability (CVSS 5.9) in Axios, published April 8, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.74%, the 54th percentile. Fixed in axios 1.13.2.
References
github.com/axios/axios/security/advisories/GHSA-qj83-cq47-w5f8
github.com/axios/axios/commit/0588880ac7ddba7594ef179930493884b7e90bf5
github.com/axios/axios/releases/tag/v1.13.2
nvd.nist.gov/vuln/detail/CVE-2026-39865
github.com/advisories/GHSA-qj83-cq47-w5f8
github.com/CVEProject/cvelistV5/tree/main/cves/2026/39xxx/CVE-2026-39865.json