Skip to main content

Bouncy Castle CVE-2026-71888

| EUVDEUVD-2026-91991 HIGH
Improper Validation of Integrity Check Value (CWE-354)
2026-10-03 bcorg GHSA-j453-27jp-4cph
8.7
CVSS 4.0 · Vendor: bcorg
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Intercept CMS message in transit
  2. Delivery
    Craft mismatched digestAlgorithm/authAttrs fields
  3. Exploit
    Insert forged ESSSecurityLabel attribute
  4. Execution
    Deliver tampered message to application
  5. Impact
    Application acts on forged authenticated attributes

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Integrity verification
Exploitation Conditions

Exploitation requires that the target application parse CMS AuthenticatedData via the streaming CMSAuthenticatedDataParser (or the in-memory CMSAuthenticatedData path) AND make an authorization, routing, or labelling decision from the attributes returned by getAuthAttrs(); without that consumption pattern the forged attributes have no effect. The attacker must occupy an active in-transit (man-in-the-middle) position to modify a message, and crafts a message where digestAlgorithm is absent but authAttrs is present. Limiting factors: the attacker needs NO keys (neither key-encryption nor content-MAC key), but does need message-tampering capability and a victim app that trusts authAttrs; the content/eContent itself remains MAC-protected so only the authenticated attributes can be forged, not the payload. Only affects versions before the fixes (BC-Java <1.86, BC-LTS <2.73.13, BC-FJA bcpkix-fips <1.0.13/2.0.13/2.1.13, bcutil-fips <2.0.8/2.1.8).

Impact

Signals conflict on whether this merits urgent prioritization. The vendor CVSS 4.0 score of 8.7 (High) reflects AV:N/PR:N/VI:H - a network-reachable, unauthenticated integrity compromise - but the base vector rates AC:L even though the description explicitly requires an attacker 'able to modify a message in transit,' i.e. an active man-in-the-middle position; under CVSS 3.1 that precondition is more honestly AC:H, materially lowering real-world exploitability. No EPSS score was supplied, there is no CISA KEV listing, and no POC was provided, so the exploitation status is 'no public exploit identified at time of analysis' - nothing suggests active or widespread exploitation. Impact is narrow and integrity-only: VC:N/VA:N confirm no confidentiality or availability loss, the content itself stays MAC-bound, and only the authenticated attributes (e.g. an RFC 2634 ESSSecurityLabel) can be forged. Crucially, exploitation only matters if an application both uses the streaming CMSAuthenticatedDataParser AND makes authorization/routing/labelling decisions from getAuthAttrs() - a specific, uncommon usage pattern. Net: a legitimately serious cryptographic authentication-bypass flaw in a very widely used library, but one whose practical risk is gated by an MITM prerequisite and an app-specific consumption pattern, so for most deployments it is lower-urgency than the 8.7 alone implies. Patch available; prioritize for applications that act on CMS authenticated attributes.

Exploit ScenarioDerived

An attacker positioned to tamper with traffic intercepts a valid CMS AuthenticatedData message, crafts a variant where digestAlgorithm is absent but authAttrs is present, and inserts a forged authenticated attribute such as an ESSSecurityLabel without possessing the key-encryption or content-MAC key. The streaming parser verifies the genuine content MAC and returns the injected attributes via getAuthAttrs() as if authenticated, so a downstream application makes an authorization, routing, or labelling decision based on attacker-chosen values. No public exploit code is known; the attack requires an active in-transit (MITM) position consistent with the network attack vector.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 03, 2026

Improper validation of the digestAlgorithm/authAttrs pairing in Bouncy Castle's CMS AuthenticatedData handling lets a man-in-the-middle make the parser return authenticated attributes that the message MAC never covered, in Bouncy Castle for Java before 1.86, Bouncy Castle LTS before 2.73.13, and the BC-FJA/FIPS releases (bcpkix-fips before 1.0.13/2.0.13/2.1.13 and bcutil-fips before 2.0.8/2.1.8). Because the streaming CMSAuthenticatedDataParser picks in its constructor whether the MAC covers the DER encoding of authAttrs or the eContent OCTET STRING based solely on whether digestAlgorithm is present - a field that precedes authAttrs in the SEQUENCE - a message crafted with digestAlgorithm absent but authAttrs present passes the genuine content-MAC check and then exposes attacker-chosen attributes through getAuthAttrs(). Exploitation is unauthenticated at the network layer (CVSS:4.0 PR:N, no keys of either the key-encryption or content-MAC type are needed) but requires an in-transit tampering position and a victim application that makes an authorization, routing, or labelling decision from those attributes; the eContent payload itself remains MAC-bound, no public exploit has been identified at time of analysis, and signals conflict on whether this merits urgent prioritization (vendor CVSS 4.0 8.7 with AC:L versus an independent CVSS 3.1 assessment of AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N).

RemediationAI

Vendor-released patch: upgrade Bouncy Castle for Java to 1.86 or later, Bouncy Castle for Java LTS to 2.73.13 or later, and the BC-FJA/FIPS modules to bcpkix-fips 1.0.13 (1.0.X), 2.0.13 (2.0.X) or 2.1.13 (2.1.X) and bcutil-fips 2.0.8 (2.0.X) or 2.1.8 (2.1.X), per the vendor advisory at https://github.com/bcgit/bc-java/wiki/CVE%E2%80%902026%E2%80%9071888 and the source fix at https://github.com/bcgit/bc-java/commit/dcb683b32b440f1beb1d2276a34930164281fb95 (which also makes the in-memory path throw CMSException("Malformed content.") and the streaming path fail getAuthAttrs()/getMac() with 'authAttrs presence inconsistent with digestAlgorithm presence'). If an upgrade cannot be deployed immediately, the effective compensating control is to stop trusting attributes returned by getAuthAttrs() on CMS AuthenticatedData for authorization, routing or labelling decisions, or to pre-validate incoming messages and reject any encoding in which digestAlgorithm is absent while authAttrs is present (and vice versa) before invoking the parser - the trade-off is that rejecting such non-conformant messages may break interoperability with peers that emit them, and the wrapper must be applied consistently to every parse site since the defect is inside the library rather than the caller. Note that only the authenticated attributes are forgeable: eContent remains bound to the verified content MAC, so decisions based on the payload rather than on authAttrs are not affected, though the short-term exposure window remains until patched releases are installed given the unauthenticated network attack vector and the absence of any public exploit identified at time of analysis.

Affected VersionsENISA

BC-JAVA 1.70 <1.86
BC-FJA 1.0.0 <1.0.13
BC-FJA 2.0.0 <2.0.8
BC-LTS-JAVA 2.73.0 <2.73.13
BC-FJA 2.1.0 <2.1.13
BC-FJA 2.1.0 <2.1.8
BC-JAVA 0 <1.86
BC-FJA 2.0.0 <2.0.13

Affected Packages

euvd bc_fja fix: 1.0.13, 2.0.8, 2.0.13, 2.1.8, 2.1.13
euvd bc_java fix: 1.86
euvd bc_lts_java fix: 2.73.13

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 3 packages in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CMS AuthenticatedData, defined in RFC 5652 section 9, is a keyed-MAC-protected container (HMAC or similar) rather than a signature container; sec. 9.1 requires that authAttrs be present whenever digestAlgorithm is present, because the digest algorithm exists only to compute the message-digest attribute that sec. 9.2 requires when authAttrs are present, and sec. 9.2 makes the MAC cover either the DER encoding of authAttrs (when present) or the eContent OCTET STRING directly (when not). Bouncy Castle's streaming org.bouncycastle.cms.CMSAuthenticatedDataParser had to select between those two MAC strategies in its constructor, before it could read authAttrs, which appears later in the SEQUENCE, so it chose on digestAlgorithm presence alone; a message where digestAlgorithm is absent but authAttrs is present therefore had its content MAC verified normally, after which the unprotected authAttrs were handed back via getAuthAttrs()/(getContentDigest()) as though authenticated. This is a root-cause instance of CWE-354 (Improper Validation of Integrity Check Value) - a malformed-but-accepted encoding defeats the integrity guarantee for a field the parser advertises as authenticated. It is an explicit variant of CVE-2026-59642, which bound the content to the MAC for messages that legitimately carry authAttrs but did not address this inverse mismatch; the fix for CVE-2026-71888 adds a digestAlgorithmPresent flag and a cross-check in getAuthAttrSet() that fails both getAuthAttrs() and getMac() with 'authAttrs presence inconsistent with digestAlgorithm presence', while asn1.cms.AuthenticatedData now rejects the mismatched pairing at parse time so the in-memory CMSAuthenticatedData path reports CMSException("Malformed content."). Affected components are the CPE-listed Legion of the Bouncy Castle packages bc-java, bc-lts-java and bc-fja; because the bug is in the parser/advisory logic rather than a crypto primitive, it affects the standard, LTS and FIPS-validated distributions alike.

Know when Java gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (bcorg) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/U:Amber
vuln.today AI 5.9 MEDIUM

In-transit message tampering needs an active MITM position (AC:H) but no keys (PR:N); only authenticated attributes are forged while content stays MAC-bound, so I:H with C:N and A:N.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
SUSE 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N

Primary rating from Vendor (bcorg).

CVSS VectorVendor: bcorg

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

In Bouncy Castle for Java before 1.86, the streaming CMS AuthenticatedData parser accepted a message whose digestAlgorithm and authAttrs fields disagreed about whether authenticated attributes were present. RFC 5652 sec. 9.1 pairs the two, requiring that authAttrs be present whenever digestAlgorithm is, and sec. 9.2 makes the MAC cover the DER encoding of authAttrs when they are present and the eContent OCTET STRING directly when they are not. CMSAuthenticatedDataParser has to choose between those two in its constructor, before it can reach authAttrs, which comes later in the SEQUENCE, so it chose on digestAlgorithm alone: for a message with digestAlgorithm absent but authAttrs present it verified the content MAC and then returned the attributes through getAuthAttrs() as though they had been authenticated, when the MAC had never covered them. An attacker able to modify a message in transit could insert an authenticated attribute, such as an RFC 2634 ESSSecurityLabel, into an otherwise valid message while holding neither the key-encryption key nor the content-MAC key, and an application taking an authorization, routing or labelling decision from those attributes would act on attacker-chosen values. The content itself remained MAC-bound. asn1.cms.AuthenticatedData now rejects the mismatched pairing when parsing and CMSAuthenticatedDataParser cross-checks the two fields once authAttrs is read. This is a variant of CVE-2026-59642, which bound the content to the MAC for messages that legitimately carry authAttrs, and which does not address this case. This issue also affects Bouncy Castle for Java LTS before 2.73.13, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.13 (1.0.X series), 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series), and bcutil-fips 2.0.8 (2.0.X series) and 2.1.8 (2.1.X series).

Executive ViewAI

Why It Matters

A validation flaw in Bouncy Castle's CMS AuthenticatedData parser, a cryptography library embedded in countless Java applications and FIPS-validated products, allows a network-positioned attacker to inject authenticated attributes that the message integrity check never actually protected. Any application that consumes CMS AuthenticatedData messages - including signed/encrypted messaging gateways, healthcare and financial data exchanges, and federal systems built on the FIPS variants - could accept forged metadata as if it were cryptographically verified, undermining the trust assumptions behind compliance-driven architectures. Leadership should care because the affected components sit deep in the software supply chain: remediation depends on every downstream product team upgrading the library and rebuilding, not on a single perimeter fix.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
High
very widely deployed Java cryptography library across enterprise and server software
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Module for Development Tools 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Affected
SUSE Linux Enterprise Server 16.0 Affected
SUSE Linux Enterprise Server 16.1 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy