CVE-2026-71886
published 2026-10-03CVE-2026-71886: In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key…
PriorityP343high8.2CVSS 4.0
AVNACLATPPRNUINVCNVIHVANSCNSINSANEXCRXIRXARXMAVXMACXMATXMPRXMUIXMVCXMVIXMVAXMSCXMSIXMSAXSXAUXRXVXREXUAmber
EPSS
0.17%
5.6th percentile
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requiring that component to have been granted the authority to certify. OpenPGPCertificate.getCertificationBy() and getDelegationBy() resolve a third-party signature by matching its issuer key identifier against every key of the third-party certificate, then verify the issuing component's binding chain and the signature itself; nothing checked that the issuing component carried the RFC 9580 sec. 5.2.3.29 certification key flag (CERTIFY_OTHER) when the signature was created. A subkey bound only with SIGN_DATA - the online signing subkey of exactly the offline-primary arrangement those key flags exist to express - could therefore issue a positive User ID certification over an attacker-controlled identity, or a full-trust depth-one direct-key delegation of introducer trust, and the API returned it as a valid signature chain attributed to the third-party certificate. An application treating getCertificationBy(...).isValid() or getDelegationBy(...) as an identity or trusted-introducer decision would attribute the attacker's assertion to the offline primary key. The same held for a legacy RSA subkey bound only for encryption, whose algorithm is nonetheless able to sign. This does not forge the primary key's signature or recover any private key; it promotes an already-compromised restricted subkey to the primary key's identity-issuing authority, defeating the containment the key-flag separation provides. A third-party certification or delegation is now attributed to the issuing certificate only when the component key that made it is the primary key, or is a subkey holding CERTIFY_OTHER when the signature was created, so certification-capable subkeys continue to be accepted; primary keys are accepted whatever their key flags say, since a primary key is certification-capable by constr
Affected
1 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| legion_of_the_bouncy_castle_inc | bc-java | >= 1.81 < 1.86 | 1.86 |
CVSS provenance
nvdv4.08.2HIGHCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Amber
vendor_redhat8.2HIGH
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
Red Hat
bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
vendor_redhat·2026-10-03·CVSS 8.2
CVE-2026-71886 [HIGH] CWE-295 bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requiring that component to have been granted the authority to certify. OpenPGPCertificate.getCertificationBy() and getDelegationBy() resolve a third-party signature by matching its issuer key identifier against every key of the third-party certificate, then verify the issuing component's binding chain and the signature itself; nothing checked that the issuing component carried the RFC 9580 sec. 5.2.3.29 certification key flag (CERTIFY_O
VulDB
Legion of the Bouncy Castle up to 1.85 High-Level OpenPGP Certificate API privileges management
vuldb·2026-10-03·CVSS 8.2
CVE-2026-71886 [HIGH] Legion of the Bouncy Castle up to 1.85 High-Level OpenPGP Certificate API privileges management
A vulnerability has been found in Legion of the Bouncy Castle Bouncy Castle up to 1.85 and classified as critical. This vulnerability affects the function OpenPGPCertificate.getCertificationBy/OpenPGPCertificate.getDelegationBy of the component High-Level OpenPGP Certificate API. The manipulation leads to improper privilege management.
This vulnerability is traded as CVE-2026-71886. It is possible to initiate the attack remotely. There is no exploit available.
The affected component should be upgraded.
GHSA
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requir
ghsa_unreviewed·2026-10-03
CVE-2026-71886 [HIGH] CWE-285 In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requir
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requiring that component to have been granted the authority to certify. OpenPGPCertificate.getCertificationBy() and getDelegationBy() resolve a third-party signature by matching its issuer key identifier against every key of the third-party certificate, then verify the issuing component's binding chain and the signature itself; nothing checked that the issuing component carried the RFC 9580 sec. 5.2.3.29 certification key flag (CERTIFY_OTHER) when the signature was created. A subkey bound only with SIGN_DATA - the online signing subkey of exactly the offline-primary arrangement those key flags exist
No detection rules found.
No public exploits indexed.
Bugzilla
CVE-2026-71886 bouncycastle: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags [fedora-all]
bugzilla·2026-10-14·CVSS 8.2
CVE-2026-71886 [HIGH] CVE-2026-71886 bouncycastle: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags [fedora-all]
CVE-2026-71886 bouncycastle: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags [fedora-all]
Disclaimer: Community trackers are created by Red Hat Product Security team on a best effort basis. Package maintainers are required to ascertain if the flaw indeed affects their package, before starting the update process.
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requiring that component to have been granted the authority to certify. OpenPGPCertificate.getCertificationBy() and getDelegationBy() resolve a third-party signature by matching its issuer key identifier against every key of the third-party certificate
Bugzilla
CVE-2026-71886 bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
bugzilla·2026-10-03·CVSS 8.2
CVE-2026-71886 [HIGH] CVE-2026-71886 bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
CVE-2026-71886 bouncycastle: org.bouncycastle:bcpg-jdk18on: org.bouncycastle:bcpg-jdk15to18: bouncycastle: Unauthorized trust delegation via unverified subkey certification flags
In Bouncy Castle for Java before 1.86, the high-level OpenPGP certificate API accepted a third-party certification or trust delegation from any component key of the issuing certificate, without requiring that component to have been granted the authority to certify. OpenPGPCertificate.getCertificationBy() and getDelegationBy() resolve a third-party signature by matching its issuer key identifier against every key of the third-party certificate, then verify the issuing component's binding chain and the signature itself; nothing checked that the issuing component carried the RFC 9580 sec. 5.2.3.29 certification key
2026-10-03
Published