CVE-2026-69247 in cryptography 49.0.0 turns CI red; refresh the backend pins #137
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What happened
The
backendCI job went red ond878952at the dependency audit step, not on any code in that commit:Lint passed;
frontendande2eboth passed. The advisory was published between run #54 (ae6dc43, green, 19:17 UTC) and run #55 (21:39 UTC) —pip-auditresolves advisories live, so nothing in the repository changed to cause this.Why it matters more than a routine bump
cryptographyis not a direct dependency. It arrives transitively:Both of those are on the authentication path —
authlibdrives the OIDC flow andjoserfchandles the JWTs. So this sits under the mechanism guarding the archive, which is the part of §4 the project treats as load-bearing.There is a second, procedural consequence: the audit step runs before the test step, so a red audit means the backend suite does not run at all. Every push lands unverified by CI until this is cleared. #94's 1186 backend tests passed locally but have never been run by CI.
What is being done
A full
pip-compile --upgradeof bothrequirements.txtandrequirements-dev.txt, rather than a targeted--upgrade-package cryptography. Chosen deliberately by @rbrooks over the narrower fix: it picks up anything else that has drifted or is quietly affected, and matches what Renovate's lock-file-maintenance would do anyway. The trade-off accepted is that a large diff makes any resulting failure harder to attribute, so the full suite and the e2e journeys are run before this is pushed.pip-toolsis not installed inbackend/.venvand is not pinned inpyproject.toml— it is the tool that generates these files but is not itself part of the locked set. Installing it into the venv to regenerate; whether it deserves a pin of its own is a separate question and is not being decided here.Renovate PR #133 does not cover this: it is
chore(deps): lock file maintenancebut touches onlyfrontend/package-lock.json.Done when
pip-auditreports no vulnerabilities againstrequirements.txtandrequirements-dev.txtReferences
backend/requirements.txt,backend/requirements-dev.txt.forgejo/workflows/ci.yml— theDependency auditstep, which audits the locked set rather than the installed set (#72's reasoning)Done in
da4b933. CI run #56 is green on all three jobs.Six packages moved:
cryptography49.0.0 → 50.0.0,fastapi0.140.13 → 0.141.1,uvicorn0.51.0 → 0.52.1,websockets16.1.1 → 17.0.1,cffi2.1.0 → 2.1.1,ruff0.16.0 → 0.16.1.Done when:
pip-auditreports no vulnerabilities against either locked setauthlibandjoserfcare what the OIDC and session journeys run throughThree things worth recording, none of which were visible from the advisory.
The FastAPI bump was checked rather than assumed:
openapi.jsonregenerates byte-identical, so the generated frontend types and thetypes:checkgate are untouched.gitreports no change to that file at all.The pins were regenerated in a Python 3.12 container, not with the local interpreter, which is on 3.14.
pip-compileresolves for the interpreter it runs on, so generating above therequires-pythonfloor can silently omit a dependency only a lower version needs — CI runs 3.11, where that would surface as an ImportError rather than as a diff anyone would notice here. 3.12 is what the existing files' headers name, so this keeps the convention rather than changing it.pip-auditcannot be run on Windows at all, and this is worth knowing before someone tries: it resolves the locked set by installing it, anduvloopis POSIX-only with no Windows wheel and no buildable source. The same applies to a plainpip install -r requirements-dev.txt. Neither is caused by this refresh —uvloopis unchanged at 0.22.1 and was never inbackend/.venv— but it means a local audit cannot pass, and reading its failure as a finding would be a mistake. Audited in a Linux container instead, which is what CI does anyway.One loose end, deliberately not decided here.
pip-toolsgenerates these files but is not pinned inpyproject.tomland is not in either locked set, so the tool that produces the lock is itself unlocked. I installed it intobackend/.venvto do this work. Whether it deserves a pin is a real question — an unpinned generator can quietly change resolution behaviour between runs — but it is not this issue's, and I have not changed it.