Skip to content

Update node to 26.12.1 and node-lts to 24.22.1 (security; upstream eMudhra fix, drop carried patches) - #968

Open
bryan-minimal wants to merge 1 commit into
mainfrom
update-node-26.12.1-lts-24.22.1
Open

bryan-minimal wants to merge 1 commit into
mainfrom
update-node-26.12.1-lts-24.22.1

Conversation

@bryan-minimal

@bryan-minimal bryan-minimal commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Updates node 26.10.0 → 26.12.1 and node-lts 24.19.0 → 24.22.1, both upstream security releases (2026-10-20/21).

Security fixes picked up (from the upstream release notes)

  • node 26.12.1: CVE-2026-106069 / -106072 (tls: reject non-canonical IP addresses, High), CVE-2026-105482 (dns: null bytes in resolve inputs, High), CVE-2026-105483 (tls: IP normalization regression, High), CVE-2026-111497 (brotli, High), CVE-2026-105481 (http agent data guard, Medium), CVE-2026-106074 (crypto random caches across snapshots, Medium), CVE-2026-106070 (zlib ZIP headers, Low).
  • node-lts 24.22.1: the 24.x backports of the same set, plus OpenSSL sources 3.5.9.
  • Both carry the CVE-2026-111943 (eMudhra) fixes upstream: tls: reject chains containing blocked public keys nodejs/node#66871 (tls: reject chains containing blocked public keys) and #66877 (root certificates → NSS 3.131.1).

Carried patches dropped (now upstream)

  • cve-2026-111943-tls-spki-blocklist.patch and cve-2026-111943-drop-emsign-roots.patch (both packages, from SECURITY: node, node-lts: backport CVE-2026-111943 eMudhra fixes (nodejs/node#66871, #66877) #946): upstream now contains both changes.
  • node's lief-1.x-macho-section-ctor.patch: 26.12.1 handles the LIEF 1.x API itself (#if LIEF_VERSION_MAJOR >= 1 … Section::create(...) in src/node_sea_bin.cc). I confirmed the old patch neither applies nor reverse-applies to 26.12.1, so upstream rewrote that code rather than taking the patch.
  • With no patches left, patch is dropped from both packages' build deps.

Kept: fail-closed guards and tests

  • build.sh in both packages now checks upstream's fix instead of applying it. The build fails if kBlockedSPKIs or InstallCertVerifyCallback(sc->ctx_.get()) is missing from src/crypto/crypto_context.cc, or if emSign ECC Root CA - G3 reappears in src/node_root_certs.h. Run against the real 26.12.1 and 24.22.1 sources: pass. Negative control (the root put back): fails, exit 1.
  • SECURITY: node, node-lts: backport CVE-2026-111943 eMudhra fixes (nodejs/node#66871, #66877) #946's standalone tests stay as they were: emsign_roots_removed, and spki_blocklist_rejects_emudhra_intermediate, which uses a local TLS server with the real compromised intermediate and expects CERT_REVOKED. They now exercise upstream's code.

Source change for node

node's source was a mirrored GitHub tag archive (gs://…/node-26.10.0.tar.gz, sha dadc307a…, which is not nodejs.org's node-v26.10.0.tar.gz, 093087c5…). It now uses nodejs.org's release tarball, the same as node-lts. Both shas were verified against nodejs.org's SHASUMS256.txt (node 717244a8…, node-lts 001773d9…). build.sh extracts node-v${version} accordingly.

Checks

  • nickel format --check clean, bash -n clean, MINIMAL_SCIENCE_MODE=1 mip dump --packages evaluates on amd64 and arm64.
  • Rebuild scope: node, node-lts and the npm ecosystem behind node-lts (~26 dependents).

Heads-up

  • pkgs#817 (llhttp wasm rebuild) also edits packages/node*/build.{ncl,sh}; whichever merges second needs a merge from main.
  • Closes gominimal/pkgmgr-rs#1016 (drop the eMudhra backport once upstream releases).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Updates

    • Updated Node.js to 26.12.1 and Node.js LTS to 24.22.1.
    • Builds now use official Node.js release archives.
  • Security

    • Included upstream protections against compromised emSign and eMudhra certificates.
    • TLS, DTLS, and QUIC certificate verification now blocks affected certificate keys and rejects compromised emSign root certificates.
    • Added build-time checks to ensure these protections remain present.

…d patches)

Both are upstream security releases and both carry the CVE-2026-111943
fixes (nodejs/node#66871 SPKI blocklist, #66877 NSS 3.131.1 roots), so the
backports from #946 are dropped; node 26.12.1 also handles the LIEF 1.x
Section API itself, so its LIEF patch goes too, and with it the `patch`
build dep. build.sh now fails closed if a future version regresses either
fix. node moves to nodejs.org's release tarball (same as node-lts), sha
verified against SHASUMS256.txt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bryan-minimal
bryan-minimal requested a review from a team as a code owner October 21, 2026 23:36
@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: gominimal/pkgs/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 5594f426-9857-448a-b656-af1d0d807338
📥 Commits

Reviewing files that changed from the base of the PR and between a19e4dc and 28b8257.

📒 Files selected for processing: 9
  • packages/node-lts/build.ncl
  • packages/node-lts/build.sh
  • packages/node-lts/cve-2026-111943-drop-emsign-roots.patch
  • packages/node-lts/cve-2026-111943-tls-spki-blocklist.patch
  • packages/node/build.ncl
  • packages/node/build.sh
  • packages/node/cve-2026-111943-drop-emsign-roots.patch
  • packages/node/cve-2026-111943-tls-spki-blocklist.patch
  • packages/node/lief-1.x-macho-section-ctor.patch
💤 Files with no reviewable changes: 5
  • packages/node/cve-2026-111943-drop-emsign-roots.patch
  • packages/node-lts/cve-2026-111943-drop-emsign-roots.patch
  • packages/node/lief-1.x-macho-section-ctor.patch
  • packages/node-lts/cve-2026-111943-tls-spki-blocklist.patch
  • packages/node/cve-2026-111943-tls-spki-blocklist.patch

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 2 reviews per hour.

📝 Walkthrough

Node and Node LTS are updated to releases that include the upstream CVE fixes. The local CVE patches and the Node LIEF compatibility patch are removed. Build scripts check for the upstream protections and absence of the compromised emSign root.

Changes: Node release adoption

Layer / File(s) Summary
Select upstream Node releases
packages/node/build.ncl, packages/node-lts/build.ncl
Node updates to 26.12.1 and Node LTS to 24.22.1. Node now uses the official release archive. Both package declarations remove local patch dependencies.
Verify upstream fixes and remove local patches
packages/node/build.sh, packages/node-lts/build.sh, packages/node/*cve-2026-111943*.patch, packages/node-lts/*cve-2026-111943*.patch, packages/node/lief-1.x-macho-section-ctor.patch
Build scripts check for the SPKI blocklist and verification callback, and fail if the emSign root remains. The local CVE patches and Node LIEF patch are deleted.

Priority: ⬆️ High

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Possibly related issues

  • pkgmgr-rs issue 1022 — The PR updates both Node packages, removes the carried CVE patches, and checks for the upstream fixes described by this tracker.

Suggested reviewers: mitodrummer, msample

Merge Risk: ⚪ Minimal · up to 28b82

The release sources and LIEF compatibility checks found no issue requiring a change before merge.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly identifies the Node.js version updates and the removal of carried security patches. It accurately summarizes the main changes.
Linked Issues check Passed Issue [#1016] requires Node 26.x and 24.x LTS releases that contain both CVE-2026-111943 fixes, deletion of both carried patches, and protection against double application. The PR sets versions to 26.…
Out of Scope Changes check Passed The changes stay within Issue [#1016]. The node source-tarball correction and LIEF patch removal support the required version bump and the new upstream source. The fail-closed build guards and standal…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Full details: Linked Issues check

Explanation

Issue [#1016] requires Node 26.x and 24.x LTS releases that contain both CVE-2026-111943 fixes, deletion of both carried patches, and protection against double application. The PR sets versions to 26.12.1 and 24.22.1, uses verified nodejs.org release checksums, deletes both patch files for each package, removes the patch dependencies, and removes patch application commands. Both build scripts fail when the upstream SPKI blocklist or certificate callback is absent. The package tests check removal of all three compromised emSign roots and reject a real blocked intermediate with CERT_REVOKED.

Full details: Out of Scope Changes check

Explanation

The changes stay within Issue [#1016]. The node source-tarball correction and LIEF patch removal support the required version bump and the new upstream source. The fail-closed build guards and standalone TLS/root tests verify that the carried fixes were replaced by upstream fixes. No unrelated implementation or test changes are shown.

Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2 files. (2 skipped: 2 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant