Skip to content

chore: pin browserslist past GHSA-c83g-rgw3-j3cx in clients/tui (dev-only high advisory) #2225

Description

@cliffhall

npm audit is clean in four of the five installs and reports 1 high in clients/tui:

browserslist  <=4.28.6
Severity: high
  GHSA-c83g-rgw3-j3cx — unbounded memory growth (no cache eviction) via distinct query results, eventual OOM
  GHSA-73wf-gq98-2v4g — uncaught crash / prototype write via untrusted browserslist-stats.json (normalizeStats)
node_modules/browserslist

Where it comes from

It is transitive, through the tui-local ESLint plugin:

@modelcontextprotocol/inspector-tui
└─┬ eslint-plugin-react-hooks@7.1.1
  └─┬ @babel/core@7.29.7
    └─┬ @babel/helper-compilation-targets@7.29.7
      └─┬ browserslist@4.28.2
        └─┬ update-browserslist-db@1.2.3
          └── browserslist@4.28.2 deduped

This is exactly the peer-shadow case AGENTS.md already documents under
Dependency placement: deleting a root-only
declaration does not delete the client copy, because npm auto-installs an unmet peer into
the install that needs it, and a client-only ESLint plugin drags a client-local tree in with it.

Nothing published is affected

  • npm audit --omit=dev in clients/tui0 vulnerabilities.
  • The tarball ships only each client's build/; pack:verify installs clean into a throwaway
    consumer and drives web/cli/tui end to end.

It is not new to v2.5.0

origin/main's tui lockfile pins the same browserslist@4.28.2, so v2.4.0 shipped with this
exact tree — the advisory was published since. The root (4.28.8) and clients/web
(4.28.7) copies float above the 4.28.7 fix line only because #2200 / #2196 refreshed their
lockfiles in this milestone while tui's was not touched.

So this is a reporting change, not a regression, and it does not block the v2.5.0 release
(#2214). But it does mean npm audit across the five installs is no longer clean, which is the
state #2062 established and which the v2.4.0 smoke ledger recorded.

Fix

Per AGENTS.md: pin a transitive with an overrides entry, not with npm audit fix
which "resolves" an advisory with no upward escape by silently downgrading. clients/tui
already carries an overrides block (ink-select-input, esbuild), so this is one more entry:

"overrides": { "browserslist": "^4.28.7" }

Done when

  • npm audit reports 0 vulnerabilities in all five installs, dev included
  • npm audit --omit=dev still clean in all five
  • npm run local:gate passes (the tui lint stage is what pulls the plugin in)

Found while smoke-testing the v2.5.0 payload — see the note on
#2215 (comment)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    choreMaintenance: deps, build tooling, CI, cleanup — no user-facing behavior changev2Issues and PRs for v2

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions