{"id":"RUSTSEC-2026-0290","title":"pqc_kyber: AVX2 backend skips Fujisaki-Okamoto implicit rejection, enabling chosen-ciphertext key recovery","summary":"pqc_kyber: AVX2 backend skips Fujisaki-Okamoto implicit rejection, enabling chosen-ciphertext key recovery","severity":"high","cvss":7.4,"cvssVector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","vendor":"pqc_kyber","product":"pqc_kyber","ecosystem":"rust","affected":["pqc_kyber >= 0.0.0-0"],"published":"2026-08-16","updated":"2026-09-18","sourceUpdated":"2026-09-18T09:15:05.128982400Z","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/RUSTSEC-2026-0290","references":[{"url":"https://crates.io/crates/pqc_kyber"},{"url":"https://rustsec.org/advisories/RUSTSEC-2026-0290.html"},{"url":"https://github.com/Argyle-Software/kyber/pull/121"}],"tags":["osv","rust"],"ingestedAt":"2026-09-18T16:21:29.497Z","slug":"RUSTSEC-2026-0290","body":"## Overview\n\n## Summary\n\nWhen `pqc_kyber` is built with the opt-in `avx2` feature on x86_64, its\nconstant-time conditional-move routine `cmov` is a no-op: it never performs the\ncopy. That `cmov` is exactly the step that applies the Fujisaki-Okamoto (FO)\nimplicit rejection during decapsulation. With it disabled, decapsulating an\n*invalid* ciphertext no longer returns a key-independent pseudorandom value;\nit returns a value that depends on the decrypted plaintext of the\nattacker-chosen ciphertext. This restores the chosen-ciphertext decryption\noracle that the FO transform exists to remove, and yields full recovery of the\nstatic 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, the reachable call path, and reproduction details.\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\nkey. Any protocol reusing a Kyber key pair across decapsulations (static or\nlong-term KEM keys, KEMTLS, HPKE recipients, pinned keys) is exposed;\nephemeral-only key shares are not. The defect was verified end to end on\nML-KEM-768: the full secret key was recovered in 4,272 decapsulation queries.\n\n## Maintenance status\n\nThe crate is unmaintained (last release 0.7.1, August 2023); no patched version\nexists or 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.\n\n## Affected packages\n\n- `pqc_kyber >= 0.0.0-0`\n\n## Remediation\n\nRefer to the advisory for the patched release.","depth":"twilight","depthScore":41,"depthScoreParts":{"impact":40.7,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}