Description
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.
Published: 2026-10-03
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: Forged signature acceptance
Action: Upgrade Now
AI Analysis

Impact

A flaw in Bouncy Castle’s Java library allows the keyValidate routine to accept a public key constructed from an elliptic curve that shares the field characteristic of BLS12‑381 but has a different curve equation and a forged cofactor of one. Because ECPoint.satisfiesOrder returns true for such points, they pass the subgroup check even though they are not elements of the intended G1 subgroup. In the pairing implementation this causes the point to contribute the identity element in the target group, so an aggregate signature that includes this key is erroneously considered valid. Consequently, an attacker can introduce a phantom signer and have signatures for messages validated without actually signing them, undermining authenticity and non‑repudiation.

Affected Systems

The bug affects the Bouncy Castle BLS12‑381 implementation for Java (BC‑JAVA) in versions prior to 1.86. It impacts the keyValidate routine used by BLSPublicKeyParameters, BasicScheme, MessageAugmentation, and ProofOfPossession verify functions, which are part of the standard library. Applications that load or construct public keys directly using ECPoint on a non‑canonical curve could be impacted, while normal compressed‑point decoding is not affected.

Risk and Exploitability

This vulnerability has a CVSS score of 7.1, indicating moderate to high severity. EPSS is not available, and it is not listed in CISA KEV. Exploitation requires an application to explicitly create an ECPoint on a non‑canonical curve and treat it as a valid public key; standard key loading functions do not trigger the issue. While the attack surface is limited to code that accepts custom curve points, it remains serious for cryptographic libraries that rely on untrusted key material, making a patch or strict validation highly recommended.

Generated by OpenCVE AI on October 3, 2026 at 10:21 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Bouncy Castle BC‑JAVA to version 1.86 or later when keyValidate now checks the full curve equation, field, order, and cofactor.
  • Modify key‑handling code to enforce that any imported public key matches the canonical BLS12‑381 G1 curve parameters, rejecting points on curves with a forged cofactor or mismatched equations.
  • Add explicit verification that the public key point satisfies the correct group equation and order before using it in pairing or signature verification, and audit existing code for places that construct ECPoints on custom curves.

Generated by OpenCVE AI on October 3, 2026 at 10:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 05 Oct 2026 17:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Sun, 04 Oct 2026 20:45:00 +0000

Type Values Removed Values Added
First Time appeared Legion Of The Bouncy Castle Inc.
Legion Of The Bouncy Castle Inc. bc-java
Vendors & Products Legion Of The Bouncy Castle Inc.
Legion Of The Bouncy Castle Inc. bc-java

Sat, 03 Oct 2026 09:15:00 +0000

Type Values Removed Values Added
Description 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.
Title BLS12-381 key validation accepts a public key built on a foreign curve
Weaknesses CWE-347
References
Metrics cvssV4_0

{'score': 7.1, 'vector': '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'}


Subscriptions

Legion Of The Bouncy Castle Inc. Bc-java
cve-icon MITRE

Status: PUBLISHED

Assigner: bcorg

Published:

Updated: 2026-10-05T15:59:26.486Z

Reserved: 2026-08-08T00:06:07.401Z

Link: CVE-2026-71891

cve-icon Vulnrichment

Updated: 2026-10-05T15:59:21.267Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-03T09:17:05.763

Modified: 2026-10-06T14:49:40.823

Link: CVE-2026-71891

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-04T20:30:18Z

Weaknesses
  • CWE-347

    Improper Verification of Cryptographic Signature