Skip to content

fix(deps): clear reachable security advisories, drop the @types/tar stub - #546

Merged
ReinhardHatko merged 4 commits into
mainfrom
rh/security-bumps
Oct 1, 2026
Merged

ReinhardHatko merged 4 commits into
mainfrom
rh/security-bumps

Conversation

@ReinhardHatko

@ReinhardHatko ReinhardHatko commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Clears the Dependabot backlog (60 open alerts: 1 critical, 31 high, 25 moderate, 3 low) down to what is actually reachable from the CLI. Branches off main, independent of #540/#545.

The one that mattered

tar was on 7.5.16 with a critical decompression/parse DoS. This is in our threat path rather than theoretical: src/utils/mod/source.ts extracts GitHub tarballs of community-published apps with it, so that parser runs on attacker-controllable input by design — a malicious moddable app is a supported input to playground mod, not an exotic scenario.

Fixed by the bump to 7.5.22 and by deleting @types/tar. That package is a deprecated stub (tar ships its own types, pnpm warns about it every install, nothing imports it), and it was the only remaining thing pulling a vulnerable tar@7.5.16 into the tree. Removing a useless dependency is what actually cleared the last vulnerable copy.

Cleared without forced resolutions

All within ranges the parents already declare — no new overrides, so nothing fights the pinning the repo relies on:

@libp2p/peer-store · browserslist · postcss · brace-expansion · undici · axios · shell-quote · form-data · baseline-browser-mapping · vitest + @vitest/mocker

Left open, deliberately — with the reason for each

I traced every remaining alert to its parent rather than forcing versions to make the dashboard green.

Package Why it stays
deepmerge-ts, esbuild@0.25.12 Declared by @parity/dotns-cli, which ships as a single fully-bundled dist/cli.js with deps inlined and never resolved at runtime (documented in CLAUDE.md). Installed but never loaded.
js-yaml@3.x changesets → release tooling only, never in the shipped binary.
vite, image-size vitest → dev only. image-size has no patched version published.
ws@8.20.1 viem → @polkadot-api/sdk-ink → @parity/cdm-codegen (pinned EXACT on purpose).
nanoid@5.1.11 @novasamatech/host-api.
@opentelemetry/core@1.30.1 @sentry/node pulls OTel 1.x; the fix is on 2.x, which only Sentry can move to.

I tried parent-scoped overrides for nanoid and ws — both patched versions are already in the tree, so it would only have deduped — but ws@8.20.1 arrives via a peer-dependency variation (isows@1.0.7 peer#7e70) that the parent>child form doesn't match. Rather than leave dead config in the repo, or use a blanket override that would drag ws@7.x/nanoid@3.x consumers across a major, I reverted it. These need the parents to widen their own ranges.

Testing

Merged with current main (includes #540, #545 and #559). All CI checks green, including every E2E cell — #559 fixed the E2E failures that had been red on main since late August, none of which were caused by this PR. pnpm test · tsc --noEmit clean · format:check ✓ · lint:license ✓ · the 9 tests covering the tar extraction path pass against 7.5.22.

`tar` was on 7.5.16 with a critical decompression/parse DoS. This one is
genuinely in our threat path rather than theoretical: `playground mod`
extracts GitHub tarballs of community-published apps through it, so that
parser runs on attacker-controllable input by design. It now resolves to
7.5.22.

`@types/tar` is removed. It is a deprecated stub — `tar` has shipped its own
types for years, pnpm warns about it on every install, and nothing imports
it. It was also the only remaining thing pulling a vulnerable tar 7.5.16
into the tree, so deleting a useless dependency is what actually cleared the
critical advisory rather than the version bump alone.

Everything else moved within the ranges its parents already declare — no
forced resolutions, no new overrides: @libp2p/peer-store, browserslist,
postcss, brace-expansion, undici, axios, shell-quote, form-data,
baseline-browser-mapping, and vitest/@vitest/mocker.

The advisories left open are not reachable and are recorded in the PR: they
sit in dev/release tooling (changesets, vitest) or in dependencies that
@parity/dotns-cli declares but never resolves, since it ships as a single
fully-bundled dist/cli.js. The rest need an upstream bump we cannot make
from here.
@socket-security

socket-security Bot commented Sep 22, 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
Updatednpm/​vitest@​4.1.8 ⏵ 4.1.1198 +1100 +279 +199 +1100
Updatednpm/​tar@​7.5.16 ⏵ 7.5.2297100 +7599 +187100

View full report

@github-actions

Copy link
Copy Markdown
Contributor

Dev build ready — try this branch:

curl -fsSL https://raw.githubusercontent.com/paritytech/playground-cli/main/install.sh | VERSION=dev/rh/security-bumps bash

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

E2E Test Pass · ✅ PASS

Tag: e2e-ci-pr · Branch: rh/security-bumps · Commit: d3541a4 · Run logs

Cell Result Time
pr-mod ✅ PASS 1m26s
pr-login-session ✅ PASS 1m52s
pr-deploy-cdm ✅ PASS 3m28s
pr-preflight ✅ PASS 2m17s
pr-deploy-frontend ✅ PASS 7m05s
pr-deploy-foundry ✅ PASS 0m48s
pr-install ✅ PASS 0m47s
${{ matrix.cell }} ⏭️ SKIP 0m00s
${{ matrix.cell }} ⏭️ SKIP 0m00s

Sentry traces: view spans for this run

…bumps

The 2026-09-29 sync resolved the pnpm-lock.yaml conflict by taking main's
lockfile and re-resolving, which silently dropped every lockfile-only bump
in this PR (postcss, shell-quote, nanoid, undici, axios, form-data,
brace-expansion, @libp2p/peer-store, browserslist, baseline-browser-mapping);
only tar survived because package.json drives it. Re-merged from the PR's
original commit and let pnpm resolve the conflicted lockfile, which keeps
both sides: every bump from 273e788 plus main's versions unchanged.
@ReinhardHatko
ReinhardHatko merged commit 217ad17 into main Oct 1, 2026
21 checks passed
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