On this page · 7 sections
- The Ten October CVEs, Their Severity and the Lines They Affect
- Three TLS Hostname Checks That Accepted the Wrong IP Address
- DNS Truncation, Brotli Memory Corruption and Keep-Alive Responses
- Repeated UUIDs From Snapshots and Three Low-Severity Fixes
- Upgrading Node.js and Rebuilding What Embeds It
- Checking a Node.js Service for the Affected Versions and APIs
- Sources
Security release
Status as of 2026-11-13
10 CVEs
Node.js, Google Brotli
- First fixed in
- Google Brotli 1.0.10, 1.1.1, 1.2.1The earliest release on each line that fixes these CVEs. The release to install is in the article's upgrade steps.
- Exploited
- 1 of 10 · known exploited (CISA)
- Published
- 2026-10-22 – 2026-10-23
Most severe first
- CVE-2026-111497Critical9.2Out-of-Bounds Write in Google Brotli Decoder
- CVE-2026-105482High7.4A flaw in Node.js DNS resolution allows hostnames containing a NUL byte to be silently truncated by the dns.resolve*() f
- CVE-2026-105483High7.4A flaw in Node.js TLS hostname verification allows a certificate without a matching IP address SAN to authenticate a con
- CVE-2026-106069High7.4A flaw in Node.js TLS hostname verification can cause a server certificate to be validated against a different IP addres
- CVE-2026-106072Medium6.7A flaw in Node.js TLS hostname verification allows a certificate with only a DNS SAN to authenticate an IP endpoint when
Show all 10
- CVE-2026-105481Medium6.5A flaw in Node.js HTTP Agent connection reuse can cause a client to accept as valid a response that was sent before the
- CVE-2026-106074Medium4.8A flaw in Node.js `crypto` causes the internal entropy caches used by `crypto.randomUUID()`, `crypto.randomUUIDv7()`, an
- CVE-2026-106070Low3.7A flaw in the Node.js `zlib.ZipFile` API can cause it to return bytes that do not belong to the requested entry after th
- CVE-2026-106071Low3.6A flaw in Node.js Permission Model filesystem enforcement can grant access to paths that do not match a wildcard `--allo
- CVE-2026-106073Low3.3A flaw in Node.js Permission Model filesystem enforcement leaves `fs.realpathSync()` without the required read permissio
Earlier CVEs this article mentions: CVE-2026-48618, CVE-2026-48930, CVE-2026-48931, CVE-2026-58043, CVE-2026-21715
Data: CVE records on cve.org
Warning
The October 21 Node.js security releases, 26.12.1, 24.22.1 and 22.23.4, fix ten vulnerabilities. Four are rated high: a DNS name truncation, two TLS hostname verification bypasses and an out-of-bounds write in the bundled Brotli decoder. CISA's SSVC assessment rates exploitation of the Brotli flaw, CVE-2026-111497, as active. Later Node.js security releases have since superseded these versions, so a server upgrading today should install the newest release of its line.
The Ten October CVEs, Their Severity and the Lines They Affect #
The security post rates each CVE and names the affected lines, and the 26.12.1 release notes put the CVE in front of the commit that fixes it, for example "(CVE-2026-105482) dns: validate resolve inputs for null bytes". Node.js publishes severity labels, not CVSS scores. The CVE records list every 22.x release up to 22.23.3, 24.x up to 24.22.0 and 26.x up to 26.12.0 as affected where the line is named.
| CVE | Severity | Fixing change | Lines |
|---|---|---|---|
| CVE-2026-105482 | High | dns: validate resolve inputs for null bytes | 26.x, 24.x, 22.x |
| CVE-2026-105483 | High | tls: fix ip normalization regression | 26.x, 24.x |
| CVE-2026-106069 | High | tls: reject non-canonical IP addresses | 26.x, 24.x, 22.x |
| CVE-2026-111497 | High | deps: brotli cherry-pick | 26.x, 24.x, 22.x |
| CVE-2026-105481 | Medium | http: ensure agent data guard works without I/O | 26.x, 24.x, 22.x |
| CVE-2026-106072 | Medium | tls: reject non-canonical IP addresses | 26.x, 24.x, 22.x |
| CVE-2026-106074 | Medium | crypto: reset random caches across snapshots | 26.x, 24.x, 22.x |
| CVE-2026-106070 | Low | zlib: avoid caching invalid ZIP local headers | 26.x |
| CVE-2026-106071 | Low | src: fix the fs permission tree node on wildcard nodes | 26.x in October; 24.x and 22.x in a later release |
| CVE-2026-106073 | Low | permission: check permission model in realpathSync | 26.x, 24.x, 22.x |
The same releases update dependencies for public vulnerabilities: c-ares and Undici on all three lines, OpenSSL on 24.x and 22.x, SQLite on 22.x, and the CA certificates on all three lines for the eMudhra intermediate CA compromise. The 26.12.1 notes also list "tls: reject chains containing blocked public keys" and the move to NSS 3.131.1 root certificates.
Three TLS Hostname Checks That Accepted the Wrong IP Address #
Three CVEs make tls.checkServerIdentity() accept a certificate for an IP address it was not issued for, each through a different spelling of the address:
- CVE-2026-106069 (high): a leading-zero octet such as
0127.0.0.1is read as octal by the hostname check, so it becomes 87.0.0.1, while some operating system resolvers, macOS among them, connect to 127.0.0.1. The certificate is checked against one address and the connection goes to another. - CVE-2026-105483 (high, 26.x and 24.x): fullwidth digits such as
127.0.0.1were not recognized as an IP address, so a certificate withDNS:127.0.0.1orDNS:*.0.0.1matched. The post calls it a regression introduced after the fix for CVE-2026-48618. - CVE-2026-106072 (medium): spellings such as
0x7f.0.0.1,2130706433or127.1let a certificate with only a DNS SAN authenticate an IP endpoint. It needs a trusted certificate with a numeric DNS SAN and a resolver that accepts these spellings, such as glibc.
All three only matter when a client connects to a host written as a non-canonical IP literal. A client that connects by DNS name is outside them.
DNS Truncation, Brotli Memory Corruption and Keep-Alive Responses #
CVE-2026-105482 is an incomplete fix of CVE-2026-48930, which covered dns.lookup() and the net and tls host options but not dns.resolve*() and dns.reverse(). Because the name goes to c-ares as a C string, resolving attacker.example\0.trusted.example returns the records of attacker.example without an error. An application that checks a hostname against an allowlist and then resolves it with dns.resolve*() acts on a different name than the one it checked.
In CVE-2026-111497, an invalid block switch in Brotli data was reported as a need for more input instead of a format error, so the streaming decoder kept writing past an eight-byte internal buffer. An application that decompresses attacker-supplied Brotli data with node:zlib can crash, disclose process memory or, according to the post, execute attacker code. The CVE record, from Google, scores the Brotli flaw 9.2 under CVSS 4.0 and lists Brotli 1.0.3 through 1.2.0 as affected, and CISA's SSVC assessment of October 23 rates exploitation as active. The post credits Khai Tran and Sylvie Mayer of OpenAI Codex Security with the report.
CVE-2026-105481 is an incomplete fix of CVE-2026-48931. The HTTP Agent destroys an idle keep-alive socket when unexpected data arrives, but only while the event loop polls for I/O. If a server's unsolicited response is already waiting on the socket when the Agent hands it to a new request, for example after a stretch of synchronous work, the client parses it as the response to that request.
Repeated UUIDs From Snapshots and Three Low-Severity Fixes #
CVE-2026-106074 affects user-land startup snapshots built with --build-snapshot and single executable applications built with useSnapshot. If crypto.randomUUID(), crypto.randomUUIDv7(), crypto.randomInt() or an API that uses them, such as URL.createObjectURL(), runs while the snapshot is built, their entropy caches are saved with it. Every process started from that snapshot then returns the same values until the cache refills: up to 127 UUIDs and about 1,000 randomInt() values. The fix stops the caches from being saved, so a snapshot or single executable built with an older release has to be built again.
The three low-severity CVEs concern features fewer applications use. CVE-2026-106070, on 26.x only, makes zlib.ZipFile return attacker-controlled bytes after a failed header check, so a scanner can approve content that another ZIP tool extracts differently. CVE-2026-106071 lets a wildcard Permission Model grant such as --allow-fs-read=/etc/passwd.* also allow /etc/passwd, a different root cause from the earlier CVE-2026-58043. CVE-2026-106073, an incomplete fix of CVE-2026-21715, left fs.realpathSync() without the read permission check, so code under --permission could probe paths outside its grants.
Upgrading Node.js and Rebuilding What Embeds It #
- Install the newest release of the line in use: 26.12.1, 24.22.1 and 22.23.4 carry the October fixes, and the later security releases include them. The security posts note that end-of-life lines are always affected when a security release ships, so a server on an older line has no fixed release.
- Rebuild container images, startup snapshots built with
--build-snapshotand single executable applications after the upgrade, because each carries the Node.js binary it was built with, and a snapshot built before 26.12.1, 24.22.1 or 22.23.4 keeps its saved random caches. - Until the upgrade, do not decompress Brotli data from untrusted sources with
node:zlib, and reject hostnames that contain a NUL byte before resolving them. - Give TLS clients IP literals only in canonical form, such as
127.0.0.1, never with leading zeros, hexadecimal octets or fullwidth digits. - On 22.x and 24.x with the Permission Model, avoid a wildcard
--allow-fs-reador--allow-fs-writegrant as the only grant for its scope until a release that fixes CVE-2026-106071 on that line is installed.
Checking a Node.js Service for the Affected Versions and APIs #
The version decides most of this; any 22.x before 22.23.4, 24.x before 24.22.1 or 26.x before 26.12.1 lacks the October fixes. The search finds the APIs the CVEs above depend on, so a team can see which ones its own services reach.
node --version
grep -rnE "dns\.(resolve|reverse)|createBrotliDecompress|brotliDecompress|build-snapshot|useSnapshot|randomUUID|allow-fs-(read|write)" --include="*.js" --include="*.mjs" --include="*.cjs" --include="*.ts" --include="*.json" .The Sentinel’s Call
Every Node.js server on 22.x, 24.x or 26.x needs at least 22.23.4, 24.22.1 or 26.12.1 for these ten fixes, and in practice the newest release of its line, since later security releases supersede them. Applications that decompress untrusted Brotli data or resolve user-supplied hostnames with dns.resolve*() are the most exposed, and teams that ship startup snapshots or single executable applications should rebuild them after the upgrade.
Our judgement, drawn only from the facts and sources above.
Verified We installed Node.js 26.12.1, 24.22.1 and 22.23.4 from the official Docker images and ran them on Nov 13, 2026.
Node.js 26.12.1
node --versionv26.12.1
Full output and environment
$ node --version v26.12.1Node.js 24.22.1
node --versionv24.22.1
Full output and environment
$ node --version v24.22.1Node.js 22.23.4
node --versionv22.23.4
Full output and environment
$ node --version v22.23.4
Isolated container: official image, network off, read-only, no host files. How we check
Sources
- Node.js — Wednesday, October 21, 2026 Security Releases nodejs.org · Oct 21, 2026
- Node.js — Node.js 26.12.1 (Current) nodejs.org · Oct 21, 2026
- CVE-2026-105482: A flaw in Node.js DNS resolution allows hostnames containing a NUL byte to be silently truncated by the dns.resolve*() f cve.org · Oct 23, 2026
- CVE-2026-105483: A flaw in Node.js TLS hostname verification allows a certificate without a matching IP address SAN to authenticate a con cve.org · Oct 23, 2026
- CVE-2026-106069: A flaw in Node.js TLS hostname verification can cause a server certificate to be validated against a different IP addres cve.org · Oct 23, 2026
- CVE-2026-111497: Out-of-Bounds Write in Google Brotli Decoder cve.org · Oct 22, 2026
- CVE-2026-105481: A flaw in Node.js HTTP Agent connection reuse can cause a client to accept as valid a response that was sent before the cve.org · Oct 23, 2026
- CVE-2026-106072: A flaw in Node.js TLS hostname verification allows a certificate with only a DNS SAN to authenticate an IP endpoint when cve.org · Oct 23, 2026
- CVE-2026-106074: A flaw in Node.js `crypto` causes the internal entropy caches used by `crypto.randomUUID()`, `crypto.randomUUIDv7()`, an cve.org · Oct 23, 2026
- CVE-2026-106070: A flaw in the Node.js `zlib.ZipFile` API can cause it to return bytes that do not belong to the requested entry after th cve.org · Oct 23, 2026
- CVE-2026-106071: A flaw in Node.js Permission Model filesystem enforcement can grant access to paths that do not match a wildcard `--allo cve.org · Oct 23, 2026
- CVE-2026-106073: A flaw in Node.js Permission Model filesystem enforcement leaves `fs.realpathSync()` without the required read permissio cve.org · Oct 23, 2026
More on Node.js
5 other articles, newest first
- NewerNov 13, 2026Node.js 26.13.1, 24.22.3, 22.23.5: Fixes for HTTP/2 and TLS Flaws
- NewerOct 30, 2026Node.js 27 Requires OpenSSL 3 and Drops Bundled FIPS Provider
- Oct 17, 2026Node.js 24.22.0 LTS: parsePKCS12, a MAC API and SQLite close(); 26.12.0 Throws Without RX
- Oct 9, 2026Node.js 26.9 to 26.11: In‑Core FFI, Histograms, PKCS#12 and the sqlite Rename
- Oct 9, 2026Evaluating Node.js 26.11.0 Current vs Node.js 22.23.3 LTS in Enterprise Environments
Edited and approved by Jarosław Krzemiński. Spotted a mistake? Report a correction or read the corrections policy.




Comments