{
  "affected": [
    {
      "database_specific": {
        "categories": [
          "crypto-failure"
        ],
        "cvss": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N",
        "informational": null,
        "source": "https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0288.json"
      },
      "ecosystem_specific": {
        "affected_functions": null,
        "affects": {
          "arch": [],
          "functions": [],
          "os": []
        }
      },
      "package": {
        "ecosystem": "crates.io",
        "name": "cosmian_kyber",
        "purl": "pkg:cargo/cosmian_kyber"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0.0.0-0"
            }
          ],
          "type": "SEMVER"
        }
      ]
    }
  ],
  "database_specific": {
    "license": "CC0-1.0"
  },
  "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.",
  "id": "RUSTSEC-2026-0288",
  "modified": "2026-09-18T09:15:05.126703653Z",
  "published": "2026-08-16T12:00:00Z",
  "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"
    }
  ],
  "schema_version": "1.9.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "cosmian_kyber: AVX2 backend skips Fujisaki-Okamoto implicit rejection, enabling chosen-ciphertext key recovery"
}