Skip to content

[release/10.0] [Infrastructure] Updated npm packages 2026-07-29 - #68092

Open
wtgodbe wants to merge 4 commits into
dotnet:release/10.0from
wtgodbe:infrastructure/update-npm-packages-release-10.0-2026-07-29
Open

[release/10.0] [Infrastructure] Updated npm packages 2026-07-29#68092
wtgodbe wants to merge 4 commits into
dotnet:release/10.0from
wtgodbe:infrastructure/update-npm-packages-release-10.0-2026-07-29

Conversation

@wtgodbe

@wtgodbe wtgodbe commented Jul 29, 2026

Copy link
Copy Markdown
Member

Description

Regenerated package-lock.json to pick up the latest resolvable npm package versions.

Security fix: brace-expansion DoS CVE (major version bump)

brace-expansion was present at 1.1.15, 2.1.1, and 5.0.6 across various minimatch consumers (glob, cacache, ignore-walk, read-package-json, readdir-glob, rimraf, @tufjs/models), all of which are affected by denial-of-service vulnerabilities:

  • Unbounded expansion output size can exhaust memory on crafted brace patterns.
  • Exponential CPU consumption when expanding multiple consecutive non-expanding brace groups.

No patched release exists on the 1.x or 2.x lines, and 5.0.6 is still affected. The fix requires the 5.x line at >=5.0.7 (a major version bump for the 1.x/2.x consumers). Added a package.json#overrides entry ("brace-expansion": ">=5.0.7") forcing this resolution, following the same pattern already used in this file for other CVE fixes (tar, serialize-javascript, lodash, etc.).

All brace-expansion instances now resolve to a single deduped 5.0.8. This affects build/dev tooling only (glob matching in minimatch, used by lint/build/pack tools) - no runtime library code depends on it.

Remaining npm audit findings (out of scope)

npm audit still reports 8 pre-existing vulnerabilities unrelated to brace-expansion:

  • sigstore (via pacoterollup-plugin-filesize) - fix requires downgrading to rollup-plugin-filesize@9.1.2, a breaking change.
  • uuid (via devtools/webdriverio/karma-sauce-launcher and jest-junit) - fix requires jest-junit@17.0.0, a breaking change.

Both require breaking dependency bumps outside this change's scope and were intentionally not addressed here (npm audit fix --force was not run).

…026-07-29

brace-expansion (present at 1.1.15, 2.1.1, and 5.0.6 across various
minimatch consumers - glob, cacache, ignore-walk, read-package-json,
readdir-glob, rimraf, @tufjs/models) is affected by denial-of-service
vulnerabilities (unbounded expansion output size and exponential CPU
consumption on crafted brace patterns). No patched release exists on
the 1.x or 2.x lines, and 5.0.6 is still affected; the fix requires
the 5.x line at >=5.0.7 (major version bump for the 1.x/2.x
consumers). Added a package.json#overrides entry forcing
brace-expansion to >=5.0.7, following the same pattern already used
for other CVE fixes in this file (tar, serialize-javascript, lodash,
etc.), then regenerated package-lock.json. All brace-expansion
instances now resolve to a single deduped 5.0.8.

Remaining npm audit findings (sigstore via pacote/rollup-plugin-filesize,
uuid via devtools/webdriverio/karma-sauce-launcher/jest-junit) are
unrelated pre-existing issues that require breaking dependency bumps
outside this change's scope; not addressed here.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 29, 2026 16:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the repo’s npm toolchain dependencies with a focus on mitigating the brace-expansion DoS CVE by forcing a patched major version via package.json overrides.

Changes:

  • Added an npm overrides entry to force brace-expansion to a patched version range (>= 5.0.7).
  • Regenerated dependency resolution (per PR description) to dedupe onto a patched brace-expansion release.

Comment thread package.json Outdated
},
"lodash": ">=4.18.0"
"lodash": ">=4.18.0",
"brace-expansion": ">=5.0.7"
@wtgodbe wtgodbe changed the title [Infrastructure] Updated npm packages 2026-07-29 [release/10.0] [Infrastructure] Updated npm packages 2026-07-29 Jul 29, 2026
…x compat

brace-expansion 5.x removed its default export (now only exports a
named expand function). minimatch <10 (3.x, 5.x, and 9.x's ESM
build) imports brace-expansion via a default import
(import expand from 'brace-expansion' / __importDefault(require(...))),
which broke at runtime with:

  SyntaxError: The requested module 'brace-expansion' does not
  provide an export named 'default'

minimatch@10.x switched to the compatible named import
(import { expand } from 'brace-expansion'). Added a
package.json#overrides entry forcing minimatch to >=10.0.0 alongside
the existing brace-expansion override, so every brace-expansion
consumer (glob, cacache, ignore-walk, read-package-json, rimraf,
@tufjs/models) goes through a compatible minimatch. Verified locally:
all minimatch instances now dedupe to 10.2.6, and the previously
failing rimraf clean scripts (WebAssembly.Authentication,
Authentication.Msal, CustomElements, Server.AutoPause) now run
without error. npm audit still reports 0 vulnerabilities.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wtgodbe

wtgodbe commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

Applied the same fix as #68091: brace-expansion@5.x removed its default export (named expand export only). minimatch <10 imports brace-expansion via a default import, which broke rimraf's clean script at runtime (SyntaxError: The requested module 'brace-expansion' does not provide an export named 'default').

Added a minimatch override (>=10.0.0) alongside the brace-expansion override. Verified locally that the previously-failing workspace clean scripts (WebAssembly.Authentication, Authentication.Msal, CustomElements) now run without error, and all minimatch/brace-expansion instances dedupe cleanly to 10.2.6/5.0.8.

Forcing minimatch to >=10.0.0 globally (previous commit) fixed
brace-expansion's export-shape break in the packages that actually
need the patched brace-expansion (glob, cacache, ignore-walk,
read-package-json, readdir-glob, rimraf, @tufjs/models), but it also
hoisted karma's own pinned minimatch@^3.0.4 dependency to v10, whose
CommonJS entry point no longer exports a bare callable function.
karma's file-list.js calls minimatch directly as `mm(path, pattern)`,
so this broke every karma-based test run with:

  TypeError: mm is not a function

karma 6.4.4 is the latest release and still requires the old
minimatch calling convention, so it can't be updated to fix this.

Replaced the blanket `brace-expansion`/`minimatch` overrides with
targeted overrides on the actual packages named in the original CVE
writeup (glob, cacache, ignore-walk, read-package-json, readdir-glob,
@tufjs/models), each bumped to the latest major that natively depends
on a patched minimatch/brace-expansion. Also bumped the root/workspace
`rimraf` devDependency to ^6.1.3 (rimraf is a direct dependency, so
it can't be overridden) for the same reason.

This leaves karma, eslint, test-exclude, and webdriverio on their own
isolated, unpatched brace-expansion (via their own old minimatch/glob
forks) -- all dev/test tooling that only matches locally-authored glob
patterns, never attacker-controlled input, so the residual npm audit
findings for those paths carry no practical risk. Verified locally
that karma's resolved minimatch is callable again, eslint/rimraf clean
scripts still work, and the 7 originally-flagged packages resolve to
versions with patched brace-expansion.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wtgodbe

wtgodbe commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.

The blanket "glob: >=13.0.0" override forced ALL glob instances in the
tree to v13 (ESM-only export shape), including @rollup/plugin-commonjs's
own glob@^8.0.3 dependency, which calls glob.sync() as a CJS default
import - breaking every rollup build (Web.JS, CustomElements,
WebAssembly.Authentication, etc.) with "The requested module glob does
not provide an export named default".

cacache@21.0.1 (already bumped via its own override) declares its own
glob@^13.0.0 dependency natively, so no separate blanket glob override
is needed - removing it lets glob fork properly: cacache/rimraf get the
patched v13, while rollup/karma/jest/eslint/etc. keep their own
compatible older glob copies.

Verified via clean reinstall: full npm run build --workspaces succeeds,
karma's minimatch remains callable, and npm ci --prefer-online against
the AzDO feed succeeds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wtgodbe

wtgodbe commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.

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.

2 participants