Skip to main content

undici CVE-2026-18149

| EUVDEUVD-2026-71617 MEDIUM
Missing Release of Resource after Effective Lifetime (CWE-772)
2026-09-04 openjs GHSA-pmjh-fq2x-6v4x
5.9
CVSS 3.1 · Vendor: openjs
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Attacker controls upstream HTTP server
  2. Delivery
    Target app issues retried undici request to attacker server
  3. Exploit
    Server returns partial 2xx body with Content-Length
  4. Install
    Retry handler fires, server returns 400 non-retryable status
  5. C2
    Original response body stream orphaned, timeout bypassed
  6. Execute
    Repeated requests accumulate unreleased streams
  7. Impact
    Application concurrency/memory exhausted

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup on lifecycle end
Exploitation Conditions

The target application must use undici versions 7.11.0-<7.29.1 or 8.0.0-<8.10.2 with the retry handler active - the vulnerability is not triggered by direct (non-retried) requests. The attacker must control, compromise, or man-in-the-middle the HTTP server that the undici client is connecting to; exploitation is not possible against servers the attacker does not control. The server must be capable of issuing two crafted responses in sequence: a partial 2xx with Content-Length and a subsequent non-retryable status (e.g., 400). No client-side authentication, user interaction, or special client configuration is required beyond retry being enabled. Exploitation is limited to the Node.js server/service process running the vulnerable undici version; it does not affect other systems or users of the same service except through availability degradation.

Impact

The CVSS 5.9 score with vector AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H reflects the most important constraint: the attack requires an attacker-controlled (or MITM'd) server, which constitutes a non-trivial precondition that elevates AC to H and keeps this from being a generic internet-facing risk. Real-world risk is therefore concentrated in applications that fetch data from untrusted or third-party servers using undici with retry handlers. No CISA KEV listing and no public proof-of-concept exploit are known at time of analysis, and EPSS data is not provided - the vulnerability has no known active exploitation. However, the attack is mechanically simple (two short crafted HTTP responses suffice), and affected versions span both stable release trains (7.x and 8.x) of a core Node.js ecosystem library, increasing the realistic exposure surface. The availability impact is genuine: unbounded accumulation of pending promises and unfreed stream objects can crash or hang long-running Node.js services. The 'Information Disclosure' tag in the source metadata is incorrect - there is no confidentiality impact; this is a pure availability/DoS issue.

Exploit ScenarioDerived

An attacker operates an HTTP server that a target Node.js application (using undici with retry enabled) connects to - for example, a third-party API endpoint or an upstream service in a proxy chain. The malicious server sends a 200 response declaring Content-Length but delivers only a partial body before closing the connection; undici's retry handler retries and the server responds with a 400. The original body stream is orphaned in the application process, and the attacker repeats this pattern rapidly across concurrent requests to accumulate unreleased streams and pending promises until the Node.js event loop stalls or the process runs out of memory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 04, 2026

Resource exhaustion in undici's retry handler (versions 7.11.0-<7.29.1 and 8.0.0-<8.10.2) allows an attacker-controlled HTTP server to permanently orphan response body streams, accumulating unreleased promises and memory until application concurrency or heap is exhausted. The flaw arises when a server sends a truncated response body (with Content-Length declared), triggering a retry that returns a non-retryable status code - causing the original body stream to be abandoned without being ended or destroyed, and bypassing the body timeout because the timer is coupled to the connection parser rather than the orphaned stream. No public exploit has been identified at time of analysis, but the attack requires only two crafted HTTP responses and no persistent connection, making automated triggering straightforward against applications that use undici with retry logic enabled.

RemediationAI

Upgrade undici to version 7.29.1 (for 7.x users) or 8.10.2 (for 8.x users), as confirmed by the OpenJS Foundation advisory at https://github.com/nodejs/undici/security/advisories/GHSA-pmjh-fq2x-6v4x. If upgrading is not immediately possible, the most effective compensating control is to disable or bypass undici's retry handler for requests directed at untrusted or third-party servers, since the vulnerability is only triggered through the retry handler path. Restricting the application so that undici only contacts known-trusted servers (e.g., via allow-listing outbound HTTP endpoints at the network or application layer) significantly reduces exposure, since an attacker-controlled server is required to trigger the flaw. Setting explicit abort timeouts at the application level (AbortController with setTimeout) on response body reads can prevent indefinite hangs as a defensive measure, though it does not prevent stream/memory accumulation from repeated requests. There are no known side effects to the version upgrades.

Affected VersionsENISA

undici 7.11.0 <7.29.1
undici 8.0.0 <8.10.2

Affected Packages

npm undici fix: 7.29.1, 8.10.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

undici is the high-performance HTTP/1.1 client that underlies Node.js's native fetch() implementation (since Node.js 18) and is widely used directly as a dependency. The affected component is the retry handler (introduced or refactored around v7.11.0). CWE-772 (Missing Release of Resource after Effective Lifetime) applies: when the retry handler replaces its internal response stream reference with the new retry's response, it loses the reference to the original response body stream already handed to the caller, which is never signaled as ended, destroyed, or errored. Because the body timeout is bound to the underlying TCP connection parser rather than the application-layer stream, it does not fire once the connection closes, leaving the stream - and any awaiting Promise - permanently pending. Repeated requests create an unbounded accumulation of pending microtasks and stream handles. The CPE cpe:2.3:a:undici:undici:*:*:*:*:*:*:*:* covers all versions; the specific affected ranges are constrained in the advisory.

Know when Undici gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (openjs) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.9 MEDIUM

Attacker must control the remote server (AC:H); no auth, interaction, or confidentiality/integrity impact; pure availability exhaustion.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE MEDIUM
Red Hat 5.9 MEDIUM

Primary rating from Vendor (openjs).

CVSS VectorVendor: openjs

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
Patch available
Sep 04, 2026 - 19:18 EUVD
CVE Published
Sep 04, 2026 - 17:21 cve.org
MEDIUM 5.9

DescriptionCVE.org

undici's retry handler can leave an already-exposed response body pending forever. When a server returns a successful response that declares a Content-Length, sends only part of the body, and closes the connection, the retry handler retries the request. If the retry returns a non-retryable status such as 400, the handler forwards that new response downstream and replaces its internal response stream, but the original response body that the application still holds is never ended or destroyed. As a result calls that read that body never settle, and the configured body timeout does not fire because its timer is tied to the connection parser rather than the orphaned body. An attacker-controlled server can trigger this with two short responses without keeping a connection open, and repeated requests accumulate pending promises and streams that can exhaust application concurrency or memory. This affects undici versions from 7.11.0 up to 7.29.1 and from 8.0.0 up to 8.10.2. Users should upgrade to undici 7.29.1 or 8.10.2.

Threat Intelligence Overview

EPSS Score
0.3%
Top 77% exploitable
Prevalence
High
core Node.js fetch() backend, widely used in server-side JS
Threat Intel
1
1 sources
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC Vendor CIRCL GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Undici

View all
CVE-2022-35949 CRITICAL POC
9.8 Aug 12

undici is an HTTP/1.1 client, written from scratch for Node.js.`undici` is vulnerable to SSRF (Server-side Request Forge

CVE-2026-12151 HIGH POC
7.5 Jun 17

Memory exhaustion denial of service in the undici WebSocket client (versions 6.17.0 and later) allows a malicious or com

CVE-2026-14643 HIGH POC
7.5 Jul 29

Cross-user information disclosure in undici's cache interceptor allows authenticated users' responses to be served from

CVE-2026-16729 MEDIUM POC
6.5 Jul 29

Cookie attribute injection in undici's setCookie function allows attacker-controlled domain values or unparsed array ent

CVE-2022-31151 MEDIUM POC
6.5 Jul 21

Authorization headers are cleared on cross-origin redirect. Rated medium severity (CVSS 6.5), this vulnerability is remo

CVE-2022-32210 MEDIUM POC
6.5 Jul 14

`Undici.ProxyAgent` never verifies the remote server's certificate, and always exposes all request & response data to th

CVE-2026-15157 MEDIUM POC
5.4 Jul 29

CRLF injection in undici's HTTP/1.1 dispatcher enables HTTP header injection and potential request smuggling when applic

CVE-2023-23936 MEDIUM POC
5.4 Feb 16

Undici is an HTTP/1.1 client for Node.js. Rated medium severity (CVSS 5.4), this vulnerability is remotely exploitable,

CVE-2022-35948 MEDIUM POC
5.3 Aug 15

undici is an HTTP/1.1 client, written from scratch for Node.js.`=< undici@5.8.0` users are vulnerable to _CRLF Injection

CVE-2026-13697 CRITICAL
9.1 Jul 29

Cross-user information disclosure and a parse-time denial of service in undici's HTTP cache interceptor affect versions

CVE-2026-109383 CRITICAL POC
9.1 Oct 15

Certificate pinning and custom TLS identity checks can be silently bypassed in undici versions 4.0.0 through 6.29.0, 7.0

CVE-2026-109829 CRITICAL POC
9.1 Oct 15

Persistent cache poisoning and disclosure of user-specific responses affect undici 7.0.0 through 7.30.0 and 8.0.0 throug

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise High Performance Computing 12 Not-Affected
SUSE Linux Enterprise Module for Web and Scripting 15 SP7 Not-Affected
SUSE Linux Enterprise Module for Web and Scripting 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Not-Affected
SUSE Linux Enterprise Server 15 SP7 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy