Skip to content

Node v24.18.1 nsolid v6.3.4 release - #503

Merged
santigimeno merged 17 commits into
node-v24.x-nsolid-v6.xfrom
node-v24.18.1-nsolid-v6.3.4-release
Jul 31, 2026
Merged

Node v24.18.1 nsolid v6.3.4 release#503
santigimeno merged 17 commits into
node-v24.x-nsolid-v6.xfrom
node-v24.18.1-nsolid-v6.3.4-release

Conversation

@santigimeno

@santigimeno santigimeno commented Jul 29, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features

    • Added Node.js 24.18.1 security release information.
    • Added configurable HTTP request header-pair limits.
    • Improved HTTPS connection reuse and certificate validation behavior.
    • Added stronger permission checks for reports and trace event files.
  • Bug Fixes

    • Improved HTTP caching, date parsing, cookie validation, DNS record handling, HTTP/2 memory accounting, and SQLite iterator behavior.
    • Invalid header, compression, and content-length inputs now produce clearer errors.
  • Documentation

    • Clarified HTTP/2 memory accounting and HTTPS connection reuse rules.

richardlau and others added 17 commits June 23, 2026 22:58
Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: nodejs/node#63752
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
CVE-ID: CVE-2026-56846
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com>
PR-URL: nodejs-private/node-private#927
CVE-ID: CVE-2026-56847
Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: nodejs-private/node-private#921
Refs: https://hackerone.com/reports/3833629
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
CVE-ID: CVE-2026-56848
SQLTagStore Run/Iterate/Get/All reset the shared cached statement via
raw sqlite3_reset(), bypassing ResetStatement() and its reset_generation_
bump, so live iterators were never invalidated. Also mark the iterator
done on SQLITE_DONE so it cannot restart the statement.

PR-URL: nodejs-private/node-private#896
Refs: https://hackerone.com/reports/3564941
Reviewed-By: Robert Nagy <ronagy@icloud.com>
CVE-ID: CVE-2026-58041
Refs: https://hackerone.com/reports/3795657
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com>
PR-URL: nodejs-private/node-private#929
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
CVE-ID: CVE-2026-58042
PR-URL: nodejs/node#64713
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: nodejs-private/node-private#935
Refs: nodejs-private/llhttp-private#244
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This is a security release.

Notable changes:

* (CVE-2026-56846) http2: retain header memory in session accounting (Matteo Collina) – High
* (CVE-2026-56848) http2: defer rst stream while in scope (Matteo Collina) – High
* (CVE-2026-58043) permission: avoid granting radix split nodes (RafaelGSS) – High
* (CVE-2026-56850) https: distinguish PFX object-array agent keys (RafaelGSS) – Medium
* (CVE-2026-58040) https: bind identity checks to session reuse (Matteo Collina) – Medium
* (CVE-2026-58041) sqlite: invalidate tag store iterators on statement reset (Matteo Collina) – Medium
* (CVE-2026-58042) dns: handle large resolveAny address replies (RafaelGSS) – Medium
* (CVE-2026-58045) zlib: throw on out-of-bounds write buffers (RafaelGSS) – Medium
* (CVE-2026-56847) permission: enforce fs write permission for trace events (RafaelGSS) – Low
* (CVE-2026-58039) permission: check final report output path (RafaelGSS) – Low
* (CVE-2026-58044) http: reject requests exceeding max header count (Matteo Collina) – Low
* deps: update llhttp to 9.4.3 (Paolo Insogna)
* deps: update undici to 7.29.0 (Node.js GitHub Bot)

PR-URL: nodejs-private/node-private#937
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com>
2026-07-29 Node.js v24.18.1 Krypton (LTS) Release
Git-EVTag-v0-SHA512: 04092518acce745fae797d9ee29d21abd661e3b4808875a64530244372d900b2b96f8f531c338867e927e299992c979b6782372a6ca036975042ecde3218bdda
Signed-off-by: Santiago Gimeno <santiago.gimeno@gmail.com>
@santigimeno
santigimeno requested a review from RafaelGSS July 29, 2026 14:51
@santigimeno santigimeno self-assigned this Jul 29, 2026
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Node.js 24.18.1 updates bundled llhttp and undici versions, strengthens HTTP/cache/cookie validation, adjusts HTTPS reuse and filesystem permission handling, fixes native runtime accounting and bounds checks, adds generated FFI build files, and introduces regression tests.

Changes

Node.js 24.18.1 release

Layer / File(s) Summary
Release and package metadata
CHANGELOG.md, src/node_version.h, src/undici_version.h, deps/llhttp/*, deps/undici/*, doc/changelogs/*
Version constants, bundled dependency versions, and Node.js/NSolid changelogs are updated for 24.18.1.
llhttp parser state machine
deps/llhttp/src/llhttp.c
Generated parser state numbering and error transitions are updated alongside llhttp 9.4.3 metadata.
Undici cache and validation
deps/undici/src/lib/cache/*, deps/undici/src/lib/handler/*, deps/undici/src/lib/interceptor/cache.js, deps/undici/src/lib/util/*, deps/undici/src/lib/web/cookies/*
Cache-control, Vary, date, age, revalidation, header, retry, and cookie validation logic is tightened.
HTTPS agent behavior
lib/https.js, deps/undici/undici.js
Per-request identity checks disable incompatible socket/session reuse, PFX-based agent keys are stabilized, and invalid derived header values are rejected.
Native runtime and permissions
src/cares_wrap.cc, src/node_http2.*, src/node_http_parser.cc, src/node_report.cc, src/node_sqlite.cc, src/node_trace_events.cc, src/node_zlib.cc, src/permission/*, src/tracing/*, lib/internal/process/report.js
DNS buffers, HTTP/2 memory tracking, header limits, report paths, SQLite iterators, trace permissions, zlib bounds, and permission-tree handling are updated.
FFI fixture build
test/ffi/fixture_library/build/*
Generated node-gyp configuration and Makefiles build the FFI shared-library fixture.
Regression coverage
test/parallel/*
New and updated tests cover DNS, HTTP limits, HTTP/2 behavior, HTTPS reuse, permissions, SQLite iterators, and zlib invalid inputs.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested reviewers: rafaelgss

Poem

A rabbit checks the headers twice,
Counts cache hops and TLS mice.
The parser states now neatly align,
While safe paths glow in moonlit shine.
“24.18.1!” the burrow sings—
Fresh fixes tucked beneath its wings.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.77% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the release update to Node v24.18.1 and N|Solid v6.3.4.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch node-v24.18.1-nsolid-v6.3.4-release

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Biome (2.5.5)
test/parallel/test-permission-fs-write-trace-events.js

File contains syntax errors that prevent linting: Line 45: Illegal return statement outside of a function

test/parallel/test-permission-fs-write-report.js

File contains syntax errors that prevent linting: Line 22: Illegal return statement outside of a function


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

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​fast-check@​4.8.0 ⏵ 4.9.0100 +1100100 +189100
Updatednpm/​ws@​8.21.0 ⏵ 8.21.19910010096100

View full report

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lib/internal/process/report.js`:
- Around line 33-40: Use the final report path for all permission checks: in
lib/internal/process/report.js lines 33-40, when file is absent, select
nr.getDirectory() when configured and fall back to process.cwd() only if no
directory is configured; in src/node_report.cc lines 875-887, remove the
permission check against the raw name and retain the check against the
constructed pathname.

In `@src/node_trace_events.cc`:
- Around line 88-93: Authorize each resolved trace rotation path rather than
treating permission for rotation 1 as covering all files: update the enable-time
check in src/node_trace_events.cc (lines 88-93), enforce write permission for
every path opened by NodeTraceWriter in src/tracing/node_trace_writer.cc (lines
81-87), and extend test/parallel/test-permission-fs-write-trace-events.js (lines
58-70) to permit only rotation 1, force a second rotation, and verify rotation 2
is denied.

In `@test/ffi/fixture_library/build/config.gypi`:
- Around line 554-555: Replace the machine-specific absolute values for nodedir
and python in the generated configuration with paths derived from the current
checkout and configured Python environment, matching the existing gyp_main.py
regeneration recipe in Makefile. Ensure regeneration works from any developer
machine without relying on /home/rafaelgss or /usr/bin/python3.12.

In `@test/ffi/fixture_library/build/ffi_test_library.target.mk`:
- Around line 40-47: Replace the developer-specific absolute paths in INCS_Debug
and INCS_Release with portable paths derived from the fixture’s configured
build/output variables, matching the existing regen-only include path
conventions. Ensure the cc/cxx rules rebuilding ffi_test_library.o resolve Node,
OpenSSL, uv, zlib, and V8 headers correctly on any machine.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e9326ed1-2b76-4eef-beab-84b7387b34a4

📥 Commits

Reviewing files that changed from the base of the PR and between 447b0e5 and b94a59d.

⛔ Files ignored due to path filters (2)
  • deps/undici/src/package-lock.json is excluded by !**/package-lock.json
  • test/node_trace.1.log is excluded by !**/*.log
📒 Files selected for processing (57)
  • CHANGELOG.md
  • deps/llhttp/.gitignore
  • deps/llhttp/CMakeLists.txt
  • deps/llhttp/include/llhttp.h
  • deps/llhttp/src/llhttp.c
  • deps/undici/src/lib/cache/memory-cache-store.js
  • deps/undici/src/lib/cache/sqlite-cache-store.js
  • deps/undici/src/lib/core/request.js
  • deps/undici/src/lib/dispatcher/client-h1.js
  • deps/undici/src/lib/handler/cache-handler.js
  • deps/undici/src/lib/handler/cache-revalidation-handler.js
  • deps/undici/src/lib/handler/retry-handler.js
  • deps/undici/src/lib/interceptor/cache.js
  • deps/undici/src/lib/llhttp/wasm_build_env.txt
  • deps/undici/src/lib/util/cache.js
  • deps/undici/src/lib/util/date.js
  • deps/undici/src/lib/web/cookies/util.js
  • deps/undici/src/package.json
  • deps/undici/undici.js
  • doc/api/http2.md
  • doc/api/https.md
  • doc/changelogs/CHANGELOG_V24.md
  • doc/changelogs/NSOLID_CHANGELOG_V6_NODE_V24.md
  • lib/https.js
  • lib/internal/process/report.js
  • src/cares_wrap.cc
  • src/node_http2.cc
  • src/node_http2.h
  • src/node_http_parser.cc
  • src/node_report.cc
  • src/node_sqlite.cc
  • src/node_trace_events.cc
  • src/node_version.h
  • src/node_zlib.cc
  • src/permission/fs_permission.h
  • src/tracing/node_trace_writer.cc
  • src/tracing/node_trace_writer.h
  • src/undici_version.h
  • test/ffi/fixture_library/build/Makefile
  • test/ffi/fixture_library/build/binding.Makefile
  • test/ffi/fixture_library/build/config.gypi
  • test/ffi/fixture_library/build/ffi_test_library.target.mk
  • test/parallel/test-dns-resolveany-ttl-overflow.js
  • test/parallel/test-http-max-headers-count-overflow.js
  • test/parallel/test-http-max-headers-count.js
  • test/parallel/test-http-rawheaders-limit.js
  • test/parallel/test-http2-max-session-memory-stalled-headers.js
  • test/parallel/test-http2-rst-stream-reentrancy.js
  • test/parallel/test-https-agent-checkserveridentity-reuse.js
  • test/parallel/test-https-agent-getname.js
  • test/parallel/test-https-agent-pfx-object-array-reuse.js
  • test/parallel/test-https-max-headers-count.js
  • test/parallel/test-permission-fs-read.js
  • test/parallel/test-permission-fs-write-report.js
  • test/parallel/test-permission-fs-write-trace-events.js
  • test/parallel/test-sqlite-template-tag.js
  • test/parallel/test-zlib-invalid-input.js
💤 Files with no reviewable changes (2)
  • deps/llhttp/.gitignore
  • test/parallel/test-http-rawheaders-limit.js

Comment on lines +33 to +40
let resource = file;
if (resource !== undefined) {
const directory = nr.getDirectory();
if (directory !== '')
resource = `${directory}${sep}${resource}`;
} else {
resource = process.cwd();
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the final report path for every permission check.

A configured report directory is bypassed when file is omitted in JavaScript (process.cwd() is checked), while a relative explicit filename still hits the earlier raw-name check in src/node_report.cc before this final pathname check. A report targeting an allowed directory can therefore be rejected merely because the cwd is denied.

  • lib/internal/process/report.js#L33-L40: when file is absent, use nr.getDirectory() when configured, falling back to process.cwd() only when no report directory exists.
  • src/node_report.cc#L875-L887: remove the earlier raw name permission check and retain the check against the constructed pathname.
📍 Affects 2 files
  • lib/internal/process/report.js#L33-L40 (this comment)
  • src/node_report.cc#L875-L887
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lib/internal/process/report.js` around lines 33 - 40, Use the final report
path for all permission checks: in lib/internal/process/report.js lines 33-40,
when file is absent, select nr.getDirectory() when configured and fall back to
process.cwd() only if no directory is configured; in src/node_report.cc lines
875-887, remove the permission check against the raw name and retain the check
against the constructed pathname.

Comment thread src/node_trace_events.cc
Comment on lines +88 to +93
const std::string filepath = tracing::NodeTraceWriter::GetFilePath(
per_process::cli_options->trace_event_file_pattern, 1);
THROW_IF_INSUFFICIENT_PERMISSIONS(
category_set->env(),
permission::PermissionScope::kFileSystemWrite,
filepath);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Authorize every trace rotation path.

The enable-time check authorizes only ${rotation} = 1. Once NodeTraceWriter rotates, it opens ${rotation} = 2 and later files without another permission check. A narrowly granted trace.1.log path can therefore lead to writes outside the allowed resource set.

  • src/node_trace_events.cc#L88-L93: do not treat authorization of rotation 1 as authorization for all generated files.
  • src/tracing/node_trace_writer.cc#L81-L87: enforce write permission for each resolved rotation path, or associate the writer with an authorization covering the full rotation pattern.
  • test/parallel/test-permission-fs-write-trace-events.js#L58-L70: add coverage that permits only rotation 1, forces a second rotation, and verifies rotation 2 is denied.
📍 Affects 3 files
  • src/node_trace_events.cc#L88-L93 (this comment)
  • src/tracing/node_trace_writer.cc#L81-L87
  • test/parallel/test-permission-fs-write-trace-events.js#L58-L70
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/node_trace_events.cc` around lines 88 - 93, Authorize each resolved trace
rotation path rather than treating permission for rotation 1 as covering all
files: update the enable-time check in src/node_trace_events.cc (lines 88-93),
enforce write permission for every path opened by NodeTraceWriter in
src/tracing/node_trace_writer.cc (lines 81-87), and extend
test/parallel/test-permission-fs-write-trace-events.js (lines 58-70) to permit
only rotation 1, force a second rotation, and verify rotation 2 is denied.

Comment on lines +554 to +555
"nodedir": "/home/rafaelgss/repos/os/node-private/out/Release/addons_headers",
"python": "/usr/bin/python3.12",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🔴 Critical | 🏗️ Heavy lift

Hardcoded developer-machine paths in the generated config.

nodedir and python are absolute paths specific to the original author's machine. This config is fed into the gyp_main.py regeneration recipe (see Makefile), so a rebuild triggered elsewhere (different checkout path or Python install) would fail.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/ffi/fixture_library/build/config.gypi` around lines 554 - 555, Replace
the machine-specific absolute values for nodedir and python in the generated
configuration with paths derived from the current checkout and configured Python
environment, matching the existing gyp_main.py regeneration recipe in Makefile.
Ensure regeneration works from any developer machine without relying on
/home/rafaelgss or /usr/bin/python3.12.

Comment on lines +40 to +47
INCS_Debug := \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/include/node \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/src \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/deps/openssl/config \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/deps/openssl/openssl/include \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/deps/uv/include \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/deps/zlib \
-I/home/rafaelgss/repos/os/node-private/out/Release/addons_headers/deps/v8/include

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🔴 Critical | 🏗️ Heavy lift

Hardcoded developer-machine include paths used directly in compilation.

INCS_Debug/INCS_Release point at /home/rafaelgss/repos/os/node-private/out/Release/addons_headers/.... Unlike the regen-only paths elsewhere, these are used unconditionally by the cc/cxx rules whenever ffi_test_library.o is rebuilt (line 100-101), so compiling this fixture on any other machine/CI will fail with missing Node headers.

Also applies to: 82-89

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/ffi/fixture_library/build/ffi_test_library.target.mk` around lines 40 -
47, Replace the developer-specific absolute paths in INCS_Debug and INCS_Release
with portable paths derived from the fixture’s configured build/output
variables, matching the existing regen-only include path conventions. Ensure the
cc/cxx rules rebuilding ffi_test_library.o resolve Node, OpenSSL, uv, zlib, and
V8 headers correctly on any machine.

@santigimeno
santigimeno merged commit b94a59d into node-v24.x-nsolid-v6.x Jul 31, 2026
19 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants