CVE-2026-71892: CMS key-transport recipient key-size validation never runs for RFC 9709 HKDF-derived keys
In Bouncy Castle for Java before 1.86, the opt-in key-size validation on CMS key-transport recipients, org.bouncycastle.cms.jcajce.JceKeyTransRecipient.setKeySizeValidation(true), never ran for a message using RFC 9709 content-encryption key derivation (id-alg-cek-hkdf-sha256). The branch that should have selected the actual content-encryption algorithm carried in the key derivation AlgorithmIdentifier's parameters compared the encrypted-key byte array against the id-alg-cek-hkdf-sha256 object identifier, a comparison between a byte array and an ASN1ObjectIdentifier that is false for every possible input, so the check fell through to a key-size lookup on the outer wrapper OID. That OID identifies a key-derivation construction rather than a cipher and has no registered key size, so the size comparison was skipped entirely. A key-transport EnvelopedData or AuthEnvelopedData whose transported, HKDF-derived content-encryption key did not match the key size of the advertised content-encryption algorithm was therefore accepted even with validation explicitly enabled, silently defeating the only mechanism the API offers for enforcing recovered key size. The recipient now dispatches on the content-encryption AlgorithmIdentifier's algorithm OID, so validation checks the recovered key against the inner content-encryption algorithm. Messages with a matching key size, non-HKDF messages, and recipients that do not enable validation are unaffected. This issue also affects Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series).
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Bouncy Castle for Javato a version that resolves this vulnerability.Fixed in 1.86 - Upgrade
Upgrade
bcpkix-fipsto a version that resolves this vulnerability.Fixed in 2.0.13 - Upgrade
Upgrade
bcpkix-fipsto a version that resolves this vulnerability.Fixed in 2.1.13
Event History
Frequently Asked Questions
Which deployments are exposed to this issue?
Deployments using Bouncy Castle for Java before 1.86 are affected when they process CMS key-transport EnvelopedData or AuthEnvelopedData using RFC 9709 HKDF-derived content-encryption keys. The issue applies only when the application has opted in to recipient key-size validation with JceKeyTransRecipient.setKeySizeValidation(true).
What must an attacker provide to bypass the intended validation?
An attacker needs to supply a key-transport CMS message using id-alg-cek-hkdf-sha256 in which the transported, HKDF-derived content-encryption key has a size that does not match the advertised content-encryption algorithm. The affected code accepts that mismatch instead of enforcing the recovered key size.
Does enabling key-size validation mitigate this issue in affected versions?
No. For the affected HKDF-derived key path, validation is silently skipped even when setKeySizeValidation(true) is explicitly enabled.
How can I determine whether my application is affected?
Check whether it uses a Bouncy Castle for Java version earlier than 1.86, enables JceKeyTransRecipient key-size validation, and accepts CMS key-transport EnvelopedData or AuthEnvelopedData using id-alg-cek-hkdf-sha256. If all of those conditions apply, the intended key-size check did not run.