OpenIDC/cjose is a C library implementing the Javascript Object Signing and Encryption (JOSE). In versions 0.6.1 through 0.6.2.5, when cjose encrypts a JWE using an AES-CBC-HMAC content-encryption algorithm (A128CBC-HS256, A192CBC-HS384, or A256CBC-HS512) together with any key-management algorithm that generates a fresh content-encryption key (CEK), the CEK is all zero bytes instead of being randomly generated. The resulting JWE is therefore encrypted and authenticated under a fixed, publicly known key, so anyone who obtains the JWE can recover the plaintext and forge or modify the content. This is fixed in version 0.6.2.6 by _cjose_jwe_set_cek_aes_cbc() generating the CEK from RAND_bytes. A regression test asserts that the encrypted_key differs across two encryptions for each AES-CBC-HMAC variant. Until upgrading, for data encrypted with cjose, three options are available. Use an AES-GCM enc (A128GCM / A192GCM / A256GCM) instead of an AES-CBC-HMAC enc, use alg=dir with a caller-supplied CEK, or avoid using cjose for JWE encryption with the affected algorithm pair. These are mitigations for new ciphertexts only; data already encrypted under the zero key remains compromised and should be re-encrypted (and any secrets it contained rotated).
{
"cna_assigner": "GitHub_M",
"cwe_ids": [
"CWE-321",
"CWE-330"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/53xxx/CVE-2026-53939.json"
}{
"extracted_events": [
{
"range": [
{
"introduced": "0.6.1"
},
{
"fixed": "0.6.2.6"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "2a6e5bd969fa20059fb00913fb9f57d77ea6a4d9"
}
],
"source": "REFERENCES_COMMIT"
},
{
"original_tag": "v0.6.2.6",
"range": [
{
"fixed": "7d1aceae7da31fc6975db23f70f3c0485c5d5c43"
}
],
"source": "REFERENCES_TAG"
}
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-53939.json"
[
{
"deprecated": false,
"digest": {
"line_hashes": [
"116477046408924815028086400580258302402",
"35270573579896220926845581587538046944",
"269347021087967161202338501076804441511",
"264825813263723684699009957575875684344",
"283644656238956572677772821184949171710",
"31346249582929627151043431563532097981",
"197839418495590472966498508209407985421"
],
"threshold": 0.9
},
"id": "CVE-2026-53939-617de16e",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/openidc/cjose/commit/2a6e5bd969fa20059fb00913fb9f57d77ea6a4d9",
"target": {
"file": "test/check_jwe.c"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "235114565519311844344494074596621281681",
"length": 1255
},
"id": "CVE-2026-53939-626334da",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/openidc/cjose/commit/2a6e5bd969fa20059fb00913fb9f57d77ea6a4d9",
"target": {
"file": "test/check_jwe.c",
"function": "cjose_jwe_suite"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "81398865795572921431090125048300519039",
"length": 1128
},
"id": "CVE-2026-53939-c2071872",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/openidc/cjose/commit/2a6e5bd969fa20059fb00913fb9f57d77ea6a4d9",
"target": {
"file": "src/jwe.c",
"function": "_cjose_jwe_set_cek_aes_cbc"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"43495399126215342125969949187179913312",
"174249264605283481135370272835699076690",
"262396667104585820704651554589271265338",
"130510499250362651500522560773934573303",
"172875467020067064381028286810781091822",
"166376062333546220761724668685629877461",
"297757171072977877463593979263827555000"
],
"threshold": 0.9
},
"id": "CVE-2026-53939-d23cba5a",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/openidc/cjose/commit/2a6e5bd969fa20059fb00913fb9f57d77ea6a4d9",
"target": {
"file": "src/jwe.c"
}
}
]
"2026-10-21T10:16:58Z"