Skip to content

Clear the 12 open dependency alerts: all now have patches in range #14

Description

@Hugoer

Revised 2026-09-04 against main @ e5c739b. The original framing — "most of these have no
upstream fix" — has since inverted: every open alert now names a patched version. The
superseded triage and a full before/after of what changed is preserved in
this comment.

GitHub shows 12 open Dependabot alerts: 8 high, 4 moderate. Six reach the production
dependency tree; the rest are dev-only.

Every one of them now has a patched version available. None of the patched versions requires
a major bump, and each falls inside a semver range its parent already declares — so this is
expected to be a lockfile refresh, not a set of overrides entries or written risk acceptances.

Open alerts

Severity Package Scope Advisory First patched
high ws runtime CVE-2026-48779 7.5.11
high lodash-es runtime CVE-2026-4800 4.18.0
medium lodash-es runtime CVE-2026-2950 4.18.0
high brace-expansion runtime CVE-2026-13149 5.0.7
high brace-expansion runtime CVE-2026-14257 5.0.8
high brace-expansion runtime CVE-2026-69152 5.0.9
medium brace-expansion runtime CVE-2026-45149 5.0.6
high brace-expansion development CVE-2026-13149 1.1.16
high js-yaml development CVE-2026-59869 4.3.0
high js-yaml development GHSA-5p4m-2wfm-xmqj 4.3.1
medium js-yaml development CVE-2026-53550 4.2.0
medium qs development CVE-2026-8723 6.15.2

Production exposure

Reached through lighthouse and glob. Installed versions and the range each parent declares:

Path Installed Needs Parent declares In range
lighthousews 7.5.10 7.5.11 ^7.0.0 yes
lighthouselodash-es 4.17.23 4.18.0 (4.18.1 published) ^4.17.21 yes
globminimatchbrace-expansion 5.0.5 5.0.9 (current) ^5.0.5 yes

lodash-es is the one that deserves a real look rather than a reflexive bump: it sits in
Lighthouse's report rendering, and audited page content is attacker-controlled — auditing a
hostile site is this tool's normal job. The advisories are code injection via _.template and
prototype pollution via _.unset / _.omit.

For ws and brace-expansion, confirm the threat model rather than assuming it: the ws peer
is the headless Chrome this CLI launched itself, and brace-expansion input is the glob the
operator typed.

ws@8.21.3 also exists in the tree via puppeteer-core, but carries no open alert — only
the 7.5.10 instance on the Lighthouse path is flagged.

Dev-only exposure

js-yaml and qs, reached through eslint, @commitlint/*, cosmiconfig and the
@googleapis/* type packages, plus brace-expansion@1.1.13/1.1.14 via the minimatch@3 that
eslint 8 pulls in.

Direct dependency status

Package Installed Latest Upgrade
lighthouse 13.4.1 13.4.1 none
glob 13.0.6 13.0.6 none
@commitlint/cli 21.2.2 21.2.2 none
puppeteer-core 25.9.0 25.10.0 in-range patch
eslint 8.57.1 10.9.1 two majors

Unrelated aside worth knowing before anyone regenerates the lockfile from scratch: npm outdated
reports lighthouse Latest as 12.8.2 while 13.4.1 is installed, so the latest dist-tag is
behind the pinned version and a fresh npm install lighthouse would resolve to v12.

The one real upgrade

eslint 8.57.1 → 10.9.1 clears most of the dev-only findings, but eslint 8 is EOL and 9+
requires migrating .eslintrc to flat config (eslint.config.js). That also drags
@netcentric/eslint-config, eslint-plugin-import and eslint-plugin-unused-imports, which must
support flat config first. This should be split into its own issue rather than done here.

Approach

Per the repo's dependency discipline, and explicitly not a blanket npm audit fix:

  1. One package per change, so a break is attributable and the revert is clean.
  2. Read the changelog, not the version number.
  3. Green suite before and after, with the lockfile diff reviewed.
  4. Record an explicit verdict for any advisory that turns out to resist a fix.

Plan

  1. Refresh the lockfile and confirm which runtime alerts clear on their own. Review the diff.
  2. Bump puppeteer-core to 25.10.0 as its own change.
  3. Handle whatever residue survives step 1 — and only then decide whether an overrides entry or
    a written risk acceptance is needed anywhere, and where such a record should live.
  4. Split the eslint 9/10 flat-config migration into its own issue.

Unverified

Whether the lockfile refresh in step 1 actually lands the patched versions is inference from
the semver ranges above, not a confirmed result.
It could not be verified in the environment
where this was triaged: npm audit times out against
registry.npmjs.org/-/npm/v1/security/audits/quick, and both npm update --package-lock-only
and a clean npm install --package-lock-only fail with Cannot read properties of null (reading 'edgesOut') on npm 10.9.2 — reproducible from a bare package.json in an empty directory, so it
is environmental rather than a property of this tree. Confirm before writing any override.

Verification

Whatever lands: npm run lint, npm test, npm run generate-types, npm run check-types, plus
a reviewed lockfile diff and a re-run of npm audit showing the expected before/after delta.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions