DevelopmentNew Release10 min readPublished July 29, 2026

11 CVEs patched · 3 HIGH · landed July 29 after two delays

Node.js July Security Releases: What Actually Shipped

Node.js shipped its twice-delayed July security release on July 29, 2026 — 11 CVEs patched as v22.23.2, v24.18.1, and v26.5.1. Two of the three HIGH-severity bugs sit in HTTP/2; the third lets sandboxed code escape the Permission Model allowlist. Here is the patch order that actually matters for a typical Next.js or API workload.

DA
Digital Applied Team
Senior strategists · Published July 29, 2026
PublishedJuly 29, 2026
Read time10 min
Sourcesnodejs.org advisory + NVD
CVEs patched
11
across 22.x / 24.x / 26.x
Rated HIGH
3
2 HTTP/2 + 1 Permission Model
+1 vs June
Release slips
2
Jul 27 → Jul 28 → Jul 29
CVSS published
7.5
1 of 3 HIGHs scored: CVE-2026-58043

The Node.js July 2026 security release finally landed on Wednesday, July 29 — two days later than planned, after two consecutive one-day slips. It patches 11 CVEs across the 22.x, 24.x, and 26.x release lines: three rated HIGH, five MEDIUM, and three LOW, per the project’s own advisory. The fixed versions are v22.23.2, v24.18.1, and v26.5.1.

This is the what-shipped follow-up to our July 25 patch-week preview, which covered the pre-disclosure announcement — release expected on or shortly after July 27, maximum severity HIGH, no CVE numbers yet. Every one of those open questions is now resolved, and the answers change what you should patch first.

Below: the full CVE list with the project’s own severity labels, why two of the three HIGH bugs still have no published CVSS score, the two subsystem patterns worth flagging, and a patch-order matrix built for teams running Next.js and API workloads on Node 22, 24, or 26.

Key takeaways
  1. 01
    The release landed July 29 after two one-day slips.Originally planned for on or shortly after July 27, the release moved to July 28 for additional testing and validation, then to July 29 due to infrastructure issues — both reasons stated verbatim by the Node.js project.
  2. 02
    11 CVEs: 3 HIGH, 5 MEDIUM, 3 LOW.Patched as v22.23.2, v24.18.1, and v26.5.1 across the three active lines, alongside bundled undici and llhttp dependency refreshes. Node 20 and older are End-of-Life and receive nothing.
  3. 03
    Two of the three HIGHs are HTTP/2 memory bugs.CVE-2026-56846 lets retained headers bypass the maxSessionMemory limit (memory-exhaustion DoS); CVE-2026-56848 is a re-entrant send heap-use-after-free — a crash/RCE-class memory-safety bug, not just a DoS.
  4. 04
    The third HIGH over-grants Permission Model access.CVE-2026-58043 is a path-matching flaw in the --permission allowlist logic that can let sandboxed code read or write outside its intended paths. It is the only July CVE with a published CVSS score so far: 7.5, sourced from HackerOne.
  5. 05
    Patch order should follow exposure, not the CVE list.Services terminating HTTP/2 directly and anything relying on --permission for sandboxing should patch first; mTLS client-cert setups follow; the sqlite, dns, and zlib mediums only matter if you use those specific code paths.

01What ShippedThree lines patched, eleven CVEs closed.

On July 29, 2026, the Node.js project published new versions of all three active release lines: v22.23.2 on the 22.x line, v24.18.1 on 24.x, and v26.5.1 on 26.x. The accompanying security advisory enumerates 11 CVEs — 3 HIGH, 5 MEDIUM, and 3 LOW by the project’s own severity labels — spanning HTTP/2, the Permission Model, the HTTPS Agent, and the node:sqlite, dns, and node:zlib modules.

The release also refreshes two bundled dependencies across all three lines: undici moves to 8.9.0, 7.29.0, and 6.28.0 per line, and llhttp moves to 9.4.3. If you pin or audit transitive HTTP internals, those bumps ride along with the runtime upgrade.

One scoping note that has not changed since June’s Node.js security release: Node 20 and every earlier line are End-of-Life and receive no patches from this release. If you are still running Node 20 in production, the July CVE list is another entry in the growing pile of unfixed exposure — the only remediation is a line upgrade.

Release snapshot
Node.js shipped 11 CVE fixes on July 29, 2026 as v22.23.2, v24.18.1, and v26.5.1 — 3 HIGH, 5 MEDIUM, 3 LOW per the nodejs.org advisory. Bundled undici (8.9.0 / 7.29.0 / 6.28.0) and llhttp (9.4.3) refreshed across all lines. No public proof-of-concept or confirmed in-the-wild exploitation for any of the 11 at release time.

02The SlipTwo delays, two different reasons.

The release was originally planned for on or shortly after Monday, July 27. It slipped twice, and the project documented both slips on the advisory itself. The first update, dated July 27, reads: “The Node.js project is delaying the planned security releases until Tuesday, July 28, 2026 due to the need for additional testing and validation.” The second, dated July 28: “The Node.js project is delaying the planned security releases until Wednesday, July 29, 2026 due to infrastructure issues.”

Two consecutive one-day slips, for two different stated reasons — first validation, then infrastructure. That is a scheduling fact, not a severity signal: Node.js has slipped security-release dates before without it saying anything about fix quality. If anything, delaying a security release to finish testing is the behavior you want from a runtime your production traffic depends on.

The more useful lesson is operational. Even a project as mature as Node.js — one that pre-announces its security releases with dates and severity ceilings, the same discipline Vercel adopted with its monthly Next.js security-release program — cannot guarantee the date. Teams that scheduled a patch window for Monday morning got the actual artifacts on Wednesday. Build slack into patch windows that key off pre-announcements; treat the announced date as the earliest possible start, not a commitment.

03Highest SeverityThe three HIGH CVEs, in plain English.

Three of the eleven CVEs carry the project’s HIGH label, and they split cleanly into two threat models: remote attackers hitting your HTTP/2 surface, and untrusted code escaping the sandbox you built with --permission.

HIGH · HTTP/2
CVE-2026-56846
maxSessionMemory bypass

Retained header blocks slip past the HTTP/2 session memory accounting ceiling, enabling remote memory-exhaustion denial of service against any process terminating HTTP/2 directly. Reported by leduckhuong, fixed by Matteo Collina.

Affects 22.x / 24.x / 26.x
HIGH · HTTP/2
CVE-2026-56848
re-entrant send → use-after-free

A re-entrant send call during receive processing triggers a heap-use-after-free in the nghttp2-backed HTTP/2 code path — a crash/RCE-class memory-safety bug, not just a DoS. Reported by hahahkim, fixed by Matteo Collina.

Memory-safety class
HIGH · Permission Model
CVE-2026-58043
--permission allowlist over-grant

A boundary-handling flaw in the radix-tree structure backing --permission path matching can let code that should be confined to specific paths read or write outside the intended allowlist. Reported by sy2n0, fixed by Rafael Gonzaga.

CVSS 7.5 (HackerOne)

The two HTTP/2 bugs matter most if Node terminates HTTP/2 traffic directly — no reverse proxy or load balancer downgrading to HTTP/1.1 in front. The use-after-free (CVE-2026-56848) deserves particular respect: use-after-free bugs in a network-facing parser are the classic raw material for remote code execution, even when no public exploit exists yet. The Permission Model bug (CVE-2026-58043) inverts the threat model — it is not about attackers outside your process but about code inside it that you deliberately sandboxed, which is exactly the scenario teams running AI-generated or third-party code under --permission care about.

“Node.js runs a huge share of the world's backend services. So even a memory bug can expose many production servers.”— Do Son, Security Online

04Scoring HonestyThe CVSS transparency gap nobody mentions.

Here is a detail most same-day coverage papers over: as of publication, only one of the three HIGH CVEs has a numeric CVSS score in any public vulnerability database we could check. CVE-2026-58043 carries a 7.5 (HIGH) with vector CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:N — scored by HackerOne and surfaced via the NVD entry, though NVD’s own enrichment was still pending. The two HTTP/2 HIGHs, CVE-2026-56846 and CVE-2026-56848, had no published NVD record at all at release time — reserved-but-not-yet-published status, which is normal in the first days after a Node.js security release.

That gap has a practical consequence: any tooling, dashboard, or policy that gates patching on a numeric CVSS threshold will simply not see two of the three most serious bugs in this release. If your vulnerability-management process keys off NVD scores, the July release is a live demonstration of why severity labels from the upstream project — plus your own exposure analysis — have to drive urgency in the window before enrichment lands.

Do not invent scores
If a vendor writeup or scanner shows numeric CVSS scores for CVE-2026-56846 or CVE-2026-56848, check the provenance — neither had a published NVD score at release time. Key your upgrade urgency off the nodejs.org severity labels (both HIGH) and your HTTP/2 exposure, not a number that does not exist yet.

05PatternsWhere the eleven CVEs cluster.

Sort the 11 CVEs by subsystem instead of severity and two patterns jump out. First: HTTP surfaces account for three of the eleven — both HTTP/2 HIGHs plus a LOW-severity HTTP parser header-truncation bug (CVE-2026-58044) that can enable request smuggling. Second: the Permission Model also accounts for three — the HIGH path-matching over-grant plus two LOWs where trace events (CVE-2026-56847) and process reports (CVE-2026-58039) can write outside the allowlist.

July 2026 CVEs by subsystem · count of 11 total

Source: nodejs.org July 2026 security-release advisory, grouped by subsystem (bar length scaled to largest group)
HTTP/2 + HTTP parserCVE-2026-56846 · 56848 (both HIGH) · 58044 (LOW)
3 of 11
Permission ModelCVE-2026-58043 (HIGH) · 56847 · 58039 (both LOW)
3 of 11
HTTPS Agent / mTLSCVE-2026-56850 · 58040 (both MEDIUM)
2 of 11
node:sqliteCVE-2026-58041 (MEDIUM) · iterator replay re-executes writes
1 of 11
dnsCVE-2026-58042 (MEDIUM) · resolveAny abort on many A records
1 of 11
node:zlibCVE-2026-58045 (MEDIUM) · sync APIs crash on spoofed length
1 of 11

The Permission Model cluster is the one we have not seen anyone else frame as a pattern. Three separate boundary-enforcement bugs in the same feature area, in one release, is a signal about maturity: --permission is a genuinely useful sandboxing primitive, but its allowlist-enforcement edge cases are still being found — one HIGH and two LOWs in July alone. If your architecture treats --permission as a hard security boundary for untrusted code, this release touches your threat model three separate times, and it is reasonable to expect further findings in the same area over the coming release cycles as scrutiny of the feature increases.

The remaining mediums are conditional. Two sit in the HTTPS Agent — reused mTLS identities across PFX certificates (CVE-2026-56850) and session reuse that can skip hostname verification (CVE-2026-58040) — and only bite if you do client-certificate auth or share agents across outbound TLS connections. The node:sqlite iterator-replay bug only matters if you use that module; the dns.resolveAny() abort only if you do bulk any-record lookups; the node:zlib crash only if untrusted input reaches the sync APIs.

06TriageA patch-order matrix for real workloads.

A flat CVE list tells you what was fixed; it does not tell you what to do first. The matrix below re-sorts all 11 CVEs by the question that actually drives urgency for a typical Next.js or API deployment on Node 22, 24, or 26: does this code path run in your service at all? Severity labels are the nodejs.org advisory’s; the applicability column is our own synthesis from each CVE’s affected subsystem.

Patch-order matrix for the 11 Node.js July 2026 CVEs, grouped by subsystem, with severity, applicability condition, and recommended urgency
CVESeverityApplies to you if…This week?
HTTP/2 + HTTP parser
CVE-2026-56846HIGHNode terminates HTTP/2 directly (no proxy downgrading in front) — retained headers bypass maxSessionMemoryYes — first
CVE-2026-56848HIGHSame HTTP/2 exposure — re-entrant send use-after-free is crash/RCE-class, not just DoSYes — first
CVE-2026-58044LOWNode parses raw HTTP behind a proxy — header truncation can enable request smugglingNormal cadence
Permission Model
CVE-2026-58043HIGHYou run --permission as a sandbox for untrusted or AI-generated code — path matching can over-grant filesystem accessYes — first
CVE-2026-56847LOWYou combine --permission with trace events — traces can write outside the allowlistNormal cadence
CVE-2026-58039LOWYou combine --permission with process reports — reports can write outside the allowlistNormal cadence
HTTPS Agent / mTLS
CVE-2026-56850MEDIUMYou do client-certificate (mTLS) auth with PFX certificates — the Agent can reuse identities across certsYes, if mTLS
CVE-2026-58040MEDIUMYou make outbound HTTPS calls through a shared Agent — session reuse can skip hostname verificationYes, if mTLS or shared Agent
Module-specific
CVE-2026-58041MEDIUMYou use the experimental node:sqlite module — SQLTagStore iterator replay can re-execute writesOnly if used
CVE-2026-58042MEDIUMYou do bulk any-record lookups via dns.resolveAny() — responses with many A records can abort the processOnly if used
CVE-2026-58045MEDIUMUntrusted input reaches node:zlib sync APIs — a spoofed TypedArray length can crash the processOnly if used

The honest summary of that matrix: for most Next.js deployments sitting behind Vercel, a CDN, or an HTTP/1.1-terminating load balancer, none of the three HIGHs is directly reachable from the internet — and you should still patch this week, because runtime upgrades get harder the longer you defer them and the mediums cover code paths that have a way of appearing in dependencies you did not audit.

07Month over MonthJuly vs June: fewer CVEs, more HIGHs.

Node.js also shipped a security release on June 18, 2026 — v22.23.0, v24.17.0, and v26.3.1 — covered in our June patch guide. Set the two releases side by side and July is slightly smaller by count but heavier at the top: 11 CVEs against June’s 12, with three HIGHs against June’s two.

July 2026
3 HIGH · 5 MEDIUM · 3 LOW
11CVEs

Shipped July 29 as v22.23.2, v24.18.1, v26.5.1 after two one-day delays. HIGHs split across HTTP/2 (two) and the Permission Model (one).

3 HIGH
June 2026
2 rated HIGH
12CVEs

Shipped June 18 as v22.23.0, v24.17.0, v26.3.1. One more CVE by count than July, but one fewer HIGH — a lighter top end.

2 HIGH
Repeat surface
July HIGHs in HTTP/2
2of 3

Two of July's three HIGHs sit in the same HTTP/2 subsystem. Teams that patched in June and considered HTTP/2 handled are re-exposed on the same surface a month later.

Same subsystem

The repeat-surface point is the one to internalize. HTTP/2 is a complex, stateful protocol implemented on top of nghttp2, and its memory-accounting and stream-lifecycle edges keep producing HIGH-severity findings — two more this month. Projecting forward, the reasonable operating assumption is that HTTP/2 termination in Node will continue to attract security research and continue to produce patch-now CVEs. Architecturally, that strengthens the case for terminating HTTP/2 at a hardened proxy layer and speaking HTTP/1.1 to Node — not because Node is uniquely weak, but because it narrows the runtime surface you have to re-patch every month.

08This WeekWhat to do this week, by exposure.

Four exposure profiles cover most production Node estates. Find yours and act accordingly — the upgrade itself is a patch-level bump within your current line (22.x → v22.23.2, 24.x → v24.18.1, 26.x → v26.5.1), so the change risk is low.

Direct HTTP/2
Node terminates HTTP/2 itself

Both HTTP/2 HIGHs are remotely reachable in this topology — one memory-exhaustion DoS, one crash/RCE-class use-after-free. Patch immediately and consider fronting Node with a proxy longer term.

Patch today
Sandboxing
You rely on --permission

CVE-2026-58043 (CVSS 7.5) undermines the allowlist boundary itself, and two LOWs leak writes via trace events and process reports. Patch today and re-verify what your sandboxed code can actually touch.

Patch today
mTLS clients
Client-cert auth over HTTPS Agent

Two MEDIUMs — identity reuse across PFX certificates and session reuse skipping hostname verification — sit exactly on this path. Patch within the week and audit shared-Agent usage.

Patch this week
Proxied HTTP/1.1
Behind Vercel, a CDN, or an LB

No July CVE is directly internet-reachable in this topology unless you use node:sqlite, bulk dns.resolveAny(), or sync zlib on untrusted input. Fold the bump into your normal deploy cadence — this week, not this quarter.

Normal cadence

Whatever your profile, verify the runtime actually moved: check node --version in the deployed environment, not just the Dockerfile or the engines field. Managed platforms roll runtime patches on their own schedule, and a surprising number of “patched” estates are running the old binary a month later. This is the kind of recurring, checklist-driven work we fold into our web development engagements as standing patch discipline rather than a quarterly scramble — and if you are building agentic systems that execute generated code under --permission, runtime patch latency becomes a security property of the whole system, something we treat as a first-class constraint in AI transformation work.

09ConclusionPatch by exposure, not by list order.

The July release, settled

Eleven CVEs, three HIGH, two delays — and a patch order that depends on your topology.

The July 2026 Node.js security release resolved everything the pre-announcement left open: 11 CVEs, three rated HIGH, patched as v22.23.2, v24.18.1, and v26.5.1 on July 29 after two one-day slips. Two HIGHs sit in HTTP/2, one in the Permission Model, and only one of the three carries a published CVSS score so far — which means severity labels and your own exposure have to drive urgency, not scanner dashboards waiting on NVD enrichment.

The two patterns worth carrying forward: HTTP/2 termination in Node is a recurring HIGH-severity surface — two more this month, after June’s release also touched networking internals — and the Permission Model collected three separate boundary bugs in a single release. If either sits in your architecture, treat this as a patch-today release. If neither does, it is still a patch-this-week release, because low-risk patch-level bumps deferred become high-risk line upgrades later.

The meta-lesson is about process. Node.js pre-announced this release, slipped it twice with stated reasons, and shipped a fully-documented advisory — that is the monthly security cadence the JavaScript ecosystem is converging on. Teams that treat runtime patching as a scheduled, low-drama routine absorbed this release in a morning. Teams that treat each advisory as a surprise will keep finding these weeks expensive.

Ship patches without the scramble

Security releases should be a routine, not an event.

Our team keeps production Node.js and Next.js estates current — runtime patch discipline, security-release triage, and upgrade automation — delivered as standing practice, not an emergency engagement.

Free consultationExpert guidanceTailored solutions
What we work on

Runtime & framework upkeep

  • Node.js / Next.js security-release triage & rollout
  • Patch-window automation across environments
  • HTTP/2 and proxy topology hardening
  • Permission Model sandboxing for AI-generated code
  • Dependency and runtime drift monitoring
FAQ · Node.js July 2026 security release

The questions we get every week.

On July 29, 2026, the Node.js project released v22.23.2, v24.18.1, and v26.5.1 — security updates for the three active release lines (22.x, 24.x, and 26.x). The release patches 11 CVEs: three rated HIGH, five MEDIUM, and three LOW per the project's own advisory. The HIGHs are two HTTP/2 memory bugs (a maxSessionMemory accounting bypass and a re-entrant send use-after-free) plus a Permission Model path-matching flaw that can over-grant filesystem access. The release also refreshes the bundled undici (8.9.0 / 7.29.0 / 6.28.0 per line) and llhttp (9.4.3) dependencies.
Related dispatches

Continue exploring security releases.