All vulnerabilities
CVE-2026-84961GHSA-w293-vg96-wgc3

undici vulnerable to TLS certificate validation bypass via dropped connect options in BalancedPool

undici undicinpmLibraries & packages
CVSS
7.4High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.15%Chance of exploitation activity in the next 30 days, higher than 3% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in7.29.1Also 8.10.2GitHub
Published4 Sep 2026Updated 29 Sep 2026CVE List

What fixes it

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Impact

undici's BalancedPool passes its constructor options through a JSON-based deep clone (JSON.parse(JSON.stringify(...))) before forwarding them to each per-upstream Pool. JSON cannot represent functions, so a caller-supplied connect or tls option containing a checkServerIdentity callback (or a custom connector function) 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 BalancedPool. Client, Pool, Agent, and RoundRobinPool destructure connect/tls before the clone and are not affected. Only applications that use BalancedPool with a function-valued connect/tls option (such as a custom checkServerIdentity or connector) are affected.

Patches

Upgrade to 7.29.1 or 8.10.2. BalancedPool now preserves the connect and tls options outside the JSON clone, so custom TLS verification callbacks are forwarded to each upstream unchanged.

Workarounds

Use Client, Pool, or Agent instead of BalancedPool for connections that rely on a custom checkServerIdentity or connector, until upgraded.

Text from GitHub Advisory Database

Affected versions 8

  • undici, npm>= 7.24.1, < 7.29.1GitHub
  • undici, npm>= 8.0.0, < 8.10.2GitHub
  • undiciaffected: 7.24.1 before 7.29.1CVE List
  • undiciunaffected: 7.29.1CVE List
  • undiciaffected: 8.0.0 before 8.10.2CVE List
  • undiciunaffected: 8.10.2CVE List
  • undici, npmfrom 7.24.1, fixed in 7.29.1OSV
  • undici, npmfrom 8.0.0, fixed in 8.10.2OSV

References 8