CVE-2026-26007: Verified Repro With Script Download
CVE-2026-26007: pyca/cryptography SECT curve public key parsing lacks subgroup validation, enabling small-subgroup attacks that leak ECDH private key bits and allow ECDSA signature forgery.
CVE-2026-26007 is verified against the affected target. This medium reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00089.
What Is CVE-2026-26007?
CVE-2026-26007 (GHSA-R6PH-V2QM-Q3C2) is a high-severity vulnerability in pyca/cryptography where SECT curve public key parsing lacks subgroup validation, enabling small-subgroup attacks that leak ECDH private key bits and allow ECDSA signature forgery. Pruva reproduced it (reproduction REPRO-2026-00089).
CVE-2026-26007 Severity & CVSS Score
CVE-2026-26007 is rated medium severity, with a CVSS base score of 6.5 out of 10.
Medium — meaningful risk under specific conditions. Schedule a fix in the normal cycle.
How to Reproduce CVE-2026-26007
pruva-verify REPRO-2026-00089 curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00089/artifacts/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh Proof of Reproduction for CVE-2026-26007
Reproduced by Pruva's autonomous agents — 68 tool calls over 7 min. Full root-cause analysis and the complete transcript are below.
How the agent worked
Root Cause and Exploit Chain for CVE-2026-26007
Summary
pyca/cryptography accepts SECT curve public keys without verifying subgroup membership. For curves with cofactor > 1 (e.g., SECT163K1), a malicious point of small order can be loaded and used in ECDH, causing the shared secret to depend only on the victim’s private key modulo the small subgroup order. This enables leakage of private key bits and breaks protocol security.
Impact
- Package/component affected: pyca/cryptography EC public key parsing and construction paths (EllipticCurvePublicNumbers.public_key, load_der_public_key, load_pem_public_key).
- Affected versions: <= 46.0.4 (per ticket).
- Risk level and consequences: High. Small-subgroup points allow ECDH key leakage (private key mod small subgroup order) and can lead to ECDSA forgery in small subgroups.
Root Cause
The EC public key parsing/building logic relies on OpenSSL EC point construction without enforcing subgroup membership checks for binary SECT curves with nontrivial cofactor. In the Rust key parsing path (cryptography/src/rust/cryptography-key-parsing/src/spki.rs), points are accepted via EcPoint::from_bytes and EcKey::from_public_key without an explicit subgroup validation step. Similarly, EllipticCurvePublicNumbers.public_key() constructs a public key without verifying that the point is in the prime-order subgroup. This allows small-order points (e.g., order-2 point (0,1) on SECT163K1) to be accepted as valid public keys.
Reproduction Steps
- Run
repro/reproduction_steps.sh. - The script installs
cryptography==46.0.4, constructs a small-subgroup SECT163K1 public key at point (0,1), and performs ECDH with private keys 1–4. - Expected evidence: the point is accepted; odd private keys succeed with a constant shared secret, while even private keys fail, revealing private key parity (mod 2).
Evidence
- Log file:
logs/repro_output.txt - Key excerpts:
- "accepted small-subgroup point (0,1) on SECT163K1"
d=1 status=ok ...andd=2 status=err ...demonstrating parity leakage.
- Environment: Python 3 with
cryptography==46.0.4installed by the script.
Recommendations / Next Steps
- Add explicit subgroup membership checks for SECT curves with cofactor > 1 when constructing or loading public keys.
- Reject points not in the prime-order subgroup or perform cofactor multiplication validation.
- Upgrade to a fixed cryptography release once available and add regression tests for small-subgroup points.
Additional Notes
- Idempotent: running
repro/reproduction_steps.shrepeatedly yields the same acceptance/leakage pattern. - Limitation: demonstration focuses on SECT163K1 order-2 subgroup; other SECT curves with higher cofactors are also affected.
CVE-2026-26007 Reproduction Transcript
The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.
Full session Replay every step — scrub the timeline or play it back.