Live › vulnerability › CVE-2026-109383
Go to dashboardundici's Agent drops a caller-supplied checkServerIdentity callback from its tls options because it deep-clones options through JSON. A server certificate that the custom check was meant to reject is then accepted when requests go through Agent, the default dispatcher for fetch and request.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-10-27 19:04 UTC, 0h before NVD. All times on this page are UTC.
Applications that pass a function-valued tls option, such as a custom checkServerIdentity used for certificate or public-key pinning, to undici's Agent or EnvHttpProxyAgent are exposed. Affected routes include requests made through the default global dispatcher used by fetch and request. Applications that use only default TLS checks, or that pass options through connect, are not affected.
| Product | Ecosystem | Affected | Fixed in |
|---|---|---|---|
| undici | npm | >= 4.0.0, < 6.29.1 | 6.29.1 |
| undici | npm | >= 7.0.0, < 7.30.1 | 7.30.1 |
| undici | npm | >= 8.0.0, < 8.12.2 | 8.12.2 |
| nodejs undici | vendor | >= 4.0.0, < 6.29.1 | 6.29.1 |
| nodejs undici | vendor | >= 7.0.0, < 7.30.1 | 7.30.1 |
| nodejs undici | vendor | >= 8.0.0, < 8.12.2 | 8.12.2 |
checkServerIdentity or other function-valued tls options passed to Agent, EnvHttpProxyAgent or setGlobalDispatcher.npm ls undici and compare the installed version against 6.29.1, 7.30.1 or 8.12.2.6.29.1, 7.30.1 or 8.12.2 on the line you are on.connect instead of tls; for proxied EnvHttpProxyAgent destinations use requestTls / proxyTls.Each row is the first time that source carried this signal. The analyst’s rows are its own findings.
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 dispatcher behind request, fetch, and setGlobalDispatcher, this is the path most applications use. EnvHttpProxyAgent is also affected on its direct and NO_PROXY routes, which delegate to an internal Agent.
Only applications that pass a function-valued tls option (such as a custom checkServerIdentity for certificate or public-key pinning) are affected. Passing the same options through connect is not affected. This is the Agent counterpart of the BalancedPool certificate validation bypass fixed in CVE-2026-84961.
Upgrade to undici 6.29.1, 7.30.1, or 8.12.2. Agent now preserves the tls option outside the JSON clone, so custom TLS verification callbacks are forwarded to each origin unchanged.
Pass the TLS options through connect instead of tls. For proxied EnvHttpProxyAgent destinations, use requestTls / proxyTls.
This page as .md · .json · in your agent: get_signal("CVE-2026-109383")
GitHub Advisory Database, CC-BY 4.0 · NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.