The Kyber reference implementation before 9b8d306, when compiled by LLVM Clang through 18.x with some common optimization options, has a timing side channel that allows attackers to recover an ML-KEM 512 secret key in minutes. This occurs because poly_frommsg in poly.c does not prevent Clang from emitting a vulnerable secret-dependent branch.
[
{
"source": "https://github.com/pq-crystals/kyber/commit/9b8d30698a3e7449aeb34e62339d4176f11e3c6c",
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1",
"digest": {
"line_hashes": [
"129159944488822175469922892442807990041"
],
"threshold": 0.9
},
"id": "CVE-2024-37880-16c196d2",
"target": {
"file": "ref/verify.h"
}
},
{
"source": "https://github.com/pq-crystals/kyber/commit/9b8d30698a3e7449aeb34e62339d4176f11e3c6c",
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1",
"digest": {
"line_hashes": [
"234689300167707083092684360083613531595",
"146167400202682821831380952758195444065",
"236930179887150445801603796343847781378",
"132795227996355397657871530656993888564",
"98085589001609537616281371573502341052",
"220137936012977417917610474229036188693",
"230950984777136591460947291073851511222",
"152441685494613281378637909075275929112",
"94291155035070951370862928007735827934",
"301827595347717556978065680018854490571",
"234954458262773481690591469489954392452",
"117445256152861512856057429889126623864",
"140998155976398254487220450403221579936"
],
"threshold": 0.9
},
"id": "CVE-2024-37880-230f7be1",
"target": {
"file": "ref/poly.c"
}
},
{
"source": "https://github.com/pq-crystals/kyber/commit/9b8d30698a3e7449aeb34e62339d4176f11e3c6c",
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1",
"digest": {
"function_hash": "318988264785853182587844791599630315127",
"length": 444.0
},
"id": "CVE-2024-37880-c935abed",
"target": {
"file": "ref/poly.c",
"function": "poly_frommsg"
}
}
]