pyquorum CVE-2026-44368
MEDIUMSeverity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-exposed timing oracle requires no auth (PR:N) but demands low-jitter conditions and many samples (AC:H); confidentiality impact only (C:L), no integrity or availability effect.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
4DescriptionGitHub Advisory
Impact
The mul_mod function implements multiplication via a binary expansion loop whose execution time depends on the Hamming weight of the second operand (the exponent). An attacker who can measure the time of secret‑sharing operations (e.g., via a remote service) could progressively recover the values of shares, ultimately leading to secret reconstruction.
Patches
https://github.com/svvqt/pyquorum/releases/tag/v0.2.1
AnalysisAI
Timing side-channel in pyquorum's modular multiplication allows remote attackers to recover Shamir secret-sharing values by measuring operation latency. The mul_mod function in all versions prior to 0.2.1 uses a binary expansion loop whose iteration count and branch path vary with the Hamming weight of the secret-derived operand, creating a measurable timing oracle. Given sufficient query volume and low-latency network access to an exposed secret-sharing service, an attacker can statistically correlate timing measurements to progressively reconstruct protected secrets. No public exploit code has been identified at time of analysis; EPSS is 0.07% (21st percentile) and the vulnerability is not in CISA KEV.
Technical ContextAI
The vulnerability resides in the Rust extension module of pyquorum (pkg:pip/pyquorum < 0.2.1), a Python Shamir secret-sharing library. The affected mul_mod function implemented modular multiplication via a classic double-and-add binary expansion: for each bit of the exponent operand it conditionally accumulated a partial product, causing total execution time to scale with the Hamming weight (number of set bits) of the secret-derived second operand. CWE-208 (Observable Timing Discrepancy) precisely captures this root cause: the algorithm leaks internal state through a measurable external channel. The fix in commit 1e9ac41 replaces the variable-time loop entirely with a constant-time path: a branchless widening_mul performing 128×128-bit multiplication via four 64-bit products, followed by a branchless mersenne_reduce operating on a hardcoded 127-bit Mersenne prime (2^127+1), and a constant-time final subtraction using a borrow-derived bitmask. The lazy_static crate was added to cache the prime constant. All internal callers of mul_mod within shamir_split, shamir_combine, and solve_system are updated to the new constant-time path.
RemediationAI
Upgrade pyquorum to version 0.2.1 or later using pip install --upgrade pyquorum; this is the vendor-confirmed fix as documented in GHSA-7r92-3jgr-r65q and released at https://github.com/svvqt/pyquorum/releases/tag/v0.2.1. The patch replaces the variable-time mul_mod with a constant-time Mersenne reduction implementation that eliminates data-dependent branching. If an immediate upgrade is not feasible, the primary compensating control is to avoid exposing shamir_split or shamir_combine operations over any network interface where an adversary can obtain precise timing measurements; isolating these calls to local, non-networked contexts removes the remote timing oracle entirely. Introducing artificial uniform latency padding around secret-sharing endpoints can degrade the timing signal but does not eliminate the root cause, adds latency overhead, and is easily bypassed with additional query volume. Aggressive rate-limiting on secret-sharing API endpoints (e.g., token bucket limiting to a few requests per second per client) reduces the attacker's ability to gather the thousands of samples required for statistical recovery but again is not a substitute for patching. Monitoring for abnormally high query rates to secret-sharing endpoints can serve as a detection signal.
Same weakness CWE-208 – Observable Timing Discrepancy
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
GHSA-7r92-3jgr-r65q