Skip to content

chore(deps)!: patch critical/high vulnerabilities and drop Node 20 - #33

Merged
cryptotavares merged 1 commit into
mainfrom
chore/security-dependencies-node-lts
Oct 28, 2026
Merged

cryptotavares merged 1 commit into
mainfrom
chore/security-dependencies-node-lts

Conversation

@cryptotavares

Copy link
Copy Markdown
Collaborator

Description

Summary: Patch the dependency versions affected by all 36 open critical/high Dependabot alerts. Drop Node 20 and require the latest security releases: Node 22.23.4 or Node 24.22.1 and newer.

Problem

The committed dependency tree includes critical Tinypool findings and high-severity findings across runtime and development packages. The existing Node range also accepts Node 20 and older, unpatched Node 22/24 releases.

The October Node security release fixes DNS, TLS, and Brotli vulnerabilities. Node rates the highest severity as high, including the Brotli remote-code-execution issue, CVE-2026-111497.

Before: engines = ^20 || ^22 || >=24
        CI = 20.x, 22.x, 24.x
        36 open critical/high Dependabot alerts

After:  engines = ^22.23.4 || >=24.22.1
        CI = 22.23.4, 24.22.1
        No locked version matches those 36 vulnerable ranges

Changes

  1. Security dependencies: Refresh the affected transitive packages within their existing major versions. Raise Vite's minimum to a patched release.
  2. OpenTelemetry: Raise sdk-node to ^0.220.0 and resources to ^2.9.0. This supplies patched Jaeger propagation and removes the vulnerable protobufjs 8.x dependency.
  3. Exact transitive pins: Add narrow resolutions for Tinypool 2.1.0 → 2.1.2 and Undici 8.5.0 → 8.12.3. Their parents pin the vulnerable versions exactly.
  4. Node support: Pin CI to 22.23.4 and 24.22.1, and .nvmrc to 24.22.1. Update Node types, documentation, and Docker examples. Remove the Node-20-only coverage exception and an obsolete lint suppression.
flowchart TD
    A[Open critical and high alerts] --> B[Resolve patched dependency versions]
    B --> C[Replace vulnerable exact pins]
    C --> D[Apply patched Node minimums]
    D --> E[Audit locked and fresh dependency trees]
    E --> F[Build and test on Node 22.23.4 and 24.22.1]

    classDef new fill:#fff3cd,stroke:#d39e00
    class B,C,D new
Loading

Yellow boxes are new.

What changes

Area Before After
Node 20 Supported and tested Unsupported; removed from CI
Node 22 Any 22.x release Minimum 22.23.4; CI tests that release
Node 24 Any 24.x release Minimum 24.22.1; CI tests that release
Local default Floating lts/* 24.22.1
Higher Node majors Allowed Remain allowed by the engine range
Critical/high audit Vulnerable dependency versions No findings in locked or fresh trees

The Node minimum change affects consumers on older runtimes. CI now measures the full coverage thresholds on both supported LTS releases.

Decisions for reviewers

Decision Reason
Limit remediation to critical/high findings Matches the requested scope; includes development and runtime dependencies.
Upgrade the OpenTelemetry parent Removes its vulnerable protobuf dependency without forcing a new protobuf version into an exact-pinned consumer.
Use two descriptor-specific resolutions Patches exact upstream pins without upgrading pi or the formatter. Consumer package managers must resolve their own dependency policies.
Keep the three-day age gate Every added or changed registry version predates the cutoff. No age overrides or package preapprovals are added.
Include tar and zod patches Registry audit reports additional critical/high advisories not present in the 36-alert snapshot.

Review guide

Order Files Focus
1 package.json Node minimums, patched dependency floors, and narrow resolutions
2 yarn.lock Security package versions and required transitive changes
3 .github/workflows/build-lint-test.yml, .nvmrc Exact security-patched Node versions and cache selection
4 vitest.config.mts, pi adapter/runtime, test fixtures Full coverage on both runtimes and removal of obsolete Node 20 claims
5 README.md, Docker integration fixture Supported runtimes and patched container examples
Security package inventory
Package Previous locked version(s) Patched version(s)
@grpc/grpc-js 1.14.3 1.14.6
@opentelemetry/propagator-jaeger 2.7.1 2.9.0
brace-expansion 1.1.14, 2.1.0, 5.0.6 1.1.21, 2.1.7, 5.0.12
browserslist 4.28.2 4.29.4
js-yaml 3.14.2, 4.1.1 3.15.2, 4.3.2
linkify-it 5.0.0 5.0.2
markdown-it 14.1.1 14.3.3
postcss 8.5.14 8.5.31
protobufjs Vulnerable 8.0.1, plus 7.6.6 8.0.1 removed; 7.6.6 remains
source-map-js 1.2.1 1.2.2
tinypool 2.1.0 2.1.2
undici 6.25.0, 8.5.0 6.29.1, 8.12.3
vite 8.0.11 8.3.5
tar 7.5.15 7.5.22
zod 4.5.4 4.6.7

Dependabot alert numbers checked: 151, 150, 149, 148, 147, 143, 142, 137, 136, 135, 125, 124, 122, 118, 102, 98, 97, 90, 88, 82, 81, 64, 63, 61, 58, 57, 56, 49, 45, 42, 17, 16, 7, 5, 4, 3.

GitHub closes alerts after the fixed lockfile reaches the default branch. The branch check compares every resolved package version against each alert's vulnerable range.

Testing
  • Node 24.22.1: yarn typecheck, yarn lint, yarn build, and CI=true yarn test pass.
  • Node 22.23.4: yarn typecheck, yarn build, and CI=true yarn test pass.
  • Both locked-version runs: 653 tests pass, four skip, with no type errors. Coverage thresholds pass.
  • Fresh resolution: remove the lockfile, install with YARN_ENABLE_IMMUTABLE_INSTALLS=false, then run yarn allow-scripts, high-severity audit, and the full suite. All pass; 653 tests pass, four skip. Restore the reviewed lockfile afterward.
  • yarn install --immutable and yarn allow-scripts pass with the reviewed lockfile. Existing denied lifecycle scripts remain denied.
  • yarn npm audit --all --recursive --severity high --json reports no findings for either dependency tree.
  • All 36 critical/high Dependabot ranges have no matches in the reviewed tree.
  • All 88 added or changed npm package resolutions pass a publication-date check against the three-day cutoff.
  • Built-package ATTW analysis confirms included declarations and zero problems.
  • Engine checks reject Node 20 and versions immediately below each new minimum. They accept both exact patched releases.
  • git diff --check passes.

Docker smoke tests remain skipped: the local Docker daemon is unavailable. Protocol fixtures and real in-memory telemetry export are covered by the suite.

References

Checklist

  • Existing suites and compatibility checks pass on the updated runtimes.
  • Critical/high vulnerability checks pass.
  • Changelog changes omitted, consistent with the requested PR convention.

@socket-security

socket-security Bot commented Oct 28, 2026 •

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
Updated@​types/​node@​18.19.130 ⏵ 22.20.5100 +110081 +195100
Updatedvite@​8.0.11 ⏵ 8.3.599 +1100 +2382 +196 -1100
Updated@​opentelemetry/​resources@​2.7.1 ⏵ 2.12.099 +110087 +198100
Updated@​opentelemetry/​sdk-node@​0.217.0 ⏵ 0.220.098 +1100100 +196 +1100

View full report

@socket-security

socket-security Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

All alerts resolved. Learn more about Socket for GitHub.

This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.

Ignoring alerts on:

  • @opentelemetry/sdk-trace@2.9.0
  • @rolldown/binding-android-arm-eabi@1.2.15
  • yaml@2.9.1
  • brace-expansion@1.1.21
  • brace-expansion@5.0.12
  • brace-expansion@2.1.7
  • picomatch@4.0.7
  • @types/node@22.20.5
  • @opentelemetry/resources@2.9.0
  • @opentelemetry/resources@2.12.0
  • @opentelemetry/sdk-node@0.220.0
  • undici-types@6.21.0
  • vite@8.3.5
  • @opentelemetry/core@2.12.0
  • @opentelemetry/core@2.9.0
  • @opentelemetry/api-logs@0.220.0
  • @opentelemetry/configuration@0.220.0
  • @opentelemetry/context-async-hooks@2.9.0
  • @opentelemetry/exporter-logs-otlp-grpc@0.220.0
  • @opentelemetry/exporter-logs-otlp-http@0.220.0
  • @opentelemetry/exporter-logs-otlp-proto@0.220.0
  • @opentelemetry/exporter-metrics-otlp-grpc@0.220.0
  • @opentelemetry/exporter-metrics-otlp-http@0.220.0
  • @opentelemetry/exporter-metrics-otlp-proto@0.220.0
  • @opentelemetry/exporter-prometheus@0.220.0
  • @opentelemetry/exporter-trace-otlp-grpc@0.220.0
  • @opentelemetry/exporter-trace-otlp-http@0.220.0
  • @opentelemetry/exporter-trace-otlp-proto@0.220.0
  • @opentelemetry/exporter-zipkin@2.9.0
  • @opentelemetry/instrumentation@0.220.0
  • @opentelemetry/otlp-exporter-base@0.220.0
  • @opentelemetry/propagator-b3@2.9.0
  • @opentelemetry/propagator-jaeger@2.9.0
  • @opentelemetry/sdk-logs@0.220.0
  • @opentelemetry/sdk-metrics@2.9.0
  • @opentelemetry/sdk-trace-base@2.9.0
  • @opentelemetry/sdk-trace-node@2.9.0
  • undici@8.12.3
  • undici@6.29.1
  • tinypool@2.1.2
  • js-yaml@4.3.2
  • js-yaml@3.15.2
  • tinyglobby@0.2.17
  • lightningcss@1.33.0
  • postcss@8.5.31
  • rolldown@1.2.15
  • markdown-it@14.3.3
  • @grpc/grpc-js@1.14.6
  • @opentelemetry/otlp-grpc-exporter-base@0.220.0
  • @opentelemetry/otlp-transformer@0.220.0
  • zod@4.6.7
  • source-map-js@1.2.2
  • lightningcss-android-arm64@1.33.0
  • lightningcss-darwin-arm64@1.33.0
  • lightningcss-darwin-x64@1.33.0
  • lightningcss-freebsd-x64@1.33.0
  • lightningcss-linux-arm-gnueabihf@1.33.0
  • lightningcss-linux-arm64-gnu@1.33.0
  • lightningcss-linux-arm64-musl@1.33.0
  • lightningcss-linux-x64-gnu@1.33.0
  • lightningcss-linux-x64-musl@1.33.0
  • lightningcss-win32-arm64-msvc@1.33.0
  • lightningcss-win32-x64-msvc@1.33.0
  • nanoid@3.3.20
  • @oxc-project/types@0.155.0
  • @rolldown/binding-android-arm64@1.2.15
  • @rolldown/binding-darwin-arm64@1.2.15
  • @rolldown/binding-darwin-x64@1.2.15
  • @rolldown/binding-freebsd-x64@1.2.15
  • @rolldown/binding-linux-arm-gnueabihf@1.2.15
  • @rolldown/binding-linux-arm64-gnu@1.2.15
  • @rolldown/binding-linux-arm64-musl@1.2.15
  • @rolldown/binding-linux-ppc64-gnu@1.2.15
  • @rolldown/binding-linux-s390x-gnu@1.2.15
  • @rolldown/binding-linux-x64-gnu@1.2.15
  • @rolldown/binding-linux-x64-musl@1.2.15
  • @rolldown/binding-openharmony-arm64@1.2.15
  • @rolldown/binding-win32-arm64-msvc@1.2.15
  • @rolldown/binding-win32-x64-msvc@1.2.15
  • @rolldown/pluginutils@1.0.1
  • linkify-it@5.0.2
  • tar@7.5.22
  • browserslist@4.29.4
  • baseline-browser-mapping@2.11.32
  • caniuse-lite@1.0.30001819
  • electron-to-chromium@1.5.464
  • node-releases@2.0.60
  • update-browserslist-db@1.3.4

View full report

@cryptotavares

Copy link
Copy Markdown
Collaborator Author

@SocketSecurity ignore-all

@cryptotavares
cryptotavares merged commit b5447a1 into main Oct 28, 2026
30 checks passed
@cryptotavares
cryptotavares deleted the chore/security-dependencies-node-lts branch October 28, 2026 14:00
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.

2 participants