CVE-2026-105481 in Node.jsinfo

Summary

by MITRE • 10/23/2026

A flaw in Node.js HTTP Agent connection reuse can cause a client to accept as valid a response that was sent before the client has sent the request. This is an incomplete fix of CVE-2026-48931.

The guard that destroys idle keep-alive sockets when unexpected data arrives only runs when the event loop polls for I/O. If an unsolicited response has already reached the socket but has not been read yet when the socket is handed to a new request, for example because the event loop was busy with synchronous work, the guard is removed without seeing it and the data is parsed as the response to the new request.

This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 10/23/2026

The identified vulnerability represents a critical flaw in the HTTP Agent implementation within specific versions of Node.js, specifically affecting releases 26.x, 24.x, and 22.x. This issue is classified as an incomplete fix for CVE-2026-48931, indicating that previous remediation efforts failed to fully address the underlying race condition or logic error in connection reuse mechanisms. The core of the problem lies in how Node.js manages keep-alive connections and reuses idle sockets for subsequent HTTP requests. In a standard HTTP/1.1 environment using persistent connections, it is common practice to reuse an existing TCP socket for multiple sequential requests to reduce latency and resource overhead. However, this optimization introduces complexity when handling responses that arrive asynchronously relative to the request lifecycle.

The technical flaw stems from a timing discrepancy in how idle sockets are validated before being assigned to new outgoing requests. Node.js employs a guard mechanism designed to destroy keep-alive sockets if unexpected data arrives on them, ensuring that stale or unsolicited responses do not corrupt subsequent transactions. This validation logic is triggered when the event loop polls for input/output activity. The vulnerability arises because this check only executes during I/O polling phases. If an unsolicited response from a previous transaction reaches the socket buffer but has not yet been read by the application, and if the Node.js event loop is concurrently occupied with synchronous work or other high-priority tasks, the guard mechanism may be bypassed. In such scenarios, the socket is handed over to a new request before the stale data can be detected and discarded. Consequently, when the new request sends its headers, the server responds immediately, but instead of waiting for that response, the client parses the previously arrived unsolicited data as if it were the valid response to the current request.

This behavior constitutes a classic case of HTTP Response Splitting or more accurately, an Asynchronous Request Smuggling variant due to connection reuse errors. From a classification perspective, this vulnerability aligns with CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition'). The failure lies in the improper synchronization between the socket state management and the event loop's I/O polling cycle. Furthermore, from an offensive security standpoint, such vulnerabilities are often associated with MITRE ATT&CK technique T1071: Application Layer Protocol, specifically within sub-techniques involving HTTP traffic manipulation or smuggling. Attackers can exploit this race condition to perform request smuggling attacks, where they inject malicious payloads into the response stream intended for another user or service. This could lead to severe operational impacts including cross-site scripting if the injected content is rendered by a browser, cache poisoning which corruptes shared resources like CDNs or reverse proxies, and unauthorized access to sensitive data that was part of the unsolicited prior transaction.

The impact extends beyond simple data leakage. By manipulating the response parsing logic, an attacker can desynchronize the client-server communication state. This allows for session hijacking if authentication tokens are present in the misinterpreted responses, or it can be used to bypass access controls by tricking intermediaries into processing requests as authenticated users. In high-throughput environments where connection pooling is heavily utilized, this vulnerability becomes particularly dangerous because the probability of a socket being reused while stale data remains unread increases significantly under load conditions that cause event loop contention.

Mitigation strategies must focus on both immediate patching and architectural adjustments until updates are applied. The primary remediation is to upgrade Node.js to versions where CVE-2026-48931 has been fully resolved, ensuring the guard mechanism correctly handles unsolicited data regardless of event loop state. For environments unable to immediately update, developers should consider disabling HTTP keep-alive connections by setting the Connection header to close or configuring the Agent with a maxSockets limit that encourages frequent socket turnover rather than reuse. Additionally, implementing strict validation on incoming responses at the application layer can help detect anomalies in response timing or content structure that deviate from expected patterns for specific request types. Monitoring network traffic for unusual latency spikes or mismatched transaction IDs may also aid in detecting active exploitation attempts of this race condition.

Responsible

Hackerone

Reservation

10/05/2026

Disclosure

10/23/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

low

Sources

Do you need the next level of professionalism?

Upgrade your account now!