Skip to content

fix(deps): resolve node-tar CVE-2026-23745 via electron-builder 26 bump - #163

Merged
PAMulligan merged 2 commits into
mainfrom
fix/deps-node-tar-cve-2026-23745
Aug 24, 2026
Merged

fix(deps): resolve node-tar CVE-2026-23745 via electron-builder 26 bump#163
PAMulligan merged 2 commits into
mainfrom
fix/deps-node-tar-cve-2026-23745

Conversation

@PAMulligan

@PAMulligan PAMulligan commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes the High-severity node-tar path-traversal / symlink-poisoning advisories (CVE-2026-23745, Dependabot alert #33) reported in #157. The advisories are fixed in tar 7.5.3+, but tar was transitively pinned at 6.2.1 and could not be bumped directly.

Pinning chain identified:

  • electron-builder@^25.0.0 (packages/gui) → app-builder-lib@25.1.8tar@6.2.1
  • and app-builder-lib@25.1.8@electron/rebuild@3.6.1node-gyp@9.4.1cacache@16.1.3tar@6.2.1

These were the only tar consumers in the lockfile.

Fix: bump electron-builder to ^26.0.0 (resolves 26.15.3, published 2026-06-09 — well past the release-age cooldown). app-builder-lib 26 declares tar: ^7.5.7 and @electron/rebuild@^4node-gyp@^12tar: ^7.5.4, so the whole tree now resolves a single tar@7.5.22. The lockfile refresh also replaces the stale auto-installed electron-builder-squirrel-windows@25.1.8 peer with 26.15.3.

pnpm audit no longer reports any node-tar advisories (--prod is fully clean). The remaining dev-tooling audit findings (ws, js-yaml, brace-expansion, esbuild-via-vite-5 in electron-vite's chain, …) are outside the scope of #157.

The electron-builder.yml config uses only keys still valid in v26 (nsis/dmg/AppImage targets, signAndEditExecutable), so no config changes were needed.

⚠️ BREAKING: Node.js baseline raised to >=22.12.0

@electron/rebuild@4.x (required by electron-builder 26) declares engines.node >=22.12.0; with the repo's engine-strict=true, pnpm install hard-fails on Node 20 (the commitlint CI job caught this on the first push). Node 20 reached end-of-life in April 2026, so this PR raises the baseline rather than pinning the toolchain back:

  • engines.node>=22.12.0 in root, @flavian/gui, @flavian/pipeline
  • 7 CI workflows moved from node-version: 20 to 22
  • README, docs/PREREQUISITES.md, and scripts/check-prerequisites.sh minimums updated

The second commit carries a BREAKING CHANGE footer so release-please cuts a major.

Closes #157

Test plan

  • pnpm gui:test — 53/53 pass
  • pnpm gui:typecheck — clean
  • pnpm gui:lint — clean
  • pnpm gui:build — builds
  • electron-builder --version → 26.15.3 (CLI loads under the new major)
  • pnpm audit --prod — no known vulnerabilities; no tar advisories in full audit
  • CI green (Lighthouse job passed on rerun — first attempt hit a slow runner, scores unrelated to this change)

Note: pnpm test:init fails identically on main in this environment (awk syntax error in scripts/canva-fse/convert-html-to-blocks.sh, a local mawk/gawk incompatibility) — unrelated to this change.

🤖 Generated with Claude Code

Paul Mulligan and others added 2 commits August 23, 2026 21:52
tar@6.2.1 was pinned transitively by electron-builder 25
(app-builder-lib 25.1.8 directly, and via @electron/rebuild 3.6.1 →
node-gyp 9.4.1 → cacache 16.1.3). Bumping @flavian/gui's
electron-builder to ^26.0.0 (resolves 26.15.3) moves the whole chain
to tar 7.5.22, clearing the High-severity node-tar path-traversal /
symlink-poisoning advisories (fixed in tar 7.5.3+).

The lockfile refresh also drops the stale electron-builder-squirrel-
windows@25.1.8 auto-installed peer in favor of 26.15.3, removing the
last tar 6 consumer.

Closes #157

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
electron-builder 26 pulls @electron/rebuild 4.x, which declares
engines.node >=22.12.0 — with engine-strict=true this makes
`pnpm install` fail on Node 20 (as the commitlint CI job showed).
Node 20 reached end-of-life in April 2026, so raise the baseline
instead of pinning the toolchain back:

- engines.node >=22.12.0 in root, @flavian/gui, @flavian/pipeline
- all CI workflows on node-version 22 (7 were still on 20)
- README / PREREQUISITES / check-prerequisites.sh minimums updated

BREAKING CHANGE: Node.js >=22.12.0 is now required (was >=20.0.0).
Node 20 is end-of-life and cannot install the electron-builder 26
toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@PAMulligan
PAMulligan merged commit 66594f5 into main Aug 24, 2026
24 of 25 checks passed
@PAMulligan
PAMulligan deleted the fix/deps-node-tar-cve-2026-23745 branch August 24, 2026 02:07
PAMulligan pushed a commit that referenced this pull request Aug 24, 2026
…+ in-range dep sweep; docs accuracy pass

Weekly dependency + security sweep (Wk 3):

- esbuild (Dependabot #31, GHSA-67mh-4wv8-2f99): the vulnerable
  esbuild@0.21.5 was pulled solely by electron-vite@2.3.0. Bump
  electron-vite to ^5.0.0 (Dec 2025), whose esbuild ^0.25.11 is out
  of the affected range (<=0.24.2). This also fixes the standing
  unmet-peer warning: electron-vite 5 accepts vite ^6, matching the
  installed vite 6.4.3.
- tar ×7 (Dependabot #33-#38, #59): already resolved on main by
  #163 (electron-builder 26 moved the tree to tar 7.5.22 >= 7.5.16).
- In-range `pnpm -r update` sweep: clears the remaining transitive
  audit findings (ws, js-yaml, brace-expansion, fast-uri, ip-address,
  nanoid, postcss). pnpm audit is down from 20 findings to 1:
  extract-zip <=2.0.1 (GHSA-jmr9-qjv8-65gv) has no patched release
  and sits in install-time tooling (electron / puppeteer downloads).
- minimumReleaseAge: fast-xml-parser held at ~5.10.1 (2026-07-16);
  5.11.0 is only 7 days old. All other resolved versions are 13+
  days old.
- Docs accuracy pass: README counts verified correct (53 agents,
  12 skills, 6 plugins); no version badges exist; install entry
  points verified (wordpress-local.sh subcommands, flavian CLI,
  init wizard). Updated 5 stale "Node.js 20+" references in
  docs/mcp-setup.md, docs/E2E-VALIDATION.md,
  docs/MCP-TROUBLESHOOTING.md to 22.12+ (baseline raised in #163).

Closes #158

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PAMulligan pushed a commit that referenced this pull request Aug 24, 2026
… sweep + docs pass

Weekly dependency + security sweep (Wk 3):

- esbuild (Dependabot #31, GHSA-67mh-4wv8-2f99): the vulnerable
  esbuild@0.21.5 was pulled solely by electron-vite@2.3.0. Bump
  electron-vite to ^5.0.0 (Dec 2025), whose esbuild ^0.25.11 is out
  of the affected range (<=0.24.2). This also fixes the standing
  unmet-peer warning: electron-vite 5 accepts vite ^6, matching the
  installed vite 6.4.3.
- tar ×7 (Dependabot #33-#38, #59): already resolved on main by
  #163 (electron-builder 26 moved the tree to tar 7.5.22 >= 7.5.16).
- In-range `pnpm -r update` sweep: clears the remaining transitive
  audit findings (ws, js-yaml, brace-expansion, fast-uri, ip-address,
  nanoid, postcss). pnpm audit is down from 20 findings to 1:
  extract-zip <=2.0.1 (GHSA-jmr9-qjv8-65gv) has no patched release
  and sits in install-time tooling (electron / puppeteer downloads).
- minimumReleaseAge: fast-xml-parser held at ~5.10.1 (2026-07-16);
  5.11.0 is only 7 days old. All other resolved versions are 13+
  days old.
- Docs accuracy pass: README counts verified correct (53 agents,
  12 skills, 6 plugins); no version badges exist; install entry
  points verified (wordpress-local.sh subcommands, flavian CLI,
  init wizard). Updated 5 stale "Node.js 20+" references in
  docs/mcp-setup.md, docs/E2E-VALIDATION.md,
  docs/MCP-TROUBLESHOOTING.md to 22.12+ (baseline raised in #163).

Closes #158

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

[Security] node-tar path-traversal (CVE-2026-23745) — transitive pin caps tar at 6.2.1, fix needs 7.5.3+

1 participant