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: n/a
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

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

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: bcorg

Published:

Updated: 2026-10-03T08:56:01.050Z

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

Link: CVE-2026-71891

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

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

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

Link: CVE-2026-71891

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-03T10:30:19Z

Weaknesses
  • CWE-347

    Improper Verification of Cryptographic Signature