github nodejs/undici v8.10.2

latest releases: v7.29.1, v6.28.1
3 hours ago

⚠️ Security fixes

High severity

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

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

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

  • build(deps-dev): bump undici from 6.27.0 to 6.28.0 by @dependabot[bot] in #5653
  • build(deps-dev): bump jest from 30.4.2 to 30.5.0 by @dependabot[bot] in #5750
  • build(deps): bump github/codeql-action/analyze from 4.37.3 to 4.37.9 by @dependabot[bot] in #5752
  • build(deps): bump github/codeql-action/upload-sarif from 4.36.2 to 4.37.9 by @dependabot[bot] in #5754
  • test(h2): cover stream reset with NGHTTP2_INTERNAL_ERROR by @zeexzeex in #5725
  • fix(retry): reject invalid resumed responses by @mcollina in #5724
  • test: make stale-while-revalidate cache update test deterministic by @mcollina in #5722
  • fix: avoid unbounded recursion in Set-Cookie attribute parser by @mcollina in #5757
  • fix: honor SOCKS5 connection timeout by @mcollina in #5733
  • fix(eventsource): validate Last-Event-ID on reconnect by @mcollina in #5746
  • fix: avoid duplicate release attempts by @mcollina in #5745
  • fix(cache): refetch when 304 adds vary fields by @mcollina in #5732
  • types: expose PendingInterceptor and PendingInterceptorsFormatter on the MockAgent namespace by @RaphaelFakhri in #5721
  • ci(codeql): align CodeQL action versions to v4.37.9 by @mcollina in #5759
  • build(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 by @dependabot[bot] in #5760
  • fix(proxy-agent): guard Proxy-Authorization in iterable header containers by @mcollina in #5758
  • docs: name the parameters these two blocks describe by @darkdi in #5735
  • fix(websocket): fail the connection on a non-200 h2 extended CONNECT response by @kjsik11 in #5751
  • test(node-fetch): re-enable the set-cookie header combining test by @pacocartones in #5730
  • fix(retry): forward rawHeaders writes through RetryController by @official-burak in #5727
  • fix(fetch): only send Sec-Fetch-Mode to potentially trustworthy URLs by @kjsik11 in #5738

New Contributors

Full Changelog: v8.10.1...v8.10.2

Don't miss a new undici release

NewReleases is sending notifications on new releases.