Skip to main content

Bouncy Castle Java EUVDEUVD-2026-52035

| CVE-2026-59639 HIGH
Improper Verification of Cryptographic Signature (CWE-347)
2026-08-03 bcorg GHSA-r3rc-x3pq-jmw7
8.7
CVSS 4.0 · Vendor: bcorg
View

Attack ChainAIDerived

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

  1. Access
    Identify application accepting CMS SignedData input
  2. Delivery
    Craft degenerate SignedData with empty signerInfos SET
  3. Exploit
    Embed arbitrary payload in the envelope
  4. Execution
    Submit to application verification endpoint
  5. Persist
    verifySignatures() iterates zero signers and returns true
  6. Impact
    Unsigned content accepted as cryptographically authenticated

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires: (1) the target application uses Bouncy Castle's CMSSignedData.verifySignatures() as its primary or sole authenticity check for received CMS/PKCS#7 SignedData - applications using lower-level SignerInformation APIs directly or other libraries are not affected; (2) the attacker can supply a crafted CMS envelope to that code path, e.g., via file upload, API call, or network protocol message carrying signed content. Per the CVSS PR:N rating, no authentication is required on the attacker's side. Exploitation is limited to affected versions of bc-java (before 1.85), bc-lts-java (before 2.73.12), and bc-fja (before the per-series patch versions); counter-signature verification is explicitly unaffected per the vendor commit notes. Applications that independently validate signer count before calling verifySignatures(), or that use getCertificates() for degenerate structures, are not exploitable.

Impact

The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:N/VI:H) correctly captures the ceiling risk: zero privileges, zero complexity, network-reachable, and high integrity impact for any affected application using verifySignatures() as a trust boundary. However, actual exploitability is gated on application-level context - specifically whether the target application uses this API as its primary authenticity check and whether an attacker can reach that code path with a crafted CMS envelope. The vulnerability is not listed in CISA KEV and no public exploit code has been identified at time of analysis; EPSS data was not provided in the available intelligence. The urgency rating of Amber (CVSS 4.0 supplemental) indicates elevated but not immediate priority. The tags 'JWT Attack' and 'Information Disclosure' suggest downstream exploitation patterns in applications using CMS for token or credential signing, but these impacts are inferred from context rather than confirmed by the advisory. The integrity-only impact profile (VI:H, VC:N, VA:N) is consistent with a pure signature bypass - no direct data exfiltration or service disruption is implied.

Exploit ScenarioDerived

An attacker targeting a firmware update service, document signing platform, or credential validation endpoint that uses CMSSignedData.verifySignatures() constructs a CMS SignedData envelope with an empty signerInfos SET wrapping arbitrary malicious payload. The envelope is submitted to the application's verification endpoint; verifySignatures() iterates zero signers and returns true, causing the application to accept and process the unsigned payload as fully authenticated. No public exploit code has been identified at time of analysis, but the construction is trivial using any standard ASN.1 or CMS library.

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

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

Alert me

AnalysisAIv1 – Aug 03, 2026

Signature bypass in Bouncy Castle for Java allows any attacker-supplied content wrapped in a zero-signer CMS envelope to pass CMSSignedData.verifySignatures() without any valid cryptographic signature. The method iterates an empty signerInfos SET, falls through to a vacuous return true, and any application using it as its top-level authenticity check silently accepts unsigned attacker-controlled content as authenticated - a classic fail-open flaw (CWE-347). No public exploit has been identified at time of analysis and the vulnerability is not listed in CISA KEV, but the attack primitive is trivially constructible using any standard CMS/PKCS#7 library.

RemediationAI

Upgrade to Bouncy Castle for Java 1.85 or later, Bouncy Castle LTS 2.73.12 or later, or bcpkix-fips 1.0.12 / 2.0.12 / 2.1.12 or later (matching the release series in use). The vendor advisory is at https://github.com/bcgit/bc-java/wiki/CVE-2026-59639 and the patch commit is at https://github.com/bcgit/bc-java/commit/99ddc6dcc6782e6a76b0dd587c77e62eb7096ad0. If immediate upgrade is not feasible, add an explicit pre-check: inspect that the SignerInfos collection returned by getSignerInfos() is non-empty before calling verifySignatures(), and treat an empty set as a hard verification failure. Applications that legitimately process certificate-only (degenerate) SignedData should migrate to getCertificates() rather than verifySignatures() for that code path. Note that the patched behavior change - throwing CMSException instead of returning true - will break any code that silently accepted zero-signer structures for certificate transport, so test affected flows before deploying the upgrade. The patch is confirmed as upstream fix available via commit; a tagged release version should be verified against the vendor advisory before deployment.

Affected VersionsENISA

BC-FJA 2.0.0 <2.0.12
BC-FJA 1.0.0 <1.0.12
BC-JAVA 0 <1.85
BC-LTS-JAVA 2.73.0 <2.73.12
BC-FJA 2.1.0 <2.1.12

Affected Packages

euvd bc_fja fix: 1.0.12, 2.0.12, 2.1.12
euvd bc_java fix: 1.85
euvd bc_lts_java fix: 2.73.12

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

Cryptographic Message Syntax (RFC 5652) defines SignedData structures where the signerInfos SET contains one or more SignerInfo entries, each representing a verifiable signature. RFC 5652 also permits a degenerate SignedData with an empty signerInfos SET, intended solely for certificate transport - not content authentication. Bouncy Castle's CMSSignedData.verifySignatures() iterates over the signerInfos collection; when the collection is empty, no iteration occurs and the method falls through to return true, treating the absence of any signature as successful verification. This is a textbook instance of CWE-347 (Improper Verification of Cryptographic Signature). Affected libraries identified via CPE are: Legion of the Bouncy Castle bc-java (cpe:2.3:a:legion_of_the_bouncy_castle_inc.:bc-java:*), bc-lts-java (LTS variant, cpe:2.3:a:legion_of_the_bouncy_castle_inc.:bc-lts-java:*), and bc-fja (FIPS-certified pkix variant, cpe:2.3:a:legion_of_the_bouncy_castle_inc.:bc-fja:*). The fix, confirmed in commit 99ddc6d, changes the behavior to throw CMSException('no signers present in SignedData') when the signer set is empty; counter-signature verification is explicitly unaffected.

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 7.5 HIGH

Network-reachable API, no privileges or user interaction required; integrity-only impact as attacker bypasses signature verification with no confidentiality or availability consequence.

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

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.85, CMS verifySignatures returns true for SignedData with zero signers. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.12 (1.0.X series), 2.0.12 (2.0.X series) and 2.1.12 (2.1.X series).

Executive ViewAI

Why It Matters

Bouncy Castle for Java contains a cryptographic signature verification bypass (CVE-2026-59639, CVSS 8.7) that causes CMSSignedData.verifySignatures() to return true when processing zero-signer envelopes, silently accepting unsigned attacker-controlled content as authenticated. Organizations relying on this library for signature validation face immediate risk of unauthorized content acceptance, integrity compromise, and potential regulatory violations. Patch availability mitigates this risk, but rapid deployment is critical to restore cryptographic trust.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
High
widely used Java cryptography library across enterprise JVM ecosystems
Data Quality
8 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

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.2%
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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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 High Performance Computing 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

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