From 303da708d71047364518856dee318baf09611064 Mon Sep 17 00:00:00 2001 From: Nivedit Jain Date: Sat, 25 Jul 2026 11:19:13 +0000 Subject: [PATCH] build(deps): lift the brace-expansion and postcss pins to clear two High advisories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GHSA-mh99-v99m-4gvg (CVSS 7.5, unbounded-expansion DoS in brace-expansion <= 5.0.7) and GHSA-r28c-9q8g-f849 (CVSS 7.5, path traversal in postcss's sourceMappingURL auto-loading, <= 8.5.17) turned the Supply Chain gate red on every open PR. Both published after main's last green scan at 2026-07-24 15:12 UTC, so branches carrying no dependency change of their own — #594 is three docs pages — went red simultaneously. Both packages were already pinned in `overrides` by #587 and #591, and the vulnerable versions are the pins themselves, so the whole fix is to raise the two values: - brace-expansion 5.0.7 -> 5.0.8, the only fixed 5.x. Keeps the single-pin-across-two-majors arrangement #587 established; a patch bump inside v5 carries none of that decision's original risk. - postcss 8.5.14 -> 8.5.23 rather than the minimum fixed 8.5.18, because the old pin sat *below* what its own dependents declare (@tailwindcss/postcss ^8.5.16, vite ^8.5.15), so this also stops the override forcing a version outside both ranges. Pulls nanoid 3.3.12 -> 3.3.16 with it. Verified beyond a green lockfile, since postcss is a build-time dependency: `bun run build` completes, all 2357 unit tests pass, and lint reports the same five pre-existing warnings. CI's own scanner image (ghcr.io/google/osv-scanner-action:v2.3.8) against the updated lockfile reports `No issues found`, exit 0, with osv-scanner.toml keeping its zero ignored vulnerabilities. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MmRdEWob5E8B5V1eEAo9WG --- CHANGELOG.md | 1 + bun.lock | 10 +++++----- package.json | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa68350d..84cc9a31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Dependencies - Bump `next` to 16.2.11 and pin `sharp` to 0.35.0, clearing the ten advisories that turned the Supply Chain gate red on every open PR. Nine are Next.js (four High, CVSS 8.2-8.3: middleware/proxy bypass in App Router, SSRF in Server Actions, and others) fixed in 16.2.11; the tenth is `sharp`'s inherited libvips CVEs (GHSA-f88m-g3jw-g9cj, CVSS 7.0) fixed in 0.35.0. Same shape as the `brace-expansion` incident three days ago: the advisories published on 2026-07-21 and 2026-07-22, *after* `main`'s last green scan at 2026-07-21 14:07 UTC, so every branch went red at once with no dependency change of its own — re-running CI's scanner image against `main`'s unchanged lockfile reproduced the failure identically. The two halves need different tools. `next` is a direct devDependency whose `^16.2.9` range already admitted the fix, so `bun update next` lifts it (and raises the declared floor to `^16.2.11`, so it cannot resolve back). `sharp` cannot be fixed that way: it is an *optional* dependency of `next`, and `next@16.2.11` still declares `sharp: ^0.34.5` — a range that excludes 0.35.0 — so updating `next` leaves the advisory in place and the pin has to come from `overrides`, the same plain-key mechanism already holding `postcss`, `vite`, `undici` and `brace-expansion`. Forcing a *minor* bump of a native library under a dependent asking for `^0.34.5` is the risk here, so it was verified beyond a green lockfile: `sharp` 0.35.0 loads against libvips 8.18.3 and round-trips an encode (`@img/sharp-libvips-linux-x64` moves 1.2.4 → 1.3.0). Confirmed with CI's own scanner image (`ghcr.io/google/osv-scanner-action:v2.3.8`) against the updated lockfile: `No issues found`, exit 0, with `osv-scanner.toml` keeping its zero ignored vulnerabilities. (#591) +- Lift the `brace-expansion` pin to 5.0.8 and the `postcss` pin to 8.5.23, clearing the two High-severity advisories that turned the Supply Chain gate red on every open PR for the third time this month. GHSA-mh99-v99m-4gvg (CVSS 7.5) is an unbounded-expansion DoS in `brace-expansion` `<= 5.0.7`, fixed in 5.0.8; GHSA-r28c-9q8g-f849 (CVSS 7.5) is a path traversal in `postcss`'s `sourceMappingURL` auto-loading that discloses arbitrary `.map` files, affecting `<= 8.5.17` and fixed in 8.5.18. Same shape as #587 and #591: both advisories published *after* `main`'s last green scan at 2026-07-24 15:12 UTC, so branches carrying no dependency change of their own — #594 is three docs pages — went red simultaneously. The remedy is narrower than either predecessor, because both packages were **already** pinned in `overrides` by those PRs and the vulnerable versions are the pins themselves; nothing resolves them but the pin, so the entire fix is to raise the two values. `brace-expansion` goes to 5.0.8, the only fixed 5.x, keeping the single-pin-across-two-majors arrangement #587 established (the `minimatch@3` that `eslint-plugin-import`, `-jsx-a11y` and `-react` pull still declares `^1.1.7`) — a patch bump inside v5, so it carries none of that decision's original risk, and lint still runs clean with the same five pre-existing warnings. `postcss` goes to 8.5.23 rather than the minimum fixed 8.5.18 because the old 8.5.14 pin was *below* what its own dependents ask for — `@tailwindcss/postcss` declares `^8.5.16` and `vite` `^8.5.15` — so the bump also stops the override silently forcing a version outside both ranges; it pulls `nanoid` 3.3.12 → 3.3.16 with it. Verified beyond a green lockfile, since `postcss` is a build-time dependency: `bun run build` completes (Next.js + Tailwind + `dist/index.js`) and all 2357 unit tests pass. Confirmed with CI's own scanner image (`ghcr.io/google/osv-scanner-action:v2.3.8`) against the updated lockfile: `No issues found`, exit 0, with `osv-scanner.toml` keeping its zero ignored vulnerabilities. (#596) ### Features - Probe each agent CLI's public pre-release build alongside the one users get, so the integration suite reports not only "is enforcement broken?" but "is it about to break, and how long do we have?". The workflow becomes a matrix over `CANARY_CHANNEL`: the `stable` leg is unchanged (all 12 CLIs, a `FAIL` still fails the job) and a new `beta` leg installs each vendor's pre-release ref. The motivating measurement: codex shipped the payload change that broke the 2026-07-22 run in `0.145.0-alpha.4` on 2026-07-11 but did not release it until 2026-07-21 — **10.7 days** of warning, established by installing each alpha and capturing its request body against a mock endpoint. Six CLIs publish something usable: codex `alpha`, copilot `prerelease`, openclaw `beta`, cursor `?channel=lab` (server-validated; `beta`/`canary` are rejected with HTTP 400), goose `CANARY=true` (a *rolling tag* marked `prerelease: false`, so channel detection scanning for `prerelease: true` misses it), and claude — which runs **backwards**: nothing ships ahead of `latest`, so the stable leg now pins `bash -s stable` (~13 days behind, and what conservative users actually run) and `latest` becomes the early-warning ref. That pin also stops a same-day Anthropic release, which lands ~daily, from red-lighting a PR that touched nothing. The other six are deliberately skipped rather than re-installed at stable and reported as coverage: factory, antigravity and pi publish no pre-release at all (verified — antigravity has 19 releases with zero prereleases and its updater serves the identical stable manifest for every `?channel=` value); opencode's `beta`/`dev` tags are ~31 branch snapshots a day rather than release candidates; devin's unpromoted builds exist but cannot be listed, only guessed at; and hermes's installer git-clones `main`, which is also what every hermes user gets, so there is nothing ahead of us to probe. Coverage is stated in the report itself (`watching 6/12`) because a pre-release ref does not preview every release — codex only alphas minor bumps, so all six recent `0.144.x` patches shipped blind, and the copilot 1.0.70 silent-allow had just 0.6 days of lead. (#591) diff --git a/bun.lock b/bun.lock index e97d38c3..a28067d3 100644 --- a/bun.lock +++ b/bun.lock @@ -39,9 +39,9 @@ }, }, "overrides": { - "brace-expansion": "5.0.7", + "brace-expansion": "5.0.8", "eslint-plugin-react-hooks": "7.0.1", - "postcss": "8.5.14", + "postcss": "8.5.23", "sharp": "0.35.0", "undici": "7.28.0", "vite": "8.0.16", @@ -495,7 +495,7 @@ "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], - "brace-expansion": ["brace-expansion@5.0.7", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA=="], + "brace-expansion": ["brace-expansion@5.0.8", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -981,7 +981,7 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], + "nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], @@ -1037,7 +1037,7 @@ "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], + "postcss": ["postcss@8.5.23", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg=="], "posthog-node": ["posthog-node@5.46.0", "", { "dependencies": { "@posthog/core": "^1.44.0" }, "peerDependencies": { "rxjs": "^7.0.0" }, "optionalPeers": ["rxjs"] }, "sha512-Uzkth327Qxho9X55UygGUjVKCF9oaox90HQpa0o9YNjwLjbQmXttgHChzAtjAcsMw/ZKr3NnHC3xcAaS5dXwEQ=="], diff --git a/package.json b/package.json index e37b1559..26a5cc29 100644 --- a/package.json +++ b/package.json @@ -103,11 +103,11 @@ "yaml": "^2.9.0" }, "overrides": { - "postcss": "8.5.14", + "postcss": "8.5.23", "eslint-plugin-react-hooks": "7.0.1", "vite": "8.0.16", "undici": "7.28.0", - "brace-expansion": "5.0.7", + "brace-expansion": "5.0.8", "sharp": "0.35.0" } }