Still on Node.js 20? The November 11 Security Release Won't Patch You

Node.js 20 reached End-of-Life on April 30, 2026, and the November 11 security release skips it. See what it has missed, whether to move to 24 or 26, what breaks, and what to do if you can't migrate this week.

Ashley Innocent

Ashley Innocent

5 November 2026

Still on Node.js 20? The November 11 Security Release Won't Patch You

Apidog for Enterprise

On-Premises Deploy

SSO & RBAC

SOC 2 Compliant

Explore Apidog Enterprise

Node.js 20 gets nothing on November 11, 2026. The security releases cover 26.x, 24.x, and 22.x only, because Node.js 20 reached End-of-Life on April 30, 2026. Your last patch was 20.20.2, built March 24. Since then, 33 CVEs have shipped without a 20.x build. Move to 24 or 26 this week.

Those CVEs came in three security releases that left 20 out. The fourth is days away, and the pre-announcement rates its worst issue HIGH on every supported line.

What November 11 is, and why Node.js 20 is left out

The Node.js project will ship new 26.x, 24.x, and 22.x builds on or shortly after Wednesday, November 11, 2026. No CVE details are public yet, and they stay private until the builds land. Our countdown guide to the November release covers the runtime inventory and the patch-day commands, so this post skips them.

Node.js 20 isn’t on the list because the project stopped maintaining it. The End-of-Life page is blunt: when new security releases reveal issues, “even if the same vulnerability affects EOL release lines, there will not be any new releases for them.”

The advisory adds one more line that matters to you: “End-of-Life versions are always affected when a security release occurs.”

What Node.js 20 has already missed

Three security releases have shipped since 20 went End-of-Life. None has a 20.x build.

Advisory CVEs High Medium Low Fixed in
June 18, 2026 12 2 6 4 26.3.1, 24.17.0, 22.23.0
July 29, 2026 11 3 5 3 26.5.1, 24.18.1, 22.23.2
October 21, 2026 10 4 3 3 26.12.1, 24.22.1, 22.23.4
Total 33 9 14 10 No 20.x build

The code these fixes touch is the code an API server runs all day:

Read that list carefully. The project doesn’t assess End-of-Life lines, so its advisories name supported versions only. Some of these bugs live in code that 20 may not contain: one October CVE is a regression that the project scopes to 26.x and 24.x alone. So the honest status of each CVE on Node.js 20 is unpatched and unassessed. Nobody has told you you’re safe, and nobody is going to check.

Bug chains make this worse. October’s DNS fix completes a June fix, and a July fix completes another June fix. Every later patch builds on one you don’t have.

Timeline of Node.js 20: last build on March 24, 2026, End-of-Life on April 30, then security releases on June 18, July 29 and October 21 with no 20.x fix, and the November 11 release still pending

“But it still works”

It does. That’s the problem.

An End-of-Life runtime doesn’t fail. node -v prints the same version, your tests pass, and your dashboards stay green. The risk shows up in places you don’t watch:

Pick a target: Node.js 24 or 26, not 22

Move to 24 this week if you need the shortest path. Choose 26 if you can absorb more removals now and want the longest runway. Skip 22: it does get the November fix, but it ends April 30, 2027, less than six months from now, so you’d repeat this project by spring.

Line Status Latest on Nov 5 Support ends Best for
26.x “Lithium” Active LTS since Oct 28, 2026 26.13.0 Apr 30, 2029 Services you can fully retest now
24.x “Krypton” Maintenance LTS since Oct 20, 2026 24.22.2 Apr 30, 2028 The fastest safe exit from 20
22.x “Jod” Maintenance LTS 22.23.4 Apr 30, 2027 Not worth a migration today

Dates come from the Node.js release schedule. Check your platform before you commit. On Lambda, for example, the Node.js 26 runtime is in public preview and isn’t covered by the Lambda SLA, so 24 is the safer production target there today.

Bar chart of Node.js support windows from November 2026: 22.x ends April 30, 2027, 24.x ends April 30, 2028, and 26.x ends April 30, 2029

Migration steps and what breaks

Everything in this table comes from the official release notes for 22.0.0, 24.0.0, 25.0.0, and 26.0.0, plus the v22 to v24 migration guide. It’s the short list for API services, not the full changelog.

Arrived in Change Who feels it
22 import ... assert { type: 'json' } removed; use with ESM code importing JSON
22 crypto.createCipher() and createDecipher() removed Legacy encryption code
23 and 24 No prebuilt 32-bit Windows or 32-bit armv7 Linux binaries; macOS 13.5 minimum Old hosts and edge boxes
24 OpenSSL 3.5 at security level 2: RSA, DSA, and DH keys under 2048 bits, ECC keys under 224 bits, and RC4 are prohibited mTLS and old upstreams
24 tls.createSecurePair removed; url.parse() runtime-deprecated Old networking code
24 Stricter fetch() compliance, AbortSignal validation, stream and pipe errors now throw HTTP clients, proxies
24 V8 13.6; addons may need C++20 Native modules
25 (if targeting 26) SlowBuffer and fs.F_OK, R_OK, W_OK, X_OK removed; Corepack no longer ships Old utilities, Yarn or pnpm via Corepack
25 (if targeting 26) IP address as TLS servername moved to End-of-Life Clients connecting by IP
26 _stream_* modules and writeHeader() removed; module.register() runtime-deprecated; Undici 8 Old stream code, custom loaders

The OpenSSL row is the one that bites quietly. Your code doesn’t change, but a handshake with an old partner system fails at runtime.

On a branch, update .nvmrc, engines, your Dockerfile, and CI to the target line (for a clean machine, use the Node.js install guide). Then reinstall so native modules rebuild, scan for removed APIs, run the official codemods, and start the service with deprecation tracing on:

nvm install 24 && nvm use 24
rm -rf node_modules && npm ci

grep -rnE "assert \{ *type|createCipher\(|createDecipher\(|url\.parse\(|fs\.[FRWX]_OK|SlowBuffer|createSecurePair|_stream_[a-z]+|module\.register\(" \
  --include="*.js" --include="*.mjs" --include="*.ts" --exclude-dir=node_modules .

npx codemod run @nodejs/import-assertions-to-attributes
npx codemod run @nodejs/crypto-createcipheriv-migration
npx codemod run @nodejs/tls-create-secure-pair-to-tls-socket
npx codemod run @nodejs/fs-access-mode-constants

NODE_OPTIONS="--trace-deprecation" npm start

Review codemod output by hand. The createCipher one is explicit: its generated code can’t decrypt data encrypted with the old API, so plan a data migration if you have any.

The Node.js site has no 24 to 26 guide yet, so use the 25.0.0 and 26.0.0 notes for that hop.

Prove the API behaves the same on the new line

Unit tests don’t show what a new TLS stack and HTTP client do to real traffic. For a jump of two or three majors, you want a before-and-after comparison of the running service, and that’s a good job for your coding agent.

Apidog CLI lets Claude Code, Codex, or Cursor run your Apidog test suites from the terminal. Set it up once:

npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
npx -y skills add https://apidog.com   # pick your agent when prompted

Then give your agent one prompt:

My service runs on Node.js 20 in staging. Run Apidog test suite <suiteId> in project
<projectId> against environment <envId> and save reports to reports/node20. When I
redeploy on Node.js 24, run the same suite into reports/node24. List every request
whose status, body, or TLS behavior changed. Then read the service logs for deprecation
warnings and check each failure against the 22, 24, and 25 release notes: removed APIs,
changed defaults, stricter fetch and AbortSignal handling, OpenSSL key size rejections.

The agent runs the same suite on each side of the migration:

apidog run --test-suite <suiteId> --project <projectId> -e <envId> \
  -r cli,junit --out-dir reports/node20

# redeploy the service on the target line, restart it

apidog run --test-suite <suiteId> --project <projectId> -e <envId> \
  -r cli,junit --out-dir reports/node24

Two things keep the comparison honest:

Once the migration passes, keep the line in your pipeline. The Apidog CLI CI/CD guide has the workflow, and the Claude Code walkthrough covers agent setup.

If you can’t move this week

Buy patched builds. The Node.js End-of-Life page names three partners through the OpenJS Ecosystem Sustainability Program. HeroDevs offers Never-Ending Support with security patches. TuxCare’s Endless Lifecycle Support backports fixes for End-of-Life versions. NodeSource offers upgrade assessments and support. The project calls this a temporary solution, and it is.

Shrink what can reach the process. These steps reduce exposure to the bug classes above. They don’t fix anything:

Write down the risk. Name an owner, a migration date, and the compensating controls, so that “temporary” has an end.

button

FAQ

Is Node.js 20 still supported? No. It reached End-of-Life on April 30, 2026. The last build is 20.20.2 from March 24, 2026, and the project won’t release another.

Is Node.js 20 vulnerable to the November 11 bugs? No CVE details are public yet, so nobody can say which ones apply. The advisory states that End-of-Life versions are always affected when a security release occurs, and the project doesn’t assess them individually.

Should I upgrade to Node.js 22 instead? No. It’s the smallest jump, but it ends April 30, 2027. Moving to 24 buys another year of support, and 26 buys two.

Node.js 24 or 26? Take 24 if you need out this week or your platform doesn’t fully support 26 yet. Take 26 if you can retest everything now, since it runs until April 30, 2029.

I’m on Node.js 25. Does this apply to me? Yes. Node.js 25 reached End-of-Life on June 1, 2026, with 25.9.0 as its last build. It gets no November fix either, and moving to 26 is one major away.

Explore more

OpenAI's AI Found 948 Ways to Get Root on Linux. Is Your API Server Patched?

OpenAI's AI Found 948 Ways to Get Root on Linux. Is Your API Server Patched?

OpenAI's pipeline produced 948 unique Linux root exploits for $1,279 each. Here's what that means for API servers, how to check your kernel and patch state in 2 minutes, and how to limit what a foothold can reach.

5 November 2026

Is Your Node.js Version Vulnerable to the Brotli RCE? Check in 2 Minutes

Is Your Node.js Version Vulnerable to the Brotli RCE? Check in 2 Minutes

CVE-2026-111497 is an actively exploited Brotli decoder bug in Node.js. Check your version in two minutes, see which frameworks and HTTP clients reach the decoder, patch by install method, and apply mitigations if you can't upgrade today.

5 November 2026

How to Let AI Agents Use API Keys Without Seeing Them

How to Let AI Agents Use API Keys Without Seeing Them

Let AI agents use API keys without seeing them: keep key names in context and values outside, with env vars, secret references, an injecting proxy and short-lived tokens.

4 November 2026

Practice API Design-first in Apidog

Discover an easier way to build and use APIs

Still on Node.js 20? The November 11 Security Release Won't Patch You