undici
Ecosystem: npm
Downloads: 1.02 Bln
- 0CriticalAffects 0 versions
- 18HighAffects 36 versions
- 0MediumAffects 0 versions
- 25ModerateAffects 52 versions
- 12LowAffects 25 versions
- Critical0 (0.0%)
- High18 (32.7%)
- Medium0 (0.0%)
- Moderate25 (45.5%)
- Low12 (21.8%)
Monthly breakdown
- Critical
- High
- Medium
- Moderate
- Low
- 9 vulnerabilities
- Critical: 0
- High: 5
- Medium: 0
- Moderate: 4
- Low: 0
- 11 vulnerabilities
- Critical: 0
- High: 3
- Medium: 0
- Moderate: 5
- Low: 3
- 5 vulnerabilities
- Critical: 0
- High: 1
- Medium: 0
- Moderate: 4
- Low: 0
- 8 vulnerabilities
- Critical: 0
- High: 4
- Medium: 0
- Moderate: 2
- Low: 2
- 6 vulnerabilities
- Critical: 0
- High: 3
- Medium: 0
- Moderate: 3
- Low: 0
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 0
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 0
- Low: 1
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 0
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 0
- Low: 1
- 2 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 0
- Low: 2
- 2 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 1
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 0
- Low: 1
- 2 vulnerabilities
- Critical: 0
- High: 1
- Medium: 0
- Moderate: 1
- Low: 0
- 2 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 2
- Low: 0
- 2 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 1
- 1 vulnerabilities
- Critical: 0
- High: 1
- Medium: 0
- Moderate: 0
- Low: 0
Vulnerabilities (55)
Known vulnerabilities affecting undici, based on data from OSV.
| ID | Severity | Summary | Affected versions | Published | Source |
|---|---|---|---|---|---|
| GHSA-2m5v-pch6-74hx | High | undici vulnerable to TLS certificate validation bypass via dropped tls options in Agent### Impact undici's `Agent` passes its constructor options through a JSON-based deep clone (`JSON.parse(JSON.stringify(...))`) before forwarding them to each per-origin `Pool`. JSON cannot represent functions, so a caller-supplied `tls` option containing a `checkServerIdentity` callback is silently dropped before it reaches the TLS layer. As a result, a TLS peer whose certificate a custom `checkServerIdentity` was written to reject, but which passes Node's default hostname and chain checks, is silently accepted when the request is made through `Agent`. Because `Agent` is the default dispatche |
| GitHub (opens in a new tab) | |
| GHSA-4w7w-5xrc-9h26 | High | undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects### Impact When an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin. An attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the sh |
| GitHub (opens in a new tab) | |
| GHSA-55wc-3pg8-jfw6 | Moderate | undici vulnerable to Denial of Service via unhandled exception in the decompress interceptor## Impact undici's `decompress` interceptor forwards decompressed response data to the downstream handler from zlib stream event callbacks without catching exceptions those callbacks may throw. undici's engine converts a synchronous throw from a downstream handler into a per-request failure, but that protection is not in place when the throw happens asynchronously from a zlib callback. As a result, a downstream handler that throws by design, for example the built-in `dump` interceptor which throws when a response exceeds its `maxSize`, escapes as an uncaught exception and terminates the Node. |
| GitHub (opens in a new tab) | |
| GHSA-9fm3-97px-rjf6 | Moderate | undici WebSocket client vulnerable to Denial of Service via unbounded automatic PONG buffering### Impact undici's WebSocket client (including Node.js's bundled `globalThis.WebSocket`) can be driven to exhaust process memory by a malicious or compromised WebSocket server. For every PING frame received, the receiver automatically writes a PONG response to the socket and ignores the `false` return value from `socket.write()`, which is a backpressure signal, so a server that streams small PING frames while never reading the client's PONGs makes the outbound write queue and heap grow without bound until the Node.js process runs out of memory and terminates. The attack is remote and unauthe |
| GitHub (opens in a new tab) | |
| GHSA-qq8j-7v2v-3rwp | High | undici WebSocket client vulnerable to Denial of Service via failed HTTP/2 handshake### Impact undici's experimental WebSocket client (enabled by default via `allowH2: true`) crashes the Node.js process when it connects to a malicious server over HTTP/2. If the server answers the WebSocket upgrade with a response that fails handshake validation, undici aborts the request, but the abort is a no-op because the request is already marked completed, so the underlying `ClientHttp2Stream` is left open with no error listener. When the server then destroys the connection, the orphaned stream emits an unhandled `error` and the process exits. A remote, unauthenticated server can theref |
| GitHub (opens in a new tab) | |
| GHSA-qrxm-fqhp-jwvm | High | undici vulnerable to Denial of Service via TLS 1.2 certificate-changing renegotiation## Impact undici crashes the client process when a TLS 1.2 server renegotiates after the connection is established and presents a different, CA-trusted certificate whose hostname does not match the requested host. Node.js re-runs hostname verification on the renegotiated handshake and destroys the socket with `ERR_TLS_CERT_ALTNAME_INVALID`. undici's established socket error handler asserted that this error code could never occur, so the peer-controlled error became an uncaught `AssertionError` that terminates the Node.js process. Both the HTTP/1.1 and HTTP/2 paths are affected. A malicious o |
| GitHub (opens in a new tab) | |
| GHSA-4qv8-2p9j-2685 | Moderate | undici vulnerable to Denial of Service via unbounded memory in the EventSource parser### Impact undici's `EventSource` client can be driven to exhaust process memory by a malicious or compromised Server-Sent Events peer. By sending millions of tiny completed `data:` fields with no blank event separator, or a single unfinished line split across many chunks, the parser retains a growing amount of per-field and per-chunk state. The byte-based `maxEventSize` and `maxResponseSize` limits do not bound that retained state, and `maxResponseSize` is enforced on the compressed body before decompression, so a small compressed response can expand into enough retained memory to terminate |
| GitHub (opens in a new tab) | |
| GHSA-f72v-6w45-q472 | Moderate | undici vulnerable to Subresource Integrity bypass via non-lowercase algorithm tokens### Impact undici's `fetch()` verifies Subresource Integrity (SRI) metadata by looking up the algorithm token in a lowercase-only set, but the SRI specification defines a valid token by its ASCII-lowercase form. A correct but non-lowercase token such as `SHA256-...` or `Sha256-...` is therefore treated as unknown and skipped. When no recognized algorithm remains, undici treats the integrity list as empty and accepts the response, so a server that returns a body different from the pinned digest passes the check. An application that pins a response with a valid uppercase or mixed-case SRI toke |
| GitHub (opens in a new tab) | |
| GHSA-xjj6-f33q-929c | High | undici vulnerable to Denial of Service via unhandled error on excessive content-encodings### Impact undici's `fetch()` crashes the Node.js process when a malicious server returns a response with more than five content codings and closes the connection before sending the body. undici rejects such responses (a content-encoding limit), but it created the internal response stream before that check and returned without attaching an error listener or aborting the request. The early close then surfaces a content-length mismatch on that orphaned internal stream, which Node.js treats as an unhandled `error` and terminates the process. A remote, unauthenticated server can trigger this with |
| GitHub (opens in a new tab) | |
| GHSA-2gqq-gqf2-x968 | Low | undici vulnerable to response truncation via oversized chunked responses in the dump interceptor### Impact undici's `interceptors.dump()` reads and discards response bodies up to a configurable `maxSize`. When a response declares a `Content-Length` that exceeds `maxSize`, the request is aborted cleanly. When a response is sent chunked (no `Content-Length`) and its body exceeds `maxSize`, it is not aborted: the interceptor ends the response early once the accumulated size reaches `maxSize`, and continued delivery from the parser triggers an internal assertion that is caught and turned into a request abort and connection tear-down. The application observes a misleading `200` with an empty |
| GitHub (opens in a new tab) |
- GHSA-2m5v-pch6-74hxHighundici vulnerable to TLS certificate validation bypass via dropped tls options in Agent
>= 4.0.0, < 6.29.1>= 7.0.0, < 7.30.1- +1 more
Affected versions:>= 4.0.0, < 6.29.1>= 7.0.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact undici's `Agent` passes its constructor options through a JSON-based deep clone (`JSON.parse(JSON.stringify(...))`) before forwarding them to each per-origin `Pool`. JSON cannot represent functions, so a caller-supplied `tls` option containing a `checkServerIdentity` callback is silently dropped before it reaches the TLS layer. As a result, a TLS peer whose certificate a custom `checkServerIdentity` was written to reject, but which passes Node's default hostname and chain checks, is silently accepted when the request is made through `Agent`. Because `Agent` is the default dispatche
CVE: CVE-2026-109383
- GHSA-4w7w-5xrc-9h26Highundici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects
>= 7.0.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact When an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin. An attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the sh
CVE: CVE-2026-109829
- GHSA-55wc-3pg8-jfw6Moderateundici vulnerable to Denial of Service via unhandled exception in the decompress interceptor
>= 7.15.0, < 7.30.1>= 8.0.0, < 8.12.2
## Impact undici's `decompress` interceptor forwards decompressed response data to the downstream handler from zlib stream event callbacks without catching exceptions those callbacks may throw. undici's engine converts a synchronous throw from a downstream handler into a per-request failure, but that protection is not in place when the throw happens asynchronously from a zlib callback. As a result, a downstream handler that throws by design, for example the built-in `dump` interceptor which throws when a response exceeds its `maxSize`, escapes as an uncaught exception and terminates the Node.
CVE: CVE-2026-87029
- GHSA-9fm3-97px-rjf6Moderateundici WebSocket client vulnerable to Denial of Service via unbounded automatic PONG buffering
>= 5.15.0, < 6.29.1>= 7.0.0, < 7.30.1- +1 more
Affected versions:>= 5.15.0, < 6.29.1>= 7.0.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact undici's WebSocket client (including Node.js's bundled `globalThis.WebSocket`) can be driven to exhaust process memory by a malicious or compromised WebSocket server. For every PING frame received, the receiver automatically writes a PONG response to the socket and ignores the `false` return value from `socket.write()`, which is a backpressure signal, so a server that streams small PING frames while never reading the client's PONGs makes the outbound write queue and heap grow without bound until the Node.js process runs out of memory and terminates. The attack is remote and unauthe
CVE: CVE-2026-109932
- GHSA-qq8j-7v2v-3rwpHighundici WebSocket client vulnerable to Denial of Service via failed HTTP/2 handshake
>= 8.11.0, < 8.11.2
### Impact undici's experimental WebSocket client (enabled by default via `allowH2: true`) crashes the Node.js process when it connects to a malicious server over HTTP/2. If the server answers the WebSocket upgrade with a response that fails handshake validation, undici aborts the request, but the abort is a no-op because the request is already marked completed, so the underlying `ClientHttp2Stream` is left open with no error listener. When the server then destroys the connection, the orphaned stream emits an unhandled `error` and the process exits. A remote, unauthenticated server can theref
CVE: CVE-2026-109855
- GHSA-qrxm-fqhp-jwvmHighundici vulnerable to Denial of Service via TLS 1.2 certificate-changing renegotiation
>= 4.2.1, < 6.29.1>= 7.0.0, < 7.30.1- +1 more
Affected versions:>= 4.2.1, < 6.29.1>= 7.0.0, < 7.30.1>= 8.0.0, < 8.12.2
## Impact undici crashes the client process when a TLS 1.2 server renegotiates after the connection is established and presents a different, CA-trusted certificate whose hostname does not match the requested host. Node.js re-runs hostname verification on the renegotiated handshake and destroys the socket with `ERR_TLS_CERT_ALTNAME_INVALID`. undici's established socket error handler asserted that this error code could never occur, so the peer-controlled error became an uncaught `AssertionError` that terminates the Node.js process. Both the HTTP/1.1 and HTTP/2 paths are affected. A malicious o
CVE: CVE-2026-87018
- GHSA-4qv8-2p9j-2685Moderateundici vulnerable to Denial of Service via unbounded memory in the EventSource parser
>= 6.5.0, < 6.29.1>= 7.0.0, < 7.30.1- +1 more
Affected versions:>= 6.5.0, < 6.29.1>= 7.0.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact undici's `EventSource` client can be driven to exhaust process memory by a malicious or compromised Server-Sent Events peer. By sending millions of tiny completed `data:` fields with no blank event separator, or a single unfinished line split across many chunks, the parser retains a growing amount of per-field and per-chunk state. The byte-based `maxEventSize` and `maxResponseSize` limits do not bound that retained state, and `maxResponseSize` is enforced on the compressed body before decompression, so a small compressed response can expand into enough retained memory to terminate
CVE: CVE-2026-109924
- GHSA-f72v-6w45-q472Moderateundici vulnerable to Subresource Integrity bypass via non-lowercase algorithm tokens
>= 7.15.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact undici's `fetch()` verifies Subresource Integrity (SRI) metadata by looking up the algorithm token in a lowercase-only set, but the SRI specification defines a valid token by its ASCII-lowercase form. A correct but non-lowercase token such as `SHA256-...` or `Sha256-...` is therefore treated as unknown and skipped. When no recognized algorithm remains, undici treats the integrity list as empty and accepts the response, so a server that returns a body different from the pinned digest passes the check. An application that pins a response with a valid uppercase or mixed-case SRI toke
CVE: CVE-2026-109841
- GHSA-xjj6-f33q-929cHighundici vulnerable to Denial of Service via unhandled error on excessive content-encodings
>= 6.23.0, < 6.29.1>= 7.18.0, < 7.30.1- +1 more
Affected versions:>= 6.23.0, < 6.29.1>= 7.18.0, < 7.30.1>= 8.0.0, < 8.12.2
### Impact undici's `fetch()` crashes the Node.js process when a malicious server returns a response with more than five content codings and closes the connection before sending the body. undici rejects such responses (a content-encoding limit), but it created the internal response stream before that check and returned without attaching an error listener or aborting the request. The early close then surfaces a content-length mismatch on that orphaned internal stream, which Node.js treats as an unhandled `error` and terminates the process. A remote, unauthenticated server can trigger this with
CVE: CVE-2026-109869
- GHSA-2gqq-gqf2-x968Lowundici vulnerable to response truncation via oversized chunked responses in the dump interceptor
>= 7.1.0, < 7.29.1>= 8.0.0, < 8.10.2
### Impact undici's `interceptors.dump()` reads and discards response bodies up to a configurable `maxSize`. When a response declares a `Content-Length` that exceeds `maxSize`, the request is aborted cleanly. When a response is sent chunked (no `Content-Length`) and its body exceeds `maxSize`, it is not aborted: the interceptor ends the response early once the accumulated size reaches `maxSize`, and continued delivery from the parser triggers an internal assertion that is caught and turned into a request abort and connection tear-down. The application observes a misleading `200` with an empty
CVE: CVE-2026-84947