July 30, 2026 · 4 min read · Kilat Labs

Node.js July 2026: HTTP/2 and permissions

The Node.js July 2026 security release patches 11 CVEs across 26.x, 24.x and 22.x, and for a second month HTTP/2 and the Permission Model lead the list.

The Node.js July 2026 security release landed on July 29 after two postponements, and for the second month running the two subsystems at the top of the list are HTTP/2 and the Permission Model. If your headless storefront, your build pipeline or your mobile tooling runs on Node, this is a patch-this-week release. The sharper signal is the pattern. June and July both led with the same two attack surfaces, which tells you where Node's real risk sits for a commerce backend, and where you should stop trusting a convenience layer as a security boundary.

What Node.js patched on July 29

Node.js shipped v26.5.1 (Current), v24.18.1 (LTS) and v22.23.2 (LTS) on July 29, 2026, fixing 11 CVEs across all three maintained lines, per the July 2026 security advisory. Three are rated high severity, five medium and three low. The three high-severity flaws are a re-entrant HTTP/2 send that triggers a heap use-after-free (CVE-2026-56848), an HTTP/2 header path that retains data past the maxSessionMemory limit (CVE-2026-56846), and a Permission Model path-matching bug that over-grants filesystem access (CVE-2026-58043). The release also bumps bundled dependencies, moving undici to 8.9.0 on the 26.x line and llhttp to 9.4.3, so the fetch and HTTP-parsing layers get patched underneath your code whether you touch it or not. The rollout slipped twice, from July 27 to July 28 to July 29, so if you scripted an upgrade against the original date it did not fire.

Why HTTP/2 leads the list two months running

HTTP/2 leads because it is stateful, memory-heavy and sits directly on the request path, which makes it the richest source of memory-safety bugs in the runtime. Two of July's three high-severity CVEs are HTTP/2 issues, and June's release before it also carried HTTP/2 handling among its fixes, per the June 2026 advisory. The July heap use-after-free (CVE-2026-56848) is the one to read twice, because a use-after-free on a network-facing protocol is the class of bug that turns into remote code execution far more often than a denial of service does. The maxSessionMemory bypass (CVE-2026-56846) matters for a different reason. That limit exists specifically to stop a client exhausting server memory, so a flaw that lets headers slip past it re-opens a resource-exhaustion door operators thought they had closed with configuration. The practical read for a studio: if you terminate HTTP/2 at Node rather than at a reverse proxy, you are carrying this attack surface in your application tier. Terminating HTTP/2 at nginx or a managed load balancer and speaking HTTP/1.1 to Node removes most of it.

Permission Model vs OS-level isolation

Treat the Permission Model as defense in depth and OS-level isolation as your actual boundary, because the Permission Model keeps leaking in consecutive releases. Node marked the Permission Model stable in v23.5.0, so it is no longer an experimental flag, per the Node permissions documentation. Yet July's CVE-2026-58043 lets crafted paths over-grant filesystem access past what the model was told to allow, and two lower-severity July flaws let trace events and process reports write outside the allowlist. June carried three separate Permission Model bypasses. That is two straight months of a stable, general-availability security feature being walked around. The lesson is not that the Permission Model is useless. It is that a feature living inside the same process it is trying to constrain will always be one parsing bug away from being bypassed, and a path-matching error is exactly that bug. OS-level isolation does not share that weakness. A container with a read-only filesystem, a dropped-capability profile, or a locked-down user account enforces its limits from outside the Node process, so a path-matching mistake inside the runtime cannot reach past it. Use the Permission Model to catch mistakes and narrow blast radius. Use the OS to draw the line an attacker actually has to cross.

What we would change this quarter

Upgrade to v26.5.1, v24.18.1 or v22.23.2 this week, then move HTTP/2 termination and real isolation off the Node process. Pin the exact patched version in your Dockerfile and lockfile rather than a floating major, so the next release is a deliberate bump with a regression run behind it, not a surprise. Check where HTTP/2 terminates: if it is Node, put a reverse proxy in front and let Node speak HTTP/1.1, which sidesteps both HTTP/2 CVEs at the tier that matters. Stop treating the Permission Model as your security boundary and put container-level isolation underneath it, because two consecutive months of bypasses is a pattern, not bad luck. If you also run Next.js, this is the same lesson its July middleware bypass taught from the other end: the convenient in-process guard is not where revenue-critical enforcement belongs. We wire runtime version pinning and the monthly Node and framework cadence into the deployment automation on our headless commerce builds, and we treat the isolation boundary as build scope on AI-native surfaces where Node runs real work on untrusted input. The June triage still applies too. Our note on that release covers the TLS and permission fixes in more depth. Patch day stays calm for the teams who never put a boundary somewhere a single parsing bug could erase.

Where to dig deeper

Related reading

Want this done right on your store?

We engineer premium e-commerce end-to-end, Magento Hyvä, Shopify Plus, mobile and automation. A two-week store audit turns ideas like the one above into real numbers and a prioritised roadmap for your store.

Get new posts in your inbox

Two a month at most. Hyvä, automation, motion budgets and the boring parts of shipping. No filler, no spam.

We use your address only to send new posts. Unsubscribe any time.