Skip to main content

Bouncy Castle Java EUVDEUVD-2026-92005

| CVE-2026-71891 HIGH
Improper Verification of Cryptographic Signature (CWE-347)
2026-10-03 bcorg GHSA-gggh-4cvh-v637
7.1
CVSS 4.0 · Vendor: bcorg
View

Attack ChainAIDerived

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

  1. Access
    Craft public key on foreign curve sharing field
  2. Delivery
    Submit as aggregate verification signer
  3. Exploit
    Pass keyValidate subgroup check via forged cofactor
  4. Execution
    Point contributes identity in pairing
  5. Impact
    Aggregate signature accepted with phantom signer

Vulnerability Assessment

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

Exploitation requires the target application to construct an ECPoint on an explicit, non-canonical ECCurve (e.g. via ECCurve.Fp#createPoint) that shares BLS12-381's field characteristic, and to accept that caller-supplied point as an authority-bearing public key passed to BLS12_381BasicScheme.keyValidate / BLSPublicKeyParameters (and any BasicScheme, MessageAugmentation, or ProofOfPossession verify/aggregateVerify built on it). The attacker forges the foreign curve's cofactor to 1 so ECPoint.satisfiesOrder returns true without a real subgroup check. The decisive LIMITING factor: the standard 48-byte compressed-point decoder always supplies the canonical G1 curve and is NOT vulnerable, so applications that only decode compressed points are unaffected; only non-default explicit-curve key handling is reachable. Affected versions are Bouncy Castle for Java before 1.86.

Impact

This is a genuine cryptographic authentication-bypass (CWE-347) but a conditional one, not a mass-exploitation event. The vendor CVSS 4.0 vector (AV:N/AC:L/PR:N/UI:P, VI:H only) scores 7.1 and correctly reflects that the only impact is integrity - a forged/phantom signer accepted in an aggregate BLS12-381 signature - with no confidentiality (VC:N) or availability (VA:N) impact. No EPSS score, no CISA KEV listing, and no public exploit were supplied in the input, so there is no signal of active or widespread exploitation; the only exploitation artifact is a demonstration unit test shipped inside the fix commit. The dominant risk-limiting signal is not in the CVSS metrics at all: the vendor explicitly states the flaw is reachable ONLY where an application constructs an ECPoint on an explicit, non-canonical curve and treats it as an authority-bearing key - the standard 48-byte compressed-point decoder always supplies the canonical curve and was never affected. That caveat makes the effective attack surface far narrower than AV:N/PR:N/AC:L alone suggests. Net: a real, patch-worthy correctness defect for the specific population of applications that parse caller-supplied explicit-curve public keys into BLS verification, but a low-urgency item for the typical deployment that only ever decodes canonical compressed points.

Exploit ScenarioDerived

An attacker crafts a 'public key' as an ECPoint on a foreign elliptic curve that merely shares BLS12-381's field characteristic, with the curve's cofactor forged to 1 so the prime-order subgroup check passes trivially. The attacker submits this point as one of the public keys in a set used for aggregate signature verification; because the forged point contributes the identity in the target group, the verifier accepts the aggregate as valid even though no signature for that key/message pair was ever produced, inserting a phantom signer. No public weaponized exploit was supplied, though the vendor fix commit includes a unit test demonstrating the rejection of exactly such a point.

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 – Oct 03, 2026

Signature-verification bypass in Bouncy Castle for Java before 1.86 lets a phantom signer be accepted in BLS12-381 aggregate signature verification. The faulty BLS12_381BasicScheme.keyValidate() trusts the public key's own ECCurve object during the prime-order subgroup check, so an attacker-supplied ECPoint built on a foreign curve that merely shares BLS12-381's field characteristic - with its cofactor forged to 1 - passes validation despite not being a G1 point; in the pairing implementation such a point contributes the identity in the target group, so an aggregate signature verifies even though it contains no signature for that key/message pair. The issue is reachable only where an application constructs an ECPoint on an explicit, non-canonical curve and accepts it as an authority-bearing key, since the standard 48-byte compressed-point decoder always supplies the canonical curve; no public exploit has been identified at time of analysis, and the assessed impact is high integrity compromise without confidentiality or availability loss (CVSS:4.0 base 7.1, network vector, no privileges required).

RemediationAI

Upgrade Bouncy Castle for Java to 1.86 or later (vendor-released patch; upstream commit c16bcfdce1f96230261b7c2c8c1e044bfc9d1deb), and rebuild/redeploy any application or container image that bundles the bcprov/bcpkix JARs so the patched core library is actually on the classpath - verify the loaded version at runtime, since a stale transitive dependency is the common failure mode. If immediate upgrade is not possible, the most effective compensating control is to stop accepting ECPoints constructed on explicit non-canonical curves from any untrusted source: route all BLS public-key ingestion exclusively through the standard 48-byte compressed-point decoder, which always supplies canonical G1 and is not reachable by this flaw. As a secondary control, port the new isCanonicalCurve logic into the calling application and reject any key whose ECCurve does not report field characteristic Q, a = 0, b = 4, the canonical order and cofactor 1 before calling keyValidate; the trade-off is that legitimate custom key-import paths using alternative curve encodings will start failing and must be migrated to canonical encoding. Downstream verifiers that cannot be patched quickly should treat aggregate signatures from untrusted key sets as untrusted and re-verify each signature individually against individually validated keys, accepting the added verification cost. Refer to the vendor advisory at https://github.com/bcgit/bc-java/wiki/CVE%E2%80%902026%E2%80%9071891 for the authoritative fix guidance and release notes.

Affected VersionsENISA

BC-JAVA 1.85 <1.86

Affected Packages

euvd bc_java fix: 1.86

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

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

Technical ContextAI · show details

BLS12-381 is a pairing-friendly elliptic curve whose G1 group has cofactor 1, so its subgroup membership check reduces to verifying the point satisfies the curve equation and has the right order. In Bouncy Castle's implementation, ECPoint.satisfiesOrder() short-circuits to true when the cofactor of the point's own curve is one, and the point names its own ECCurve object - caller-suppliable data via ECCurve.Fp#createPoint. An attacker can therefore construct a point on a different curve (for example y^2 = x^3 + x over BLS12-381's prime field Q, with order and cofactor forged to 1) whose curve object reports cofactor 1, so the subgroup check passes trivially even though the point is not on G1 at all. Because BLS12-381 pairings map such an off-curve point to the identity in the target group, verifies and aggregateVerifies in BasicScheme, MessageAugmentation and ProofOfPossession - all of which gate on keyValidate via BLSPublicKeyParameters - accept an aggregate signature that contains no contribution from the forged key, admitting a phantom signer. CWE-347 (Improper Verification of Cryptographic Signature) captures the root cause: the validator trusted attacker-controlled metadata (the curve descriptor) instead of validating the curve identity itself. The upstream fix introduces BLS12_381G1.isCanonicalCurve(), which checks that the field characteristic, a = 0, b = 4, group order and cofactor all exactly match canonical G1 before any subgroup test runs, and keyValidate returns false immediately for any non-canonical curve. Test BLS12_381BasicSchemeTest.testKeyValidateRejectsForeignCurveSharingField codifies the rejection of the foreign-curve point; the reporter credited is bshastry@posteo.de via feedback-crypto.

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 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/U:Amber
vuln.today AI 7.5 HIGH

A crafted public key is accepted over the network with no attacker authentication (PR:N), breaking signature-verification integrity only (I:H, C:N/A:N); no genuine victim interaction is required.

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 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
Passive
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, BLS12_381BasicScheme.keyValidate, and so BLSPublicKeyParameters and every BasicScheme, MessageAugmentation and ProofOfPossession verify and aggregateVerify that gate on it, accepted a public key built on a foreign ECCurve that merely shares BLS12-381's field characteristic. The prime-order subgroup check trusts a point's own curve to name its cofactor, since ECPoint.satisfiesOrder returns true outright when the curve's cofactor is one, so a point on a curve with a different equation and a cofactor forged to one passed keyValidate despite not being a G1 point at all. In BC's pairing implementation such a point contributes the identity in the target group, so an aggregate signature verified against a set of public keys including it is accepted even though it contains no signature for that key and message pair, admitting a phantom signer. keyValidate now first confirms that the point's curve carries exactly the canonical G1 field, equation, order and cofactor before any subgroup check. The issue is reachable only where an application constructs an ECPoint on an explicit, non-canonical curve and accepts it as an authority-bearing key; the standard 48-byte compressed-point decoder always supplies the canonical curve and was never affected.

Executive ViewAI

Why It Matters

Bouncy Castle for Java before version 1.86 can accept forged BLS12-381 aggregate signatures under narrow application conditions, undermining trust in digitally signed data processed by affected Java services. Leadership should care because any internal or customer-facing system that relies on this library for BLS12-381 signature verification may be exposed to unauthorized transactions, configuration changes, or trust decisions if the vulnerable code path is reachable in production.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
High
Bouncy Castle is a very widely deployed Java cryptography library
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.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
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
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