ZeroHour

CVE-2024-14041

PoC mass

Timing Side-Channel (KyberSlash) in Bouncy Castle Java ML-KEM Key Decapsulation

CVSS 4.0
8.2 high
EPSS
<1%p28
Published
()
Modified
AI analysis

Bouncy Castle for Java versions 1.73 through before 1.78 has an observable timing discrepancy (CWE-208) — the KyberSlash1 and KyberSlash2 flaws — in its ML-KEM (CRYSTALS-Kyber) routines Poly.toMsg, Poly.compressPoly, and PolyVec.compressPolyVec, which divide secret-derived polynomial coefficients by the modulus q. An attacker who can initiate or observe a large number of ML-KEM decapsulation operations performed with the same long-term private key and measure their timing can use the secret-dependent division timing to recover that key. Key recovery defeats the confidentiality of the post-quantum key exchange (CVSS 4.0 rates this 8.2 High with high attack complexity and High confidentiality impact); encapsulation-side compression is unaffected because it only operates on values that become the public ciphertext. Any application or service using affected bc-java releases for ML-KEM/Kyber decapsulation is affected, particularly deployments that reuse static ML-KEM keys across many exchanges. No in-the-wild exploitation is known (EPSS 0.3%, not in CISA KEV), but public proof-of-concept timing attacks are published at kyberslash.cr.yp.to.

What to do: Upgrade Bouncy Castle for Java to 1.78 or later, which removes the secret-dependent divisions in the ML-KEM routines. Inventory applications bundling bc-java jars in the 1.73–1.77 range and prioritize those performing ML-KEM/Kyber decapsulation with long-term (reused) keys, rotating such keys after patching. Where an immediate upgrade is not possible, treat high-volume, network-observable ML-KEM decapsulation paths as the highest risk.

Affected
Bouncy Castle (bouncycastle) Bouncy Castle for Java (bc-java)1.73 up to but not including 1.78 (all 1.73–1.77 releases)
Estimated exposure
mass≈ millions of Java deployments embed vulnerable bc-java 1.73–1.77; the exploitable subset using ML-KEM decapsulation is likely far smaller and unquantified — bc-java is one of the most widely distributed Java cryptography libraries (very high Maven Central usage and embedded in many server products, frameworks, and applications), and the 1.73–1.77 releases circulated broadly, so millions of…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In Bouncy Castle for Java from 1.73 to before 1.78, three ML-KEM (CRYSTALS-Kyber) routines divided secret-derived polynomial coefficients by the modulus q: Poly.toMsg, which decodes the decrypted message, and the ciphertext compression routines Poly.compressPoly and PolyVec.compressPolyVec. An attacker able to measure the timing of a large number of decapsulations performed with the same long-term private key can recover that key. These are the KyberSlash1 (Poly.toMsg) and KyberSlash2 (ciphertext compression) divisions. Compression performed during encapsulation operates on values that become the public ciphertext and is not affected.

Vendors
bouncycastle
Products
bc-java
Weakness
CWE-208
Vector
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/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:Amber

In the news

No ingested article mentions this CVE yet.