CVE-2026-71887: Bouncy Castle for Java OpenPGP signature misattribution in subkey binding validation

CVE-2026-71887 · Severity: info · Published 2026-10-03

Bouncy Castle for Java's OpenPGP implementation incorrectly validates signing subkeys that lack required cross-certification signatures, allowing an attacker to bind a victim's public signing key to their own identity. This causes genuine signatures made by the victim to be misattributed to the attacker's chosen identity, undermining the authenticity and attribution guarantees of PGP signatures.

Technologies: Bouncy Castle for Java. Vendors: Bouncy Castle.

Quick answers

Is CVE-2026-71887 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-71887 being exploited in the wild.
How severe is CVE-2026-71887?
Informational severity, published 3 October 2026.
Which products and versions are affected?
Bouncy Castle for Java before 1.86.
Is there a fix for CVE-2026-71887?
Yes: fixed in 1.86. Until then: Update to Bouncy Castle for Java 1.86 or later. Use the low-level PGPSignature / PGPPublicKeyRing API which is unaffected by this vulnerability. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-71887 attacked?
It is attacked over the network, in a software library.
Am I affected by CVE-2026-71887?
Check whether you run Bouncy Castle for Java at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • Fixed in: 1.86

Update to Bouncy Castle for Java 1.86 or later. Use the low-level PGPSignature / PGPPublicKeyRing API which is unaffected by this vulnerability.

Technical details

The vulnerability exists in the high-level OpenPGPCertificate API where two code paths resolve key flags inconsistently: isSigningKey() inherits flags from the primary key when the binding signature omits the Key Flags subpacket, while verifyEmbeddedPrimaryKeyBinding() checks only the binding signature's own flags and skips cross-certification validation. An attacker can create a Subkey Binding signature without Key Flags or the required Primary Key Binding signature (which requires the subkey's private key), then attach a victim's public signing subkey to their own primary key. Legitimate signatures made by the victim are accepted as valid but attributed to the attacker's certificate and chosen identity. The low-level PGP API is unaffected as it performs no binding checks by design.

Affected products

  • Bouncy Castle Bouncy Castle for Java before 1.86

Timeline

  • 2026-10-03: disclosed

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.