Skip to content

chore(deps): migrate to eslint 10 to clear the brace-expansion DoS advisory #1838

Description

@cliffhall

Deferred from the pre-2.0.0 dependency sweep (#1837). Dev-scope only — does not ship.

The alert

A brace-expansion DoS (unbounded expansion length) reachable via minimatch, inside eslint's own dependency tree. It appears 5 times in each of the 5 lockfiles (root + four clients) as:

  • @eslint/config-array
  • @eslint/eslintrc
  • brace-expansion
  • eslint
  • minimatch

npm audit reports a single fix for all of them: eslint@10.8.0.

Why it was deferred rather than fixed

  1. It does not ship. eslint is a dev dependency; the published files allowlist is clients/*/build, clients/web/dist, and scripts/install-clients.mjs.
  2. The vulnerable path is not attacker-controlled. The glob patterns fed to minimatch come from this repo's own eslint config. Worst case is a slow lint run on a machine that already has the source.
  3. The fix is a major bump across five packages, likely requiring flat-config and rule migrations — not work to attempt immediately before an irreversible npm publish.

The alerts were dismissed as tolerable_risk with that reasoning recorded. This issue exists so the dismissal is not the only record that real work remains — a dismissed alert reads too easily as a solved problem.

Scope

  • Bump eslint to 10.x in the root and all four clients (each has its own package.json / lockfile — v2 is not an npm workspace).
  • Migrate config as required; the root eslint.config.js also gates core/ and the shared surface (lint:core, lint:shared).
  • Verify npm run ci passes — lint runs in validate for every client.
  • Confirm the 25 alerts clear, and un-dismiss rather than leave them dismissed-but-fixed.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    v2Issues and PRs for v2

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions