Packages

undici

8.12.3MIT
  • 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.

12 older fixes

Releases in the last 90 days

Feed of releases and advisories

Every stable release, newest first. Notes are quoted as the maintainers published them.

  1. 8.12.3

    19 October 2026
    h2: 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

  2. 8.12.2

    15 October 2026
    CVE-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 Agent options

    CVE-2026-109383 · GHSA-2m5v-pch6-74hx

    Agent used a JSON-based clone for constructor options, which silently removed function-valued TLS options such as checkServerIdentity. 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 Agent combined redirect and shared-cache interceptors as compose(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-Encoding values

    CVE-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 decompress interceptor

    CVE-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 decompress was composed with a handler such as dump with 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 as SHA256, 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.

  3. 6.29.1

    15 October 2026
    CVE-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 Agent options

    CVE-2026-109383 · GHSA-2m5v-pch6-74hx

    Agent used a JSON-based clone for constructor options, which silently removed function-valued TLS options such as checkServerIdentity. 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-Encoding values

    CVE-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

  4. 7.30.1

    15 October 2026
    CVE-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 Agent options

    CVE-2026-109383 · GHSA-2m5v-pch6-74hx

    Agent used a JSON-based clone for constructor options, which silently removed function-valued TLS options such as checkServerIdentity. 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 Agent combined redirect and shared-cache interceptors as compose(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-Encoding values

    CVE-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 decompress interceptor

    CVE-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 decompress was composed with a handler such as dump with 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 as SHA256, 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

  5. 8.12.1

    14 October 2026
    Restore build:wasm npm script

    What's Changed

    • restore build:wasm npm script

  6. 8.12.0

    14 October 2026
    cookies: 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

  7. 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

  8. 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

  9. 8.11.2

    24 September 2026
    Close rejected HTTP/2 WebSocket handshake streams

    What's Changed

    • close rejected HTTP/2 WebSocket handshake streams

    • avoid reconnecting aborted requests

  10. 8.11.1

    24 September 2026
    Deslopify 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
  1. 8.11.0

    22 September 2026
    Complete 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

  2. 7.29.1

    4 September 2026
    GHSA-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: 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

      GHSA-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 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 WebSocketStream close 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 POST or DELETE. 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-Length was present. Undici now enforces maxSize against 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-Range against 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

  3. 6.28.1

    4 September 2026
    GHSA-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 TypeError that 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-Range against 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

  4. 8.10.2

    4 September 2026
    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 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: 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 8f5868fb.

    • security

      GHSA-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 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 WebSocketStream close 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 POST or DELETE. 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-Length was present. Undici now enforces maxSize against 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-Range against 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

  5. 8.10.1

    31 August 2026
    mock: 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

  6. 8.10.0

    3 August 2026
    Namespace 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

  7. 6.28.0

    24 July 2026
    GHSA-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 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

      GHSA-8xcm-r25x-g524: the retry interceptor could expose a stale Content-Length after resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whose Content-Length is inconsistent with Content-Range. Fixed by cba3a52a, with corrected fixtures in 4fd5a0c6.

    • security

      GHSA-v3r7-h72x-cjcm: unsanitized domain and unparsed values passed to setCookie() 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.

  8. 7.29.0

    24 July 2026
    GHSA-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 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.

    Medium severity

    • security

      GHSA-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 33928bc2.

    • security

      GHSA-jr45-8vmc-qm54: optional whitespace around = in qualified no-cache and private directives 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-Length after resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whose Content-Length is inconsistent with Content-Range. Fixed by 1b5a5312, with corrected fixtures in 4a9dafb1.

    • security

      GHSA-v3r7-h72x-cjcm: unsanitized domain and unparsed values passed to setCookie() could inject cookie attributes. Undici now validates cookie domains, paths, and unparsed attributes more strictly. Fixed by 3bf91ddb.

  9. 8.9.0

    24 July 2026
    GHSA-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 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.

    Medium severity

    • security

      GHSA-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 7d3cf924.

    • security

      GHSA-jr45-8vmc-qm54: optional whitespace around = in qualified no-cache and private directives 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-Length after resuming a partial response, potentially causing downstream response desynchronization, hangs, or corruption. Undici now rejects partial responses whose Content-Length is inconsistent with Content-Range. Fixed by e11a68ed, with corrected fixtures in 2b3f7493.

    • security

      GHSA-v3r7-h72x-cjcm: unsanitized domain and unparsed values passed to setCookie() 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() or Symbol.toPrimitive implementations 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

All 284 releases

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.