Skip to content

fix(keycardai-mcp, keycardai-oauth): raise httpx2, aiohttp and cryptography floors to patched versions - #353

Merged
Larry-Osakwe merged 2 commits into
mainfrom
devin/1792094418-socket-floors
Oct 15, 2026
Merged

Larry-Osakwe merged 2 commits into
mainfrom
devin/1792094418-socket-floors

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

Socket's ten PRs (#321 to #330) each edit a uv.lock, which is not published, so consumers kept resolving the vulnerable versions through our pyproject floors. This PR raises the floors in the two runtime packages and moves every lock the Socket PRs touched.

Merge with a merge commit, not squash, or only one package releases: the two commits are scoped fix(keycardai-mcp) and fix(keycardai-oauth) and each cuts its own release.

Advisory Package Old (lock) New floor Lock now
GHSA-f2fp-rgf2-35cp, GHSA-7mj9-2mp8-4m2p (fixed 2.10.0) httpx2, via keycardai-mcp httpx2>=2.5.0 2.9.1 httpx2>=2.12.0 2.13.1
GHSA-h4x7-gw46-3wm6, GHSA-pf96-p4fj-6566 (fixed 2.11.0) httpx2 2.9.1 httpx2>=2.12.0 2.13.1
GHSA-8xx6-hgc6-gc2m (fixed 2.12.0) httpx2 2.9.1 httpx2>=2.12.0 2.13.1
GHSA-7mj9-2mp8-4m2p (fixed 2.10.0) httpcore2, transitive via httpx2 2.9.1 none (transitive) 2.13.1
GHSA-mfx4-hv73-q22v, GHSA-mq44-7p77-q5h7 (fixed 3.14.2) aiohttp, via keycardai-mcp aiohttp>=3.11.11 3.14.1 aiohttp>=3.14.3 3.14.5
GHSA-cq5v-8q36-5273 (fixed 3.14.3) aiohttp 3.14.1 aiohttp>=3.14.3 3.14.5
GHSA-m2h6-j472-rp4c (fixed 49.0.0) cryptography, via keycardai-oauth cryptography>=45.0.7 48.0.1 root and four example locks, 49.0.0 packages/fastmcp cryptography>=50.0.0 50.0.2 in all six locks
GHSA-g6cj-pr64-35w5 (fixed 50.0.0) cryptography 48.0.1 / 49.0.0 cryptography>=50.0.0 50.0.2 in all six locks

Supersedes #321, #322, #323, #324, #325, #326, #327, #328, #329, #330.

cryptography 50

cryptography>=50.0.0 holds. 50.0.0 declares requires_python >=3.9 (not 3.9.0/3.9.1) with classifiers for 3.9 through 3.14, so it covers our requires-python >=3.10. keycardai-oauth touches cryptography in one file, packages/oauth/src/keycardai/oauth/server/private_key.py: rsa.generate_private_key, serialization (PEM/DER encodings) and PublicFormat. The 49.0.0 backwards-incompatible list (x86_64 macOS and 32-bit Windows wheels, the deprecated *_KEY_TYPES aliases, ChaCha20 nonce counting, X.509 certificates with NULL ECDSA/DSA parameters) and the 50.0.0 notes touch none of those. GHSA-g6cj-pr64-35w5 is in pkcs7_decrypt_der and its PEM/S/MIME variants; keycardai-oauth does not call PKCS#7 anywhere (rg pkcs7|PKCS7|EnvelopedData packages/oauth/src is empty), so the floor move closes the advisory for consumers' resolvers rather than a code path of ours.

Lockfiles

No full regenerate. Each lock was moved with uv lock --upgrade-package naming only the four packages (cryptography alone for packages/fastmcp and the four example locks), which rewrites only those entries, their requires-dist specifiers and what they pull in: yarl 1.23.0 to 1.25.1 (aiohttp 3.14.5's floor) and a new httpx2-jsfetch 1.0 entry with httpcore2 gaining marker = "sys_platform != 'emscripten'" (httpx2 2.13's own dependency split). No other entry or marker changed. The root lock sits in the mcp commit because it carries both packages' specifier changes.

Verified from the lock: uv sync --all-packages --all-extras --frozen then python -c "import httpx2, httpcore2, aiohttp, cryptography" prints 2.13.1 2.13.1 3.14.5 50.0.2.

Verification

Run with the session's KEYCARD_CLIENT_ID/KEYCARD_CLIENT_SECRET unset (credential discovery picks them up and fails one fastmcp test unrelated to this change).

  • packages/mcp pytest: exit 0, no failures (this suite prints no summary line)
  • packages/oauth pytest -q: 561 passed
  • just check (ruff): All checks passed
  • just typecheck (ty, every package): All checks passed
  • just test-coverage: exit 0; oauth 561 passed, starlette 89 passed, mcp 575 passed / 18 skipped, a2a 47 passed, langchain 102 passed / 2 skipped, temporal 93 passed, fastmcp 93 passed, every coverage floor reached
  • scripts/check_sibling_floors.py with PACKAGE=mcp (keycardai-oauth 0.33.0, keycardai-starlette 0.14.2): 575 passed, 18 skipped; PACKAGE=fastmcp (keycardai-oauth 0.29.0): 93 passed

Link to Devin session: https://app.devin.ai/sessions/bbc062cf32b548ef9c4b8b444d2ec67f
Open in Devin Desktop: https://app.devin.ai/desktop/session/bbc062cf32b548ef9c4b8b444d2ec67f?variant=devin
Requested by: @Larry-Osakwe

devin-ai-keycard and others added 2 commits October 15, 2026 20:04
…st releases past their advisories

httpx2>=2.5.0 and aiohttp>=3.11.11 let consumers resolve httpx2 2.9.1 (GHSA-f2fp-rgf2-35cp, GHSA-7mj9-2mp8-4m2p, GHSA-h4x7-gw46-3wm6, GHSA-pf96-p4fj-6566, GHSA-8xx6-hgc6-gc2m) and aiohttp 3.14.1 (GHSA-mfx4-hv73-q22v, GHSA-mq44-7p77-q5h7, GHSA-cq5v-8q36-5273). The root uv.lock moves httpx2 and httpcore2 to 2.13.1, aiohttp to 3.14.5 and cryptography to 50.0.2 through uv lock --upgrade-package, so no other entry changes.

Co-Authored-By: Larry Osakwe <larry@keycard.ai>
…past GHSA-g6cj-pr64-35w5

cryptography>=45.0.7 let consumers resolve 48.0.1 (GHSA-m2h6-j472-rp4c, fixed in 49.0.0; GHSA-g6cj-pr64-35w5, fixed in 50.0.0). cryptography 50 supports Python 3.9 through 3.14 and keycardai-oauth uses only rsa.generate_private_key and the serialization module, none of which changed. The fastmcp lock and the four example locks move cryptography to 50.0.2 through uv lock --upgrade-package.

Co-Authored-By: Larry Osakwe <larry@keycard.ai>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedpypi/​aiohttp@​3.14.1 ⏵ 3.14.597100 +19100100100
Updatedpypi/​cryptography@​49.0.0 ⏵ 50.0.2100100 +16100100100
Updatedpypi/​httpx2@​2.9.1 ⏵ 2.13.1100 +1100 +26100100100

View full report

@Larry-Osakwe Larry-Osakwe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consolidates the open Socket advisories and raises the published floors for runtime dependencies. Merging with a merge commit so both package commits release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants