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.
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:AmberBouncycastle Bc Java
APPBouncycastle1.73 – 1.78 (excl.)
Related vulnerabilities
Bouncy Castle dla Java — bypass Name Constraints przez trailing dot
Bouncy Castle Java: brak walidacji wartości peer w protokole MTI/A0 DH
Bouncy Castle for Java — błędna weryfikacja OCSP (CWE-295)
Bouncy Castle Java: błędna weryfikacja hostname (CN-fallback) w JSSE
Niebezpieczna refleksja przy deserializacji klucza XMSS w Bouncy Castle