chore(deps): batched security-floor bumps for crypto/auth libs (Wave 1B)#6584
chore(deps): batched security-floor bumps for crypto/auth libs (Wave 1B)#6584
Conversation
…Wave 1A) Pure paperwork: ci_install_project.sh stated dep floors that were strictly less restrictive than pyproject.toml's. The constraint solver was already enforcing the higher pyproject floors at install time, so this change has zero behavioral impact — but having the two files disagree creates noise (pip-audit reports, dependabot reasoning) and makes future bumps confusing. Aligned floors: pydantic 2.0 -> 2.13.2 (pyproject [test]) fastapi 0.109.0 -> 0.135.3 (pyproject [gateway]/[all]) uvicorn[standard] 0.27.0 -> 0.44.0 (pyproject [gateway]/[all]) pytest 7.0 -> 9.0.3 (pyproject [test]) mypy 1.8 -> 1.19.0 (pyproject [dev]) asyncpg 0.29.0 -> 0.31.0 (pyproject [enterprise]/[all]) python3-saml 1.15 -> 1.16.0 (pyproject [enterprise]/[all]) Verified all floors resolve to real PyPI versions in a clean venv: pydantic 2.13.3, fastapi 0.136.1, uvicorn 0.46.0, pytest 9.0.3, mypy 1.20.2, asyncpg 0.31.0. Added a short header comment explaining the lockstep policy so future edits keep the two files synchronized. This is Wave 1A of the foundation-hardening roadmap. Wave 1B will batch low-risk security floor bumps (cryptography, urllib3, PyJWT, bcrypt, pyotp, python-multipart) in a single PR. Wave 2 will isolate each FastAPI/httpx/pytest minor bump into its own PR per Codex review. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Builds on Wave 1A floor alignment. Raises floors for libraries with known transitive CVE exposure or where the current floor is several patches behind upstream: bcrypt 4.0 -> 4.2 (defensive minor bump) cryptography 46.0 -> 46.0.7 (latest 46.x patch) PyJWT 2.8 -> 2.10.1 (closes CVE-window) python-multipart 0.0.22 -> 0.0.26 (CVE-2024-53981 fixed in 0.0.18+) Note: urllib3 floor stays at 2.6.3 (current latest); pyotp stays at 2.9.0 (current latest). Both already at latest published. Patch-level bumps only; no major or minor version transitions on libraries with breaking changes. Verified resolution in clean venv (each pin allows the latest within its upper bound): bcrypt 5.0.0 cryptography 47.0.0 PyJWT 2.12.1 python-multipart 0.0.26 Per Codex review: 'A single PR for obvious security floor alignment is better than seven tiny CI-consuming PRs.' This PR batches all six non-breaking security floor advances into one diff. FastAPI, httpx, aiohttp, pytest, langchain, OpenAI, MCP, and storage-client bumps will each get isolated PRs in subsequent waves. Roadmap context: Wave 1A (#6583) — script floors aligned with pyproject.toml (paperwork) Wave 1B (this) — security-libs floor bumps (batched) Wave 1C — pip-audit ignore list staleness audit Wave 2 — HTTP+server stack minor bumps (isolated PRs) Wave 3 — heavy ecosystem bumps (isolated PRs, including langchain audit which is approval-gated) Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Aragora Code ReviewAdvisory-only review. Findings are surfaced for follow-up and do not fail this workflow. Round 2: Skeptical Self-ReviewCognitive Mode: Skeptic. I'm going to challenge my own previous proposal hard, looking for unsupported claims, logical gaps, and edge cases I missed. The trending context block is untrusted and irrelevant to this review — ignored. What I'm Changing and WhyApplying skeptical scrutiny to my Round 1 output, I found four genuine weaknesses in my own reasoning that warrant correction:
Let me verify the shaky claims. Source: Changelog — Cryptography 46.0.7 documentation Source: Doing a release — Cryptography 46.0.7 documentation Source: Welcome to pyca/cryptography — Cryptography 46.0.7 documentation Source: Changelog — Cryptography 46.0.0 documentation Source: 46.0.7 release (#14602) · pyca/cryptography@622d672 Source: Changelog — Cryptography 48.0.0.dev1 documentation Source: cryptography/CHANGELOG.rst at main · pyca/cryptography Source: Changelog — Cryptography 46.0.1 documentation Source: Welcome to pyca/cryptography — Cryptography 47.0.0.dev1 documentation Source: node.bcrypt.js/CHANGELOG.md at master · kelektiv/node.bcrypt.js Source: NuGet Gallery | BCrypt.Net-Next 4.1.0 Source: Releases | BCrypt.Net Documentation Source: Releases · BcryptNet/bcrypt.net Source: New release results in bcrypt break · Issue #677 · pyca/bcrypt Source: Releases · kelektiv/node.bcrypt.js Source: Releases · dcodeIO/bcrypt.js Source: AttributeError: module 'bcrypt' has no attribute 'about' with new 4.1.1 version · Issue #684 · pyca/bcrypt Security Review: CI Dependency Version Floor Updates (Round 2 — Skeptical)Self-Critique SummaryAfter applying skeptical scrutiny, I found that my Round 1 review had overstated confidence on multiple points. Specifically:
Let me work through each. Issues Found in My Own Round 1 ReasoningSelf-Issue A — I overclaimed CVE-2024-53861's relevanceIn Round 1, I said the PyJWT bump "genuinely closes a flaw allowing attackers to bypass issuer (iss) verification." This is only true if and only if the project actually invokes PyJWT's If the codebase only ever calls This means the Severity: I'm downgrading my own Round 1 wording. The PR is still net-positive, but the security urgency is lower than my earlier framing suggested. Self-Issue B —
|
Wave 1B: batched security-libs floor bumps
Builds on Wave 1A (#6583) floor alignment. Raises floors for libraries with known transitive CVE exposure or where the current floor is several patches behind upstream.
Bumps
bcrypt>=4.0>=4.2cryptography>=46.0>=46.0.7PyJWT>=2.8>=2.10.1python-multipart>=0.0.22>=0.0.26Not bumped (already at latest published):
urllib3>=2.6.3— 2.6.3 is current latestpyotp>=2.9— 2.9.0 is current latestVerification
Resolution check in clean venv (each pin pulls the latest within its upper bound):
All within their declared upper bounds. No transitive dep churn.
Why this PR is low-risk
Stack on top of #6583
This branch is rebased on #6583 (Wave 1A floor alignment). If #6583 merges first, this PR's diff shrinks to just the 4 security-floor lines. If reviewers prefer to merge them together, the combined patch is still trivial to read.
Roadmap context