{"id":"RUSTSEC-2026-0288","summary":"cosmian_kyber: AVX2 backend skips Fujisaki-Okamoto implicit rejection, enabling chosen-ciphertext key recovery","details":"## Summary\n\n`cosmian_kyber` is a fork of `Argyle-Software/kyber` and inherits a broken\nconstant-time conditional-move routine `cmov` in its AVX2 backend. When built\nwith the opt-in `avx2` feature on x86_64, `cmov` is a no-op: it never performs\nthe copy. That `cmov` is the step that applies the Fujisaki-Okamoto (FO) implicit\nrejection during decapsulation. With it disabled, decapsulating an *invalid*\nciphertext no longer returns a key-independent pseudorandom value; it returns a\nvalue that depends on the decrypted plaintext of the attacker-chosen ciphertext.\nThis restores the chosen-ciphertext decryption oracle that the FO transform\nexists to remove, and yields full recovery of the static secret key.\n\nThe attack requires no timing measurement, no side channel, and no faults; only\nthe ability to submit ciphertexts to a decapsulation operation under a reused\nkey pair and observe the resulting shared secret. See the linked pull request\nfor the root cause and the reachable call path.\n\n## Affected configuration\n\nReachable only in builds with `features = [\"avx2\"]` on an x86_64 target. The\ndefault (reference) backend and all non-x86_64 targets are unaffected.\n\n## Impact\n\nComplete IND-CCA break. The plaintext-checking oracle drives a standard\nchosen-ciphertext key-recovery attack and extracts the entire static secret key.\nAny protocol reusing a Kyber key pair across decapsulations is exposed;\nephemeral-only key shares are not. The identical defect in the parent crate was\nverified end to end on ML-KEM-768 (full key recovered in 4,272 decapsulation\nqueries).\n\n## Maintenance status\n\n`cosmian_kyber` is a stale fork (last published 0.1.0, January 2023) of an\nunmaintained upstream, and no fixed release is expected.\n\n## Mitigation\n\n- If remaining on this crate, do not enable the `avx2` feature; the default\n  reference backend performs implicit rejection correctly.\n- Do not reuse a Kyber key pair across decapsulations.\n\n## Credit\n\nReported by 007bsd.","modified":"2026-09-18T09:15:05.126703653Z","published":"2026-08-16T12:00:00Z","database_specific":{"license":"CC0-1.0"},"references":[{"type":"PACKAGE","url":"https://crates.io/crates/cosmian_kyber"},{"type":"ADVISORY","url":"https://rustsec.org/advisories/RUSTSEC-2026-0288.html"},{"type":"WEB","url":"https://github.com/Cosmian/kyber/pull/6"}],"affected":[{"package":{"name":"cosmian_kyber","ecosystem":"crates.io","purl":"pkg:cargo/cosmian_kyber"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0.0.0-0"}]}],"ecosystem_specific":{"affected_functions":null,"affects":{"functions":[],"arch":[],"os":[]}},"database_specific":{"categories":["crypto-failure"],"source":"https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0288.json","cvss":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","informational":null}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N"}]}