fix(deps): pin click >=8.3.3,<8.4 for PYSEC-2026-2132 (CI #534) - #156
Draft
Sbussiso wants to merge 1 commit into
Draft
fix(deps): pin click >=8.3.3,<8.4 for PYSEC-2026-2132 (CI #534)#156Sbussiso wants to merge 1 commit into
Sbussiso wants to merge 1 commit into
Conversation
CI run #534 (30854789797) on dependabot/uv/backend/websockets-17.0.1 failed the backend pip-audit --strict gate: click 8.3.1 carries PYSEC-2026-2132 (high) — command injection in click.edit(), fixed in 8.3.3. click is a transitive dep via uvicorn (which only requires click>=7.0), so the unpinned solver landed the vulnerable 8.3.1. Add an explicit floor >=8.3.3,<8.4 to backend/pyproject.toml [dependencies] (minimum patched release on the 8.3 patch line; <8.4 keeps it patch-only — no minor bump) and a matching constraint-dependencies entry. Regenerate uv.lock -> click 8.3.3. Verified locally: uv run pip-audit --strict -> No known vulnerabilities found uv run pytest -q -> 699 passed uv run ruff check -> All checks passed Note: this CI run ALSO failed the frontend npm-audit gate on react-router-dom 7.18.2 -> GHSA-qwww-vcr4-c8h2 (RSC-mode CSRF bypass). No safe fix exists for that — see the draft PR body for analysis.
Sbussiso
referenced
this pull request
Aug 3, 2026
Bumps [websockets](https://github.com/python-websockets/websockets) from 16.1.1 to 17.0.1. - [Release notes](https://github.com/python-websockets/websockets/releases) - [Commits](python-websockets/websockets@16.1.1...17.0.1) --- updated-dependencies: - dependency-name: websockets dependency-version: 17.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.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.
Root cause
CI run #534 (30854789797) on
dependabot/uv/backend/websockets-17.0.1failed two independent audit gates:pip-audit --strictclick 8.3.1→ PYSEC-2026-2132 (command injection inclick.edit())npm audit --audit-level=high --omit=devreact-router-dom 7.18.2→ GHSA-qwww-vcr4-c8h2 (RSC-mode CSRF bypass)Neither is related to the websockets 16.1.1→17.0.1 bump this Dependabot branch carries — both are pre-existing vulns surfaced by the audit gates.
What this PR fixes — backend / click ✅
clickis a transitive dependency pulled in viauvicorn(which only requiresclick>=7.0). Without an explicit floor, the resolver landed the vulnerable8.3.1."click>=8.3.3,<8.4"tobackend/pyproject.toml[dependencies](minimum patched release on the 8.3 patch line;<8.4keeps it patch-only — no minor bump), plus a matchingconstraint-dependenciesentry.uv.lock→click 8.3.3.Local verification (all green)
What this PR does NOT fix — frontend / react-router⚠️ needs human decision
The frontend
npm auditgate fails on GHSA-qwww-vcr4-c8h2 (RSC-mode CSRF bypass),react-routerrange>=7.12.0 <8.3.0. There is no safe version ofreact-router-domavailable right now:react-router-domversion7.0.0–7.11.0GHSA-jjmj-jmhj-qwj2, SSR hydration constructor injectionGHSA-337j-9hxr-rhxg, DoS via route matchingGHSA-chx6-hx7r-mcp5, RSCErrorHandler XSSGHSA-h8fp-f39c-q6mh)7.12.0–7.18.2(current)GHSA-qwww-vcr4-c8h2(the failing advisory)8.3.0+(the documented fix)react-router-domhas no 8.x release — latest is7.18.2; only the framework packagereact-routerhas 8.xA downgrade to
7.11.0(npm's suggested "fix") trades one high vuln for four others — not safe. Pinning to7.11.0was tested locally andnpm auditstill reports high severity.Why it may be acceptable to defer the frontend fix
The advisory is specifically about RSC (React Server Components) mode CSRF bypass. This codebase uses the classic declarative
<BrowserRouter>+<Routes>/<Route>API (verified: onlyBrowserRouter,Routes,Route,Navigate,Link,useNavigate,useLocation,useParams,Outletare imported — noRouterProvider,createBrowserRouter,Form,useFetcher,useActionData, oruseLoaderData). The vulnerable RSC action-execution path is not reachable with this routing setup.Recommended options (pick one)
--ignore-vulnthe advisory temporarily in the frontend audit step (the workflow comment at.github/workflows/deploy.yml:297-308already documents this escape hatch: "When a CVE shows up with no fix yet, add--ignore-vuln <ID>here with a comment citing the upstream issue and the date we plan to revisit.") — citing that the codebase does not use RSC mode.react-router-dom8.x (thereact-routerframework package already has 8.3.0, but the DOM bindings package has not been published for 8.x yet).react-routerframework package directly (larger change, out of scope for a CI-fix PR).This PR is a draft so the backend fix can merge and unblock the websockets bump; the frontend advisory needs a decision on (1)/(2)/(3) above.
Scope
backend/pyproject.toml— addclick>=8.3.3,<8.4to[dependencies]+constraint-dependenciesbackend/uv.lock— regenerated (click 8.3.1→8.3.3)Hermes coder CI triage for run #534.