undici
- 8.12.3 is the latest, published 19 October 2026.
- 46 security advisories, all fixed.
- 8.x: 24 releases since 2 April 2026, 19 in the last 90 days.
Security advisories
Grouped by the version that fixes them, so one upgrade reads as one step.
Fixed in 8.10.2 · 11 advisories
- HIGHundici vulnerable to Denial of Service via unrequested WebSocket subprotocolGHSA-rfgv-xxqx-mfg5
- HIGHundici vulnerable to cross-origin cache poisoning via missing origin isolation in interceptorsGHSA-vp8m-p9jh-q5pm
- HIGHundici vulnerable to TLS certificate validation bypass via dropped connect options in BalancedPoolGHSA-w293-vg96-wgc3
8 more
- MODERATEundici vulnerable to cross-user cookie disclosure via Set-Cookie caching in shared cachesGHSA-2jfj-6hjv-fm6j
- MODERATEundici vulnerable to Denial of Service via unhandled error in WebSocket permessage-deflate decompressionGHSA-3wwx-pv8p-q78v
- MODERATEundici vulnerable to Denial of Service via unbounded decompression of compressed responsesGHSA-3xpg-4rpp-hhhm
- MODERATEundici vulnerable to Denial of Service via orphaned RetryHandler response bodyGHSA-pmjh-fq2x-6v4x
- MODERATEundici vulnerable to Denial of Service via WebSocketStream unclean closeGHSA-rx4f-c7p8-82vq
- LOWundici vulnerable to response truncation via oversized chunked responses in the dump interceptorGHSA-2gqq-gqf2-x968
- LOWundici vulnerable to caching and replay of unsafe HTTP method responsesGHSA-8436-99hf-9mmv
- LOWundici vulnerable to downstream response splitting via retry interceptorGHSA-r53p-7pc4-xj5r
Fixed in 8.9.0 · 5 advisories
- HIGHundici vulnerable to cross-user information disclosure and parse-time crash via degenerate private cache directivesGHSA-4cwx-7wf7-3272
- MODERATEundici vulnerable to downstream response desynchronization via retry interceptorGHSA-8xcm-r25x-g524
- MODERATEundici vulnerable to cross-user information disclosure via whitespace around equals in Cache-Control directivesGHSA-jr45-8vmc-qm54
2 more
- MODERATEundici vulnerable to CRLF Injection via blob-like body 'type' propertyGHSA-m8rv-5g2x-5cg5
- MODERATEundici vulnerable to cookie attribute injection via unsanitized domain and unparsed setCookie fieldsGHSA-v3r7-h72x-cjcm
Fixed in 8.5.0 · 7 advisories
- HIGHundici WebSocket client vulnerable to denial of service via cumulative fragment bypassGHSA-38rv-x7px-6hhq
- HIGHundici vulnerable to TLS certificate validation bypass via dropped requestTls in SOCKS5 ProxyAgentGHSA-vmh5-mc38-953g
- HIGHundici WebSocket client vulnerable to denial of service via fragment count bypassGHSA-vxpw-j846-p89q
4 more
- MODERATEundici vulnerable to HTTP header injection via Set-Cookie percent-decodingGHSA-p88m-4jfj-68fv
- MODERATEundici vulnerable to cross-user information disclosure via shared cache whitespace bypassGHSA-pr7r-676h-xcf6
- LOWundici vulnerable to HTTP response queue poisoning via keep-alive socket reuseGHSA-35p6-xmwp-9g52
- LOWundici vulnerable to Set-Cookie SameSite attribute downgrade via permissive substring matchingGHSA-g8m3-5g58-fq7m
Fixed in 8.2.0 · 1 advisory
- HIGHundici vulnerable to cross-origin request routing via SOCKS5 proxy pool reuseGHSA-hm92-r4w5-c3mj
12 older fixes
Fixed in 7.24.0 · 6 advisories
- HIGHUndici: Malicious WebSocket 64-bit length overflows parser and crashes the clientGHSA-f269-vfmq-vjvj
- HIGHUndici has Unhandled Exception in WebSocket Client Due to Invalid server_max_window_bits ValidationGHSA-v9p9-hfj2-hcw8
- HIGHUndici has Unbounded Memory Consumption in WebSocket permessage-deflate DecompressionGHSA-vrm6-8vpv-qv8q
3 more
- MODERATEUndici has an HTTP Request/Response Smuggling issueGHSA-2mjp-6q6p-2qxm
- MODERATEUndici has CRLF Injection in undici via `upgrade` optionGHSA-4992-7rv2-5pvq
- MODERATEUndici has Unbounded Memory Consumption in its DeduplicationHandler via Response Buffering that leads to DoSGHSA-phc3-fgpg-7m6h
Fixed in 7.18.2 · 1 advisory
Fixed in 7.5.0 · 1 advisory
- LOWundici Denial of Service attack via bad certificate dataGHSA-cxrh-j4jr-qwg3
Fixed in 7.2.3 · 1 advisory
- MODERATEUse of Insufficiently Random Values in undiciGHSA-c76h-2ccp-4975
Fixed in 6.19.2 · 1 advisory
- LOWUndici vulnerable to data leak when using response.arrayBuffer()GHSA-3g92-w8c5-73pq
Fixed in 6.11.1 · 2 advisories
Fixed in 6.6.1 · 2 advisories
- MODERATEfetch(url) leads to a memory leak in undiciGHSA-9f24-jqhm-jfcw
- LOWUndici proxy-authorization header not cleared on cross-origin redirect in fetchGHSA-3787-6prv-h9w3
Fixed in 5.26.2 · 1 advisory
- LOWUndici's cookie header not cleared on cross-origin redirect in fetchGHSA-wqq4-5wpv-mx2g
Fixed in 5.19.1 · 2 advisories
- HIGHRegular Expression Denial of Service in HeadersGHSA-r6ch-mqf9-qc9w
- MODERATECRLF Injection in Nodejs ‘undici’ via hostGHSA-5r9g-qh6m-jxff
Fixed in 5.8.2 · 2 advisories
- MODERATE`undici.request` vulnerable to SSRF using absolute URL on `pathname`GHSA-8qr4-xgw6-wmr3
- MODERATENodejs ‘undici’ vulnerable to CRLF Injection via Content-TypeGHSA-f772-66g8-q5h3
Fixed in 5.8.0 · 2 advisories
- MODERATEundici before v5.8.0 vulnerable to CRLF injection in request headersGHSA-3cvr-822r-rqcc
- LOWundici before v5.8.0 vulnerable to uncleared cookies on cross-host / cross-origin redirectGHSA-q768-x9m6-m9qp
Fixed in 5.5.1 · 1 advisory
- HIGHProxyAgent vulnerable to MITMGHSA-pgw7-wx7w-2w33
Releases in the last 90 days
Feed of releases and advisoriesEvery stable release, newest first. Notes are quoted as the maintainers published them.
8.12.3
19 October 2026h2: replace a connection that stops responding after a stream timeout
What's Changed
h2: replace a connection that stops responding after a stream timeout
pool: keep caller async context for queued requests
8.12.2
15 October 2026CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
Security fixes
High severity
Denial of service via TLS 1.2 certificate-changing renegotiation
CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
A malicious or compromised HTTPS server could crash the Node.js process by initiating TLS 1.2 renegotiation and presenting a different, CA-trusted certificate whose hostname did not match the requested host. The resulting socket error reached an assertion in undici's HTTP/1.1 and HTTP/2 connection handling. This release handles post-connect certificate errors without terminating the process.
TLS certificate validation bypass through dropped
AgentoptionsCVE-2026-109383 · GHSA-2m5v-pch6-74hx
Agentused a JSON-based clone for constructor options, which silently removed function-valued TLS options such ascheckServerIdentity. Applications relying on custom certificate or public-key verification could therefore accept a certificate that the callback was intended to reject. This release preserves TLS options when creating per-origin dispatchers.Cache poisoning and cross-user disclosure through cross-origin redirects
CVE-2026-109829 · GHSA-4w7w-5xrc-9h26
When an originless
Agentcombined redirect and shared-cache interceptors ascompose(redirect(), cache()), a response from a cross-origin redirect could be stored under the original URL. This could allow persistent cache poisoning or disclosure of user-specific responses to later callers. This release verifies the response origin before caching and preserves redirect-hop cache-control policy.Denial of service through excessive
Content-EncodingvaluesCVE-2026-109869 · GHSA-xjj6-f33q-929c
A malicious HTTP server could crash the Node.js process by returning more than five content codings and closing the connection before sending the body. Although
fetch()rejected the response, an error from an orphaned internal stream could remain unhandled. This release validates the content-encoding chain before creating the body stream and aborts oversized chains safely.Medium severity
Denial of service through the
decompressinterceptorCVE-2026-87029 · GHSA-55wc-3pg8-jfw6
An exception thrown by a downstream response handler from an asynchronous decompression callback could escape as an uncaught exception. A server could trigger this when
decompresswas composed with a handler such asdumpwith a size limit. This release converts downstream handler exceptions into per-request errors.Subresource Integrity bypass with non-lowercase algorithm tokens
CVE-2026-109841 · GHSA-f72v-6w45-q472
fetch()treated valid mixed-case or uppercase SRI algorithm tokens, such asSHA256, as unknown and could accept a response whose body did not match the configured digest. This release normalizes algorithm tokens before validation and digest selection.Denial of service through unbounded EventSource parser state
CVE-2026-109924 · GHSA-4qv8-2p9j-2685
A malicious Server-Sent Events endpoint could exhaust process memory by sending many tiny
data:fields without completing an event, or by splitting an unfinished line across many chunks. This release bounds retained EventSource parser state, including field counts, buffered chunks, unfinished-line length, and retained field data.Denial of service through unbounded automatic WebSocket PONG buffering
CVE-2026-109932 · GHSA-9fm3-97px-rjf6
A malicious WebSocket server could exhaust process memory by flooding the client with PING frames while not reading the automatic PONG responses. undici previously ignored socket backpressure and allowed the outbound queue to grow without bound. This release pauses frame parsing when PONG writes encounter backpressure and resumes after the socket drains.
6.29.1
15 October 2026CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
Security fixes
High severity
Denial of service via TLS 1.2 certificate-changing renegotiation
CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
A malicious or compromised HTTPS server could crash the Node.js process by initiating TLS 1.2 renegotiation and presenting a different, CA-trusted certificate whose hostname did not match the requested host. The resulting socket error reached an assertion in undici's HTTP/1.1 and HTTP/2 connection handling. This release handles post-connect certificate errors without terminating the process.
TLS certificate validation bypass through dropped
AgentoptionsCVE-2026-109383 · GHSA-2m5v-pch6-74hx
Agentused a JSON-based clone for constructor options, which silently removed function-valued TLS options such ascheckServerIdentity. Applications relying on custom certificate or public-key verification could therefore accept a certificate that the callback was intended to reject. This release preserves TLS options when creating per-origin dispatchers.Denial of service through excessive
Content-EncodingvaluesCVE-2026-109869 · GHSA-xjj6-f33q-929c
A malicious HTTP server could crash the Node.js process by returning more than five content codings and closing the connection before sending the body. Although
fetch()rejected the response, an error from an orphaned internal stream could remain unhandled. This release validates the content-encoding chain before creating the body stream and aborts oversized chains safely.Medium severity
Denial of service through unbounded EventSource parser state
CVE-2026-109924 · GHSA-4qv8-2p9j-2685
A malicious Server-Sent Events endpoint could exhaust process memory by sending many tiny
data:fields without completing an event, or by splitting an unfinished line across many chunks. This release bounds retained EventSource parser state, including field counts, buffered chunks, unfinished-line length, and retained field data.Denial of service through unbounded automatic WebSocket PONG buffering
CVE-2026-109932 · GHSA-9fm3-97px-rjf6
A malicious WebSocket server could exhaust process memory by flooding the client with PING frames while not reading the automatic PONG responses. undici previously ignored socket backpressure and allowed the outbound queue to grow without bound. This release pauses frame parsing when PONG writes encounter backpressure and resumes after the socket drains.
What's Changed
[v6.x] fix(fetch): fix aborting Streams
7.30.1
15 October 2026CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
Security fixes
High severity
Denial of service via TLS 1.2 certificate-changing renegotiation
CVE-2026-87018 · GHSA-qrxm-fqhp-jwvm
A malicious or compromised HTTPS server could crash the Node.js process by initiating TLS 1.2 renegotiation and presenting a different, CA-trusted certificate whose hostname did not match the requested host. The resulting socket error reached an assertion in undici's HTTP/1.1 and HTTP/2 connection handling. This release handles post-connect certificate errors without terminating the process.
TLS certificate validation bypass through dropped
AgentoptionsCVE-2026-109383 · GHSA-2m5v-pch6-74hx
Agentused a JSON-based clone for constructor options, which silently removed function-valued TLS options such ascheckServerIdentity. Applications relying on custom certificate or public-key verification could therefore accept a certificate that the callback was intended to reject. This release preserves TLS options when creating per-origin dispatchers.Cache poisoning and cross-user disclosure through cross-origin redirects
CVE-2026-109829 · GHSA-4w7w-5xrc-9h26
When an originless
Agentcombined redirect and shared-cache interceptors ascompose(redirect(), cache()), a response from a cross-origin redirect could be stored under the original URL. This could allow persistent cache poisoning or disclosure of user-specific responses to later callers. This release verifies the response origin before caching and preserves redirect-hop cache-control policy.Denial of service through excessive
Content-EncodingvaluesCVE-2026-109869 · GHSA-xjj6-f33q-929c
A malicious HTTP server could crash the Node.js process by returning more than five content codings and closing the connection before sending the body. Although
fetch()rejected the response, an error from an orphaned internal stream could remain unhandled. This release validates the content-encoding chain before creating the body stream and aborts oversized chains safely.Medium severity
Denial of service through the
decompressinterceptorCVE-2026-87029 · GHSA-55wc-3pg8-jfw6
An exception thrown by a downstream response handler from an asynchronous decompression callback could escape as an uncaught exception. A server could trigger this when
decompresswas composed with a handler such asdumpwith a size limit. This release converts downstream handler exceptions into per-request errors.Subresource Integrity bypass with non-lowercase algorithm tokens
CVE-2026-109841 · GHSA-f72v-6w45-q472
fetch()treated valid mixed-case or uppercase SRI algorithm tokens, such asSHA256, as unknown and could accept a response whose body did not match the configured digest. This release normalizes algorithm tokens before validation and digest selection.Denial of service through unbounded EventSource parser state
CVE-2026-109924 · GHSA-4qv8-2p9j-2685
A malicious Server-Sent Events endpoint could exhaust process memory by sending many tiny
data:fields without completing an event, or by splitting an unfinished line across many chunks. This release bounds retained EventSource parser state, including field counts, buffered chunks, unfinished-line length, and retained field data.Denial of service through unbounded automatic WebSocket PONG buffering
CVE-2026-109932 · GHSA-9fm3-97px-rjf6
A malicious WebSocket server could exhaust process memory by flooding the client with PING frames while not reading the automatic PONG responses. undici previously ignored socket backpressure and allowed the outbound queue to grow without bound. This release pauses frame parsing when PONG writes encounter backpressure and resumes after the socket drains.
What's Changed
[v7.x] fix(session cache): fix bug in tls session caching
[Backport v7.x] fix: avoid unbounded recursion in Set-Cookie attribute parser
8.12.1
14 October 2026Restore build:wasm npm script
What's Changed
restore build:wasm npm script
8.12.0
14 October 2026cookies: ignore a numeric expires outside the Date range
What's Changed
cookies: ignore a numeric expires outside the Date range
http2: pause bodyTimeout while applying backpressure
cache: track cached response abort state
deduplicate: make terminal callbacks exception-safe
decompress: stop inflating compress and x-compress
cache: evict least recently used entries in MemoryCacheStore
eventsource: fix redirect targets in eventsource
redirect: fix throwOnMaxRedirect edge
normalize HTTP/2 headers for legacy dispatch handlers
session cache: fix bug in tls session caching
redirect: add error code to max redirects error
eventsource: fix retry wrap bug
retry: keep request headers when resuming a download
proxyagent: correct handling of the host header
http1: fix handling of 204/304 responses
cache: preserve 304 response event order with async stores
dns: handle a null pick, and stop failing over to an expired record
keep a header named proto across features
pool: ensure that removed clients don't pick up requests
Added @perseveranza-pets/milo as alternative experimental HTTP parser
extractBody fixes 2
reenable cachestorage wpts
fetch: parse language tag in filename* parameters
client: preserve tracked response header field boundaries
http1: fixup strictContentLength handling
cache: compress big sqlite cache entries with zstd
eventsource: enforce maxEventSize on unterminated lines
limit zstd window size to 8 MB
Wpt/wpt runner fixes
6.29.0
25 September 2026[v6.x] fix(retry): settle exposed body on terminal failure
What's Changed
[v6.x] fix(retry): settle exposed body on terminal failure
Backport upgrade diagnostics lifecycle fixes to v6.x
7.30.0
25 September 2026[Backport v7.x] fix: selectively re-enable SIMD for ppc64
What's Changed
[Backport v7.x] fix: selectively re-enable SIMD for ppc64
Backport upgrade diagnostics lifecycle fixes to v7.x
[Backport v7.x] fix: honor backpressure in decompression interceptor
close rejected HTTP/2 WebSocket streams on v7.x
8.11.2
24 September 2026Close rejected HTTP/2 WebSocket handshake streams
What's Changed
close rejected HTTP/2 WebSocket handshake streams
avoid reconnecting aborted requests
8.11.1
24 September 2026Deslopify websocket test
What's Changed
deslopify websocket test
Revert "fix: preserve HTTP/2 for legacy fetch consumers"
fix websocketstream bugs
fix hang on 3xx response with large body
Show 9 earlier releases
8.11.0
22 September 2026Complete upgrade diagnostics lifecycle
What's Changed
complete upgrade diagnostics lifecycle
decompress: join a repeated content-encoding header
cookies: keep a cookie named proto in getCookies
selectively re-enable SIMD for ppc64
use private fields for brand checks
h2: do not unref a session with open streams
h2: avoid pool fan-out during ALPN negotiation
fix issue #5715
env-http-proxy-agent: NO_PROXY wildcard semantics
h2: do not replay a request whose response already started after GOAWAY
proxy-agent: preserve repeated iterable headers
dataurl parsing improvements + update WPT
decompress: treat inherited Object.prototype names as unsupported encodings
preserve HTTP/2 for non-upgrade legacy requests
skip drain dispatch for clientTtl-evicted clients in PoolBase
deduplicate: settle requests when composed with retry
cache: do not report aborted on successful cache hits
cookies: keep an Expires of 0 when serializing a cookie
honor backpressure in decompression interceptor
h2: validate h2Options.maxConcurrentStreams itself
h2: keep the session ref'd while requests are queued
fix cache.addAll and cache.add hanging
retry: settle responses after connection close
h2: validate response content-length
redirect: ignore informational responses in history
websocket: reset the compressed flag when a message completes
h2: keep queued requests alive when the last stream closes
7.29.1
4 September 2026GHSA-w293-vg96-wgc3: BalancedPool could drop function-valued connection options while cloning its configuration, including custom TLS certificate validation callbacks. Undici now preserves connect and legacy tls options when creating upstreams. Fixed by f690157d.
Security fixes
High severity
- security
GHSA-w293-vg96-wgc3:
BalancedPoolcould drop function-valued connection options while cloning its configuration, including custom TLS certificate validation callbacks. Undici now preservesconnectand legacytlsoptions when creating upstreams. Fixed by f690157d. - security
GHSA-rfgv-xxqx-mfg5: a WebSocket server could select a subprotocol when none was requested, causing an uncaught
TypeErrorthat could terminate the process. Undici now rejects the handshake with protocol error 1002. Fixed by 6615e017.
Medium severity
- security
GHSA-3wwx-pv8p-q78v: a malformed permessage-deflate payload exceeding the configured decompression limit could emit an unhandled zlib error and terminate the process. Undici now destroys the inflater after reaching the limit. Fixed by 63cf698b.
- security
GHSA-rx4f-c7p8-82vq: an unclean
WebSocketStreamclose could create an unobserved rejected promise when its writable stream was locked, potentially terminating the process. Undici now propagates the failure through the retained writable stream controller. Fixed by 1858656e. - security
GHSA-2jfj-6hjv-fm6j: shared caches could store and replay responses containing
Set-Cookie, disclosing one user's cookies to another caller. Undici now excludes these responses from shared caches, including existing entries and revalidation paths. Fixed by b6c5a002. - security
GHSA-3xpg-4rpp-hhhm: the decompression interceptor did not bound decoded output, allowing compressed responses to consume excessive memory. Undici now limits every decompression stage to 64 MiB by default and supports a configurable
maxSize. Fixed by 2c7d7e12. - security
GHSA-pmjh-fq2x-6v4x: a terminal retry failure after response headers were exposed could orphan the original response body, causing consumers to hang indefinitely. Undici now propagates the terminal error to the exposed body. Fixed by 3c672659.
Low severity
- security
GHSA-8436-99hf-9mmv: cache interceptors could store and replay responses to unsafe HTTP methods such as
POSTorDELETE. Undici now restricts cache reads and writes to safe methods while preserving invalidation by successful unsafe requests. Fixed by b61d9432. - security
GHSA-2gqq-gqf2-x968: the dump interceptor could treat an oversized chunked response as successfully truncated when no
Content-Lengthwas present. Undici now enforcesmaxSizeagainst received bytes and aborts oversized responses. Fixed by 21693f40. - security
GHSA-r53p-7pc4-xj5r: the retry interceptor could concatenate a resumed response with inconsistent framing into downstream output, enabling response splitting or corruption. Undici now validates
Content-Rangeagainst the original response framing before resuming. Fixed by cd8af90b.
What's Changed
[v7.x] drop: remove Node.js 26 from shared-builtin CI build
h2: honour headersTimeout
h2: keep the connection ref'd while requests are outstanding
h2: retire the request that completed, not the head of the queue
h2: settle a request whose stream is cancelled
reduce EventSourceStream parser allocations
h2: handle GOAWAY for CONNECT streams
[v7.x] perf(h1): drop idle-socket timer floor with a ref'd setImmediate
- security
6.28.1
4 September 2026GHSA-rfgv-xxqx-mfg5: a WebSocket server could select a subprotocol when none was requested, causing an uncaught TypeError that could terminate the process. Undici now rejects the handshake with protocol error 1002. Fixed by 2af0faf8.
Security fixes
High severity
- security
GHSA-rfgv-xxqx-mfg5: a WebSocket server could select a subprotocol when none was requested, causing an uncaught
TypeErrorthat could terminate the process. Undici now rejects the handshake with protocol error 1002. Fixed by 2af0faf8.
Medium severity
- security
GHSA-3wwx-pv8p-q78v: a malformed permessage-deflate payload exceeding the configured decompression limit could emit an unhandled zlib error and terminate the process. Undici now destroys the inflater after reaching the limit. Fixed by 07c60d9c.
Low severity
- security
GHSA-r53p-7pc4-xj5r: the retry interceptor could concatenate a resumed response with inconsistent framing into downstream output, enabling response splitting or corruption. Undici now validates
Content-Rangeagainst the original response framing before resuming. Fixed by ce31bc82.
What's Changed
reduce EventSourceStream parser allocations
[v6.x] perf(h1): drop idle-socket timer floor with a ref'd setImmediate
- security
8.10.2
4 September 2026GHSA-vp8m-p9jh-q5pm: cache and deduplication interceptors could use caller-controlled request metadata instead of the authoritative dispatcher origin, enabling cross-origin cache poisoning and data disclosure. Undici now derives interceptor identities from the dispatcher origin and bypasses origin-dependent interceptors when no authoritative origin exists. Fixed by caf6194d.
Security fixes
High severity
- security
GHSA-vp8m-p9jh-q5pm: cache and deduplication interceptors could use caller-controlled request metadata instead of the authoritative dispatcher origin, enabling cross-origin cache poisoning and data disclosure. Undici now derives interceptor identities from the dispatcher origin and bypasses origin-dependent interceptors when no authoritative origin exists. Fixed by caf6194d.
- security
GHSA-w293-vg96-wgc3:
BalancedPoolcould drop function-valued connection options while cloning its configuration, including custom TLS certificate validation callbacks. Undici now preservesconnectand legacytlsoptions when creating upstreams. Fixed by 8f5868fb. - security
GHSA-rfgv-xxqx-mfg5: a WebSocket server could select a subprotocol when none was requested, causing an uncaught
TypeErrorthat could terminate the process. Undici now rejects the handshake with protocol error 1002. Fixed by 66e12816.
Medium severity
- security
GHSA-3wwx-pv8p-q78v: a malformed permessage-deflate payload exceeding the configured decompression limit could emit an unhandled zlib error and terminate the process. Undici now destroys the inflater after reaching the limit. Fixed by 4411a238.
- security
GHSA-rx4f-c7p8-82vq: an unclean
WebSocketStreamclose could create an unobserved rejected promise when its writable stream was locked, potentially terminating the process. Undici now propagates the failure through the retained writable stream controller. Fixed by 662d0ea6. - security
GHSA-2jfj-6hjv-fm6j: shared caches could store and replay responses containing
Set-Cookie, disclosing one user's cookies to another caller. Undici now excludes these responses from shared caches, including existing entries and revalidation paths. Fixed by cb75bbb3. - security
GHSA-3xpg-4rpp-hhhm: the decompression interceptor did not bound decoded output, allowing compressed responses to consume excessive memory. Undici now limits every decompression stage to 64 MiB by default and supports a configurable
maxSize. Fixed by 7aac7f12. - security
GHSA-pmjh-fq2x-6v4x: a terminal retry failure after response headers were exposed could orphan the original response body, causing consumers to hang indefinitely. Undici now propagates the terminal error to the exposed body. Fixed by e905b5b8.
Low severity
- security
GHSA-8436-99hf-9mmv: cache interceptors could store and replay responses to unsafe HTTP methods such as
POSTorDELETE. Undici now restricts cache reads and writes to safe methods while preserving invalidation by successful unsafe requests. Fixed by 2be07bf9. - security
GHSA-2gqq-gqf2-x968: the dump interceptor could treat an oversized chunked response as successfully truncated when no
Content-Lengthwas present. Undici now enforcesmaxSizeagainst received bytes and aborts oversized responses. Fixed by 6d583124. - security
GHSA-r53p-7pc4-xj5r: the retry interceptor could concatenate a resumed response with inconsistent framing into downstream output, enabling response splitting or corruption. Undici now validates
Content-Rangeagainst the original response framing before resuming. Fixed by 0160a719.
What's Changed
retry: reject invalid resumed responses
avoid unbounded recursion in Set-Cookie attribute parser
honor SOCKS5 connection timeout
eventsource: validate Last-Event-ID on reconnect
avoid duplicate release attempts
cache: refetch when 304 adds vary fields
types: expose PendingInterceptor and PendingInterceptorsFormatter on the MockAgent namespace
proxy-agent: guard Proxy-Authorization in iterable header containers
websocket: fail the connection on a non-200 h2 extended CONNECT response
retry: forward rawHeaders writes through RetryController
fetch: only send Sec-Fetch-Mode to potentially trustworthy URLs
- security
8.10.1
31 August 2026mock: re-invoke reply callback for persistent mocks
What's Changed
mock: re-invoke reply callback for persistent mocks
preserve MockAgent interceptors for legacy global fetch
propagate dispatcher origin to composed interceptors
limit EventSource event size
retry: honor the retryAfter option in the default retry strategy
interceptor/dump: reject aborted requests when response is smaller than maxSize
test: skip cache-tests when submodule is missing
retry: honor the abort signal during the retry backoff
deduplicate: settle the deduplicated request when it is aborted
accept a negative Set-Cookie Max-Age attribute
h2: honour maxResponseSize
forward onBodySent/onRequestSent through interceptor handlers
h1: drop idle-socket timer floor with a ref'd setImmediate
fetch: skip empty RequestInit work
propagate dispatcher options to base class
env-http-proxy-agent: ignore trailing dots when matching no_proxy
socks5-proxy-agent: destroy socket when negotiation times out
cache: evict entries when a key holds a single entry
h2: forward 1xx informational responses to onInfo
agent: preserve pools with pending GOAWAY replays
8.10.0
3 August 2026Namespace h2 options
What's Changed
namespace h2 options
websocket: support process.unref
h2: ensure every request settles
readable: consume a body whose end has already been emitted
retry: skip the content-length checkpoint for HEAD and for a 206 without content-range
revert idle socket validation to setTimeout(0) to prevent stall on idle event loop
env-http-proxy-agent: match bare IPv6 addresses in no_proxy
readable: keep body bytes that arrive after setEncoding()
socks5: evict unused origin pools
skip deduplication for upgrade requests
retry: forward informational responses
mock: non-string path matchers under ignoreTrailingSlash, and DataView reply bodies
interceptors: cache() and deduplicate() silently inert on Client/Pool without opts.origin
mock: emit request body lifecycle hooks
h2: detach upgrade close handler after GOAWAY
retry refused HTTP/2 streams
preserve DNS origin hostname on sockets
6.28.0
24 July 2026GHSA-m8rv-5g2x-5cg5: a malicious type property on a duck-typed blob-like HTTP/1.1 request body could inject CRLF sequences into the generated content-type header. Undici now coerces and validates the value before adding it to the request. Fixed by 740a0b7c.
Security fixes
- security
GHSA-m8rv-5g2x-5cg5: a malicious
typeproperty on a duck-typed blob-like HTTP/1.1 request body could inject CRLF sequences into the generatedcontent-typeheader. Undici now coerces and validates the value before adding it to the request. Fixed by 740a0b7c. - security
GHSA-8xcm-r25x-g524: the retry interceptor could expose a stale
Content-Lengthafter resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whoseContent-Lengthis inconsistent withContent-Range. Fixed by cba3a52a, with corrected fixtures in 4fd5a0c6. - security
GHSA-v3r7-h72x-cjcm: unsanitized
domainandunparsedvalues passed tosetCookie()could inject cookie attributes. Undici now validates cookie domains, paths, and unparsed attributes more strictly. Fixed by af748404.
GHSA-4cwx-7wf7-3272 and GHSA-jr45-8vmc-qm54 affect the cache interceptor in Undici v7 and v8; Undici v6 is not in their affected version ranges.
- security
7.29.0
24 July 2026GHSA-4cwx-7wf7-3272: malformed qualified private Cache-Control directives could cause cross-user information disclosure in shared caches or a parse-time crash. The cache parser now treats empty qualified directives conservatively and safely handles mixed qualified and unqualified directives. Fixed by 9f10f1e9, with regression coverage in 466e99d1.
Security fixes
High severity
- security
GHSA-4cwx-7wf7-3272: malformed qualified
privateCache-Control directives could cause cross-user information disclosure in shared caches or a parse-time crash. The cache parser now treats empty qualified directives conservatively and safely handles mixed qualified and unqualified directives. Fixed by 9f10f1e9, with regression coverage in 466e99d1.
Medium severity
- security
GHSA-m8rv-5g2x-5cg5: a malicious
typeproperty on a duck-typed blob-like HTTP/1.1 request body could inject CRLF sequences into the generatedcontent-typeheader. Undici now coerces and validates the value before adding it to the request. Fixed by 33928bc2. - security
GHSA-jr45-8vmc-qm54: optional whitespace around
=in qualifiedno-cacheandprivatedirectives could bypass shared-cache restrictions and disclose authenticated data across users. Cache-Control parsing now normalizes these forms and applies conservative cache decisions. Fixed by 98011a86. - security
GHSA-8xcm-r25x-g524: the retry interceptor could expose a stale
Content-Lengthafter resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whoseContent-Lengthis inconsistent withContent-Range. Fixed by 1b5a5312, with corrected fixtures in 4a9dafb1. - security
GHSA-v3r7-h72x-cjcm: unsanitized
domainandunparsedvalues passed tosetCookie()could inject cookie attributes. Undici now validates cookie domains, paths, and unparsed attributes more strictly. Fixed by 3bf91ddb.
- security
8.9.0
24 July 2026GHSA-4cwx-7wf7-3272: malformed qualified private Cache-Control directives could cause cross-user information disclosure in shared caches or a parse-time crash. The cache parser now treats empty qualified directives conservatively and safely handles mixed qualified and unqualified directives. Fixed by 4fe5bc5f with regression coverage in 9f09b49a.
Security fixes
High severity
- security
GHSA-4cwx-7wf7-3272: malformed qualified
privateCache-Control directives could cause cross-user information disclosure in shared caches or a parse-time crash. The cache parser now treats empty qualified directives conservatively and safely handles mixed qualified and unqualified directives. Fixed by 4fe5bc5f with regression coverage in 9f09b49a.
Medium severity
- security
GHSA-m8rv-5g2x-5cg5: a malicious
typeproperty on a duck-typed blob-like HTTP/1.1 request body could inject CRLF sequences into the generatedcontent-typeheader. Undici now coerces and validates the value before adding it to the request. Fixed by 7d3cf924. - security
GHSA-jr45-8vmc-qm54: optional whitespace around
=in qualifiedno-cacheandprivatedirectives could bypass shared-cache restrictions and disclose authenticated data across users. Cache-Control parsing now normalizes these forms and applies conservative cache decisions. Fixed by c601fff1. - security
GHSA-8xcm-r25x-g524: the retry interceptor could expose a stale
Content-Lengthafter resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whoseContent-Lengthis inconsistent withContent-Range. Fixed by e11a68ed, with corrected fixtures in 2b3f7493. - security
GHSA-v3r7-h72x-cjcm: unsanitized
domainandunparsedvalues passed tosetCookie()could inject cookie attributes. Undici now validates cookie domains, paths, and unparsed attributes more strictly. Fixed by 10d93fc3.
Additional hardening
Undici now validates non-string header values after coercion, including array elements, preventing crafted
toString()orSymbol.toPrimitiveimplementations from introducing CRLF sequences. This defense-in-depth change was made in 354a151f.What's Changed
decompress: preserve response trailers
validate coerced header values for CRLF
handle frozen globalThis in setGlobalDispatcher
Ignore auto-generated .npmrc on Windows
- security
Major versions
- 8.xsince 2 April 2026 · latest 8.12.3 · 24 releases
- 7.xsince 27 November 2024 · latest 7.30.1 · 51 releases
- 6.xsince 5 December 2023 · latest 6.29.1 · 57 releases
- 5.xsince 29 March 2022 · latest 5.29.0 · 59 releases
- 4.xsince 16 June 2021 · latest 4.16.0 · 49 releases
- 3.xsince 17 December 2020 · latest 3.3.6 · 10 releases
- 2.xsince 5 September 2020 · latest 2.2.1 · 12 releases
- 1.xsince 4 June 2020 · latest 1.3.1 · 14 releases
- 0.xsince 26 July 2018 · latest 0.5.0 · 8 releases
Quality and security signals
What npm and deps.dev say about the latest release. Signals, not a verdict.
Reading npm and deps.dev…
Registry facts last checked 20 October 2026. Releases and advisories last read 20 October 2026.
Know when your own dependencies move
Inlinr tracks your coding time automatically. Switch dependency tracking on for a project and it reads that repository's manifest to show what is behind and what has been deprecated — off by default, one project at a time.