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).
Security readout for executives and security teams
Plain-English summary
Affected cjose versions can protect certain encrypted JWE messages with a publicly known all-zero key. Anyone obtaining such a message could read it and alter it without detection. The flaw threatens confidentiality and integrity, including historical ciphertexts, but does not directly affect availability.
Executive priority
Treat as an urgent confidentiality and integrity incident where affected encryption was used. Patch immediately, determine whether sensitive historical JWEs exist, re-encrypt recoverable data, and rotate exposed credentials or secrets. Systems merely carrying cjose without the affected encryption combinations have lower practical urgency after configuration verification.
Technical view
cjose 0.6.1 through 0.6.2.5 fails to randomly generate the CEK when AES-CBC-HMAC encryption is paired with key management that creates a fresh CEK. The fixed CEK permits plaintext recovery and valid forgery. Version 0.6.2.6 uses RAND_bytes to generate the CEK.
Likely exposure
Exposure requires cjose 0.6.1–0.6.2.5 to encrypt JWE using A128CBC-HS256, A192CBC-HS384, or A256CBC-HS512 with key management that generates a fresh CEK. AES-GCM and alg=dir with a caller-supplied CEK are not identified as affected. Previously generated affected JWEs remain compromised.
Exploitation context
No active exploitation is established by the supplied sources, and the CVE is not listed as KEV in the bundle. Exploitation would require obtaining an affected JWE, but no privileges, user interaction, or secret-key discovery are required afterward. Public disclosure makes prompt remediation prudent.
Researcher notes
The defect maps to hard-coded cryptographic keys and insufficient randomness. Scope assessment must consider both library version and the alg/enc combination; package presence alone does not prove exploitable use. The supplied evidence establishes deterministic zero-key encryption and a source-level fix, but provides no evidence of observed attacks or affected downstream products.
Mitigation direction
Upgrade cjose to version 0.6.2.6 or later.
For new ciphertexts, use an AES-GCM content-encryption algorithm.
Alternatively, use alg=dir with a securely caller-supplied CEK.
Avoid affected algorithm combinations until the upgrade is complete.
Re-encrypt historical affected data and rotate any secrets it contained.
Validation and detection
Inventory applications and dependencies containing cjose versions 0.6.1 through 0.6.2.5.
Identify JWE encryption using the three affected AES-CBC-HMAC algorithms.
Confirm whether key management generates a fresh CEK or uses alg=dir.
Locate retained or transmitted JWEs created by affected configurations.
Verify production deployments use cjose 0.6.2.6 or later.
Confirm repeated test encryptions no longer indicate a fixed CEK.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-321: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
1ADP providers
4Source links
SSVC decision data
CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: pocAutomatable: yesTechnical Impact: total
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-321 · source CWE mapping
Use of Hard-coded Cryptographic Key
Use of Hard-coded Cryptographic Key represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.
Use of Insufficiently Random Values represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.