Skip to content

chore(deps): bump tar from 7.5.11 to 7.5.22 across 3 lockfiles - #104

Merged
Ndevu12 merged 1 commit into
mainfrom
security/bump-tar-7.5.21
Jul 31, 2026
Merged

chore(deps): bump tar from 7.5.11 to 7.5.22 across 3 lockfiles#104
Ndevu12 merged 1 commit into
mainfrom
security/bump-tar-7.5.21

Conversation

@Ndevu12

@Ndevu12 Ndevu12 commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Closes 12 Dependabot alerts across 6 advisories, including the only critical alert currently open on main.

Advisory CVE Severity Alerts
GHSA-23hp-3jrh-7fpw CVE-2026-59873 critical #97, #98, #99
GHSA-8x88-c5mf-7j5w CVE-2026-59874 high #88, #89, #90
GHSA-gvwx-54wh-qm9j CVE-2026-59875 medium #94, #95, #96
GHSA-w8wr-v893-vjvp CVE-2026-59871 medium #91, #92, #93
GHSA-r292-9mhp-454m medium #105, #106, #107
GHSA-vmf3-w455-68vh CVE-2026-53655 medium #62, #66, #70

What changed

tar 7.5.11 → 7.5.22 in yarn.lock, playground/yarn.lock, and examples/react-demo/yarn.lock. The required floor was 7.5.21; 7.5.22 is the current release.

Lockfile-only. tar is transitive via node-gyp under an existing ^7.5.4 range, so no manifest change is needed. tars own dependency ranges are unchanged, so there is no transitive fanout — the diff is 9 lines per lockfile and the resolved checksum is identical in all three.

Verification

  • yarn build — success
  • yarn test — 286 tests across 20 files, all passing

Note on real-world exposure

node-gyp is only reached when building native modules and is not materialized into node_modules on a normal install, so practical exposure here was low. The bump is still worth taking: it clears the critical alert and costs nothing behaviourally.

Closes 12 Dependabot alerts (#62, #66, #70, #88-#99, #105-#107) covering
6 advisories, including the critical GHSA-23hp-3jrh-7fpw (CVE-2026-59873).

Required floor was 7.5.21; 7.5.22 is the current release. Lockfile-only —
tar is transitive via node-gyp under the existing `^7.5.4` range, so no
manifest change is needed and tar's own dependency ranges are unchanged.

Verified: yarn build + 286 tests pass.
@Ndevu12 Ndevu12 self-assigned this Jul 31, 2026
@Ndevu12
Ndevu12 merged commit f4f87ff into main Jul 31, 2026
9 checks passed
@Ndevu12
Ndevu12 deleted the security/bump-tar-7.5.21 branch July 31, 2026 17:15
Ndevu12 added a commit that referenced this pull request Jul 31, 2026
Closes 16 of the 18 open Dependabot alerts on the root yarn.lock.
(The remaining tar alerts are handled separately in #104.)

Direct devDependencies — manifest floor raised alongside the lockfile:

  vite          ^8.0.0  -> ^8.0.16   (resolves 8.2.0)  #54 high, #55 medium
  concurrently  ^10.0.0 -> ^10.0.4                     #86 high (via shell-quote)

concurrently 10.0.4 pins shell-quote 1.9.0 exactly, so bumping the real
parent fixes shell-quote properly rather than forcing it with a resolutions
override. shell-quote 1.8.4 is gone from the tree entirely.

Transitive — lockfile only, all within existing declared ranges:

  @babel/core       7.29.0  -> 7.29.7   #68
  brace-expansion   1.1.12  -> 1.1.18   #103
  brace-expansion   5.0.4   -> 5.0.9    #81
  js-yaml           4.1.1   -> 4.3.1    #80, #101
  postcss           8.5.15  -> 8.5.25   #119
  undici            7.24.4  -> 7.29.0   #71, #72, #73, #74, #76, #77
  ws                8.19.0  -> 8.21.1   #67

Raising vite to ^8.0.16 initially left a second vite 8.0.8 behind an
unrelated `^6 || ^7 || ^8` range, which kept a vulnerable postcss 8.5.15
alive. `yarn up -R` plus `yarn dedupe` collapses both to a single copy, so
no stale vulnerable duplicate remains.

vite 8.2.0 warns that `__dirname` is unsupported under the native config
loader that becomes the default in a future major. Migrated both root vite
configs to `import.meta.dirname` so the bump leaves no new warning behind.
Available since Node 20.11; CI runs Node 20.x.

Verified: build, 286 unit tests, typecheck, lint, format:check, verify:demos.

Not fixed here — both blocked upstream, neither reachable in this project:

  #50 esbuild (low)   tsup 8.5.1 is the latest release and pins esbuild
                      ^0.27.0, so 0.28.1 is unreachable without overriding
                      a transitive pin. The advisory is a Windows-only path
                      traversal in the esbuild dev server (servedir); tsup
                      uses the bundler API and never starts that server.

  #46 uuid (medium)   @storybook/addon-actions 8.6.18 pins uuid ^9.0.0.
                      Storybook 9+ drops the uuid dependency entirely, so
                      the real fix is the v8 -> v10 migration, not a pin.
                      The advisory affects v3()/v5()/v6() with a caller
                      supplied buffer; addon-actions only calls v4() with
                      no buffer.
Ndevu12 added a commit that referenced this pull request Aug 1, 2026
…es (#112)

Takes open Dependabot alerts from **5 to 0**.

I previously argued against `resolutions` for these. That was the right
default but the wrong final answer — I had not actually tested whether
the forced versions work. I have now, and they do, so here they are with
the evidence.

## Why a bump could not fix these

All five are pinned by an upstream package rather than declared in any
manifest here, so there is no floor to raise:

| Alert | Package | Pinned by |
|---|---|---|
| #50 | `esbuild` | `tsup@8.5.1` (latest) declares `esbuild@^0.27.0` —
cannot reach patched 0.28.1 |
| #24 #102 #104 | `postcss` | `next` depends on **exactly**
`postcss@8.4.31` |
| #87 | `sharp` | `next` declares `sharp@^0.34.5`; fix is 0.35.0,
outside the range |

I checked `next@16.2.12` (latest, a major upgrade): it **still** pins
`postcss@8.4.31`. So even upgrading Next by a major would not have
closed those three.

## The overrides, and what verified them

**Root — `esbuild: ^0.28.1`.** Forcing this collapses the tree to a
single esbuild copy (0.27.7 is gone entirely). The risk was that `tsup`
and `tsx`, which declared `^0.27.0` / `~0.27.0`, would break against
0.28. They do not:

- `yarn build` — tsup compiles the library (CJS + ESM + DTS)
- `yarn clean` — a `tsx`-executed script runs
- `yarn build-storybook` — succeeds
- `yarn test:coverage` — **286 tests pass, 92.9% statements / 84.1%
branches**
- `yarn typecheck`, `yarn lint`, `yarn format:check` — clean

**`examples/nextjs-demo` — `postcss: ^8.5.25`, `sharp: ^0.35.3`.** The
risk was Nexts CSS pipeline depending on postcss 8.4.31 internals. It
does not:

- `yarn build` — compiles successfully, prerenders all 3 static pages

## These are liabilities, and the PR says so

An override forces a version upstream never tested against. Left
undocumented that is exactly the debt worth avoiding, so `SECURITY.md`
now carries a **Dependency overrides** section recording, for each
entry: what pins the package, which advisory it answers, **the precise
condition for removing it**, and the commands to check whether upstream
has caught up:

```sh
npm view tsup dependencies.esbuild
npm view next dependencies.postcss optionalDependencies.sharp
```

They should be deleted the moment `tsup` ships against `esbuild@^0.28`
and `next` moves off `postcss@8.4.31`.

## Verification of the outcome

Cross-checking every open alert against the resulting lockfiles:

```
Open alerts RESOLVED by this branch: 5
Still vulnerable: 0
```

Plus the standing invariant, re-run: every **direct** dependency across
all four manifests still declares a floor at or above its patched
version.
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