Node.js Security Release, October 2026: What to Patch

Node.js 26.12.1, 24.22.1 and 22.23.4 fix high-severity TLS and DNS bugs. Check your version, patch today, and watch TLS handshakes.

Maysan Engineering Team · · 5 min read

Xin

On 21 October 2026 the Node.js project shipped security releases for two lines: 26.12.1 (Current) and 24.22.1 "Krypton" (LTS), with 22.23.4 named in the same release batch. Both published release notes carry the same flat line — "This is a security release." — and the headline item is a High-severity TLS hostname verification flaw, CVE-2026-106069 (paired in the notes with CVE-2026-106072), where a server certificate can be validated against a different IP address than the one your client actually connected to. The batch also carries High-severity fixes for DNS input validation and Brotli decompression, plus Medium and Low items in the HTTP agent, crypto, zlib and permission model. If any part of your stack runs Node.js and opens TLS connections to hosts it did not hardcode, upgrade this week.

What the Node.js security release October 2026 contains

The fixes cluster into four areas: TLS validation, DNS input handling, Brotli decompression, and quieter hygiene work.

The notes list, at High severity, "tls: reject non-canonical IP addresses" (CVE-2026-106069, CVE-2026-106072), "dns: validate resolve inputs for null bytes" (CVE-2026-105482), "tls: fix ip normalization regression" (CVE-2026-105483) and the Brotli pair under CVE-2026-111497. Medium items cover the HTTP agent data guard (CVE-2026-105481) and resetting random caches across crypto snapshots (CVE-2026-106074). Low items touch zlib local headers, the fs permission tree on wildcard nodes, and "permission: check permission model in realpathSync" (CVE-2026-106073), credited to RafaelGSS, who also prepared the release.

Beyond the CVEs, the notes carry routine dependency work: root certificates updated to NSS 3.131.1, c-ares to 1.34.9, undici to 7.30.1, OpenSSL sources to openssl-3.5.9, and timezone data to 2026e. That is the argument for rebuilding your image rather than hot-patching a running container.

The TLS bug in plain terms

A host written as 0127.0.0.1 — a non-canonical IPv4 literal with a leading zero — could be compared in a way that validated a certificate issued for a different IP.

The vendor write-up is blunt: "A flaw in Node.js TLS hostname verification can cause a server certificate to be validated against a different IP address than the one the client connected to, when the host is a non-canonical IPv4 literal with a leading zero, such as 0127.0.0.1." It adds that "A certificate containing DNS:127.0.0.1 or DNS:.0.0.1 could therefore be accepted for an IP endpoint it was not issued for."

That matters anywhere the target host arrives as data rather than configuration: customer-supplied webhook URLs, tenant-configured API or SMTP endpoints, internal service discovery where the address is a string somebody typed. The fix rejects non-canonical forms outright, which means some previously "working" connections will now fail loudly. That failure is the point.

Am I affected, and how badly?

If you run Node.js 26.x, 24.x or 22.x in production and make outbound TLS connections to hosts you do not fully control, assume yes.

Two details sharpen the risk. First, CVE-2026-105482 is described in the vendor write-up as "an incomplete fix of CVE-2026-48930, which only covered dns.lookup() and the net / tls host options" — so if you patched earlier in the year and closed the ticket, the same class of input may still reach other paths. Second, CVE-2026-105483 is "a regression introduced after the fix for CVE-2026-48618", meaning an earlier hardening change broke normalisation for some addresses.

The Low-severity permission model item is worth a look if you sandbox plugin code or user scripts with it. On its own it would not justify an emergency window; alongside the TLS work, it costs nothing to take.

What to do in the next 24 hours

Upgrade to the patched build for your line — 26.12.1, 24.22.1 or 22.23.4 — and then confirm that the version answering requests is the version you shipped.

  • Pin the exact version in your image or runtime config, and rebuild the container instead of mutating a running one.
  • Verify what is actually serving traffic: hit a health endpoint that returns the running Node version, or check the binary inside the live container. A green CI deploy says nothing about the stray process still bound to port 443 on an old droplet.
  • Sweep the runtimes people forget: cron workers, queue consumers, serverless functions, scheduled jobs, desktop builds, CLI tools you ship to customers.
  • After the deploy, watch TLS certificate verification failures for 24-48 hours. A spike usually means a caller was relying on a leading-zero host, and you need to know who that caller is before you shrug at it.
  • Watch DNS resolution errors and outbound 5xx from third-party APIs. Rejecting null bytes in resolve inputs can turn a silent bad value into a thrown error.

If you genuinely cannot upgrade today, the honest stopgap is narrow: block non-canonical IP literals at your egress layer and inventory which services accept hostnames from users at all. That buys days, not months.

What AI changes about fixing bugs like this

The patch itself is small; the expensive part is knowing which of your services is exposed — and that is where AI-assisted review earns its keep, not by finding this bug, about which the facts say nothing.

A model that has read your repository answers questions a grep cannot: which modules build a TLS connection from a variable rather than a constant, which endpoints accept a URL in a request body, which background workers share a client factory with your public API. Feed it the advisory text and your dependency manifest and you get a short list of call sites to inspect in minutes rather than a day.

The caveats are real. AI review is good at "find code shaped like this" and weak at "tell me whether this is exploitable in our deployment" — for that you still need someone who knows which services sit behind a WAF and which take input from anonymous users. Treat the output as a triage list, not a verdict. A structured architecture review plus an AI pass over the call sites is a couple of hours; the AI pass alone is how you miss the worker nobody remembers.

Where to start

Pull the release notes for your line, diff your pinned version against them, and get the patch into staging today — the TLS fix should not wait for a sprint boundary. If you cannot say with confidence which of your services open outbound TLS connections to user-supplied hosts, that inventory is the real work. It is also the part we at Maysan Labs usually map first when we take over web platform builds and inherited backends.

Buying software or a website?

Twelve questions to ask any vendor before you sign: price, your data, fit for an Indian business and support.

Get the free checklist

Written by Maysan Engineering Team at Maysan Labs, a software studio in Gurgaon, India. Follow us on LinkedIn