chore(deps): clear the six open Dependabot alerts (react-router, undici) - #92
Merged
Merged
Conversation
All six open alerts are npm, transitive, and confined to frontend/pnpm-lock.yaml. None is exploitable in this deployment, but each fix lands inside the ranges already declared, so fixing costs less than arguing. react-router 7.18.1 -> 7.18.2 closes alert #26 (GHSA-qwww-vcr4-c8h2, HIGH: RSC mode CSRF bypass, a follow-up to CVE-2026-22030). The vulnerable path is RSC mode and server actions, which a client-only Vite SPA with no server entry never enters. Bumping react-router alone is a no-op: react-router-dom pins it to an exact version, so the parent moves and drags it along. The advisory now reports 7.18.2 as the first patched version, i.e. the fix was backported into the 7.x line, so the v8 migration this used to require (v8 deletes react-router-dom and moves 16 import sites) is no longer part of the picture. undici 7.28.0 -> 7.29.0 closes alerts #20 through #24 (one HIGH, four MEDIUM: degenerate private cache directives, CRLF injection via a blob-like body type, cookie attribute injection, cross-user disclosure via whitespace in Cache-Control, and response desynchronization in the retry interceptor). undici is reachable only through jsdom, a devDependency serving as the Vitest DOM environment, so it never enters the shipped bundle, and every one of these needs the test process to make real requests to a hostile server. jsdom declares ^7.25.0, so it takes 7.29.0 without being upgraded itself. package.json moves with the lock rather than being held at ^7.18.1. Leaving the declared floor at the vulnerable version means a lockfile regeneration can legitimately resolve back to 7.18.1 and reopen the alert; the security floor belongs where the constraint lives. Five unrelated transitive patches ride along, because pnpm re-resolves on update: color-name 2.1.0 -> 2.1.1, color-parse 2.0.2 -> 2.1.2, earcut 3.2.0 -> 3.2.3, probe-image-size 7.3.0 -> 7.4.0, sax 1.6.0 -> 1.6.1. Hand-editing the lockfile to suppress them would be a larger risk than the bumps themselves. Verified: `pnpm install --frozen-lockfile` accepts the pair, so the lock and the manifest agree the way CI installs them; 148 frontend tests pass, including the 42 router-aware page tests; eslint, `tsc -b` and `vite build` clean. The installed tree holds exactly one copy of each package, at the patched version, so no vulnerable duplicate survives to keep an alert open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the six open Dependabot alerts. All six are npm, transitive, and confined to
frontend/pnpm-lock.yaml; none is exploitable in this deployment, but each fix lands inside the ranges already declared, so fixing costs less than arguing.react-router 7.18.1 → 7.18.2
Closes #26 (GHSA-qwww-vcr4-c8h2, HIGH: RSC-mode CSRF bypass, a follow-up to CVE-2026-22030).
@react-router/dev, no server entry, and noreact-router/rscimports, so it never enters that path.react-router-dom@7.18.1pinsreact-routerto an exact version, so bumpingreact-routeralone is a no-op.7.18.2as the first patched version, i.e. the fix was backported into the 7.x line. The v8 jump this used to require (v8 deletesreact-router-domand moves 16 import sites) is out of the picture.undici 7.28.0 → 7.29.0
Closes #20, #22, #23, #24 (MEDIUM) and #21 (HIGH): degenerate private cache directives, CRLF injection via a blob-like body
type, cookie attribute injection, cross-user disclosure via whitespace inCache-Control, and response desynchronization in the retry interceptor.undiciis pulled only byjsdom, a devDependency serving as the Vitest DOM environment. It never enters the shipped bundle, and every one of these advisories needs the test process to make real HTTP requests to a hostile server.jsdom@29.1.1declaresundici: ^7.25.0, which accepts 7.29.0.Two things worth knowing about the diff
package.jsonmoves with the lock (^7.18.1→^7.18.2) rather than being held back. Leaving the declared floor at the vulnerable version means a lockfile regeneration can legitimately resolve back to 7.18.1 and reopen the alert; the security floor belongs where the constraint lives.Five unrelated transitive patches ride along, because pnpm re-resolves on update:
color-name2.1.0 → 2.1.1,color-parse2.0.2 → 2.1.2,earcut3.2.0 → 3.2.3,probe-image-size7.3.0 → 7.4.0,sax1.6.0 → 1.6.1. Hand-editing the lockfile to suppress them would be a larger risk than the bumps themselves.Verification
pnpm install --frozen-lockfileaccepts the pair, so the lock and the manifest agree the way CI installs them.tsc -bandvite buildclean.🤖 Generated with Claude Code