Skip to content

fix(deps): cryptography 49.0.0 → 50.0.0 (GHSA-g6cj-pr64-35w5) — closes all 10 Dependabot alerts - #371

Merged
cdeust merged 1 commit into
mainfrom
fix/cryptography-cve-2026-69247
Aug 6, 2026
Merged

fix(deps): cryptography 49.0.0 → 50.0.0 (GHSA-g6cj-pr64-35w5) — closes all 10 Dependabot alerts#371
cdeust merged 1 commit into
mainfrom
fix/cryptography-cve-2026-69247

Conversation

@cdeust

@cdeust cdeust commented Aug 6, 2026

Copy link
Copy Markdown
Owner

What

One advisory, ten alerts. cryptography is transitive (authlib, joserfc, pyjwt, secretstorage) and appears in uv.lock plus the nine generated requirements files, so Dependabot raises one alert per manifest.

GHSA-g6cj-pr64-35w5 / CVE-2026-69247 (high). pkcs7_decrypt_der, pkcs7_decrypt_pem and pkcs7_decrypt_smime reported RecipientInfo encryptedKey decryption failures in distinguishable ways, one of which disclosed the exact length recovered from the RSA operation, and the distinction was also observable by timing. An application that decrypts attacker-supplied EnvelopedData and reflects the outcome hands the attacker a Bleichenbacher oracle against the content-encryption key. Introduced in 44.0.0, fixed in 50.0.0.

Practical exposure here is nil. Cortex calls no PKCS#7 decryption API. This is bar maintenance, not incident response, and it is stated that way rather than dressed up.

Scope

Exactly one package. uv.lock has a single version change; git diff requirements/ shows cryptography as the only changed requirement in every file. The ~94-line-per-file diff is that one package's platform wheel hash set.

Regenerated, never hand-edited:

uv lock --upgrade-package cryptography
python scripts/generate_pip_constraints.py
python scripts/generate_pip_constraints.py --check   ->  requirements OK (13 checked)

Completion Ledger

§ Item Evidence
A1 Happy path uv sync resolves 50.0.0; python -c "import cryptography; print(__version__)"50.0.0; import mcp_server clean
A2 Edge cases N/A — version bump, no new branch or input handling
A3 Failure paths N/A — no code path added
A4–A6 Validation, invariants, idempotency N/A. Regeneration is idempotent: --check exits 0 against the committed files
B1–B3 Concurrency N/A
C1–C3 Resources / perf N/A — no runtime change; Cortex does not exercise the affected API
D1 Injection class N/A
D2 Untrusted data The advisory is the untrusted-data concern, and it is closed by the bump
D3 Secrets / least privilege None touched. Staged diff verified to contain no internal host, path or index reference; the only URLs are pypi.org and files.pythonhosted.org
E1 API compatibility Transitive dependency; no Cortex API changes
E2 Downstream consumers authlib, joserfc, pyjwt, secretstorage — all resolve against 50.0.0 in the same lock
E3 Persisted data None
E4 Cross-platform Hash set covers the same wheel platforms as before; --check passes on all 13 files
F1–F2 Observability N/A
G1 Path→test ledger No code paths introduced
G2 Regression test N/A — a dependency bump has no pre-fix behaviour to pin. The advisory's own reproduction is upstream
G3 Determinism generate_pip_constraints.py --check exits 0, proving the committed files are exactly what the generator emits from this lock
G4 Negative assertion Verified the diff touches only cryptography: one version change in uv.lock, one package name in the requirements diffs
G5 Full gate pytest -k "ast or extractor or codebase"1146 passed on the synced venv. Full suite is CI's job on this tree
H1–H3 Standards, readability, conventions Generated files, untouched by hand
H4 CHANGELOG N/A — no consumer-observable behaviour change; a transitive security bump with no API impact
H5 Commit hygiene Single commit, conventional message, advisory cited
H6 CI green Required before merge
H7 Boy-scout (§14) The remaining Dependabot alert in the fleet is fast-uri in cortex-viz, handled in that repo's own PR rather than folded in here

After merge

Dependabot closes alerts on the default branch, so the count should drop 10 → 0 once this lands. I will verify against the API rather than assume.

…26-69247)

Closes all ten open Dependabot alerts on this repo. They are one advisory
fanned out across uv.lock and the nine generated requirements files.

GHSA-g6cj-pr64-35w5 (high): pkcs7_decrypt_der / pkcs7_decrypt_pem /
pkcs7_decrypt_smime reported RecipientInfo encryptedKey decryption failures in
distinguishable ways, one of which disclosed the exact length recovered from
the RSA operation, and the distinction was also observable by timing. An
application that decrypts attacker-supplied EnvelopedData and reflects the
outcome hands the attacker a Bleichenbacher oracle against the
content-encryption key. Introduced in 44.0.0, fixed in 50.0.0.

Cortex calls no PKCS#7 decryption API, so practical exposure is nil —
cryptography is transitive, pulled by authlib, joserfc, pyjwt and
secretstorage. This is bar maintenance, not incident response.

Scope is exactly one package: uv.lock carries a single version change, and
`git diff requirements/` shows cryptography as the only changed requirement.
The ~94-line-per-file diff is that package's platform wheel hash set.

Regenerated, never hand-edited:
  uv lock --upgrade-package cryptography
  python scripts/generate_pip_constraints.py
  python scripts/generate_pip_constraints.py --check  ->  requirements OK (13 checked)

Verified: 50.0.0 resolved into the synced venv, `import mcp_server` clean,
pytest -k "ast or extractor or codebase" -> 1146 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@cdeust
cdeust merged commit 906bd7d into main Aug 6, 2026
21 checks passed
@cdeust
cdeust deleted the fix/cryptography-cve-2026-69247 branch August 6, 2026 13:47
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.

1 participant