Description
In Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series), sensitive key material held by the AES and DESede engines, the SP 800-90A DRBGs, SymmetricSecretKey and the PBKD and scrypt parameter classes was zeroised on garbage collection by overriding Object.finalize. Finalization runs at an unspecified time and in an unspecified order and is serviced by a single finalizer thread, so where objects carrying a finalizer are allocated faster than that thread retires them the pending-finalization queue grows without bound: disposal falls arbitrarily far behind, which can contribute to an OutOfMemoryError under load, and the key material those objects hold stays resident in the heap for as long as they are queued, defeating the purpose of the zeroisation. The behaviour was not a problem on Java 8 or Java 11; it is later JVMs, on which finalization has been deprecated and progressively de-emphasised, where it becomes one. Disposal of these classes now runs from a java.lang.ref.Cleaner registered in the multi-release jdk1.9 overlay, so on Java 9 and later it no longer depends on the finalizer being scheduled. Bouncy Castle for Java (bcprov) and Bouncy Castle for Java LTS are not affected, as neither implements the finalizer-based zeroisation scheme.
Published: 2026-08-08
Score: 8.7 High
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

This vulnerability causes sensitive key material stored in AES and DESede engines, DRBGs, SymmetricSecretKey, and certain parameter classes to remain in the Java heap longer than intended when objects are collected by finalization. The key data is only wiped when the finalizer runs, but the finalizer runs on a single thread at an unspecified time. Under heavy load the finalization queue can grow without bound, leading to delayed zeroisation and a higher chance of an OutOfMemoryError. The result is that secret material can persist in memory for an arbitrary period, reducing its confidentiality protection.

Affected Systems

Legion of the Bouncy Castle Inc. provides the Bouncy Castle FIPS for Java (BC-FJA) library. Versions before bc-fips 1.0.2.7 (for the 1.0.X series), before 2.0.2 (2.0.X series) and before 2.1.3 (2.1.X series) are affected. The standard Bouncy Castle provider (bcprov) and the LTS releases are not impacted.

Risk and Exploitability

The CVSS score of 8.7 indicates a high severity flaw. EPSS data is not available, and the vulnerability is not listed in CISA KEV, suggesting no known widespread exploitation yet. However, the flaw can be triggered by any code that creates a large number of key‑related objects under load, making it potentially exploitable in high‑traffic or embedded Java environments. The likely attack vector is the normal use of the affected library under high load, as the finalizer queue grows when many key objects are created, delaying zeroisation and potentially exhausting memory. The risk is highest in environments where sensitive keys are frequently generated and the Java runtime contends with limited heap space.

Generated by OpenCVE AI on August 8, 2026 at 03:50 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade your Bouncy Castle FIPS Java library to the latest release (bc-fips 1.0.2.7 or later for the 1.0.X series, 2.0.2 or later for the 2.0.X series, or 2.1.3 or later for the 2.1.X series) which removes the finalizer‑based zeroisation bug.
  • Ensure the application runs on Java 9 or newer, as the Cleaner mechanism is used in these versions and finalization no longer depends on the single finalizer thread.
  • If upgrading the library or Java runtime is temporarily infeasible, modify the application to explicitly zeroise key material after use (e.g., overwrite byte arrays) and monitor heap usage to detect potential backlog or out‑of‑memory conditions.

Generated by OpenCVE AI on August 8, 2026 at 03:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 08 Aug 2026 01:30:00 +0000

Type Values Removed Values Added
Description In Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series), sensitive key material held by the AES and DESede engines, the SP 800-90A DRBGs, SymmetricSecretKey and the PBKD and scrypt parameter classes was zeroised on garbage collection by overriding Object.finalize. Finalization runs at an unspecified time and in an unspecified order and is serviced by a single finalizer thread, so where objects carrying a finalizer are allocated faster than that thread retires them the pending-finalization queue grows without bound: disposal falls arbitrarily far behind, which can contribute to an OutOfMemoryError under load, and the key material those objects hold stays resident in the heap for as long as they are queued, defeating the purpose of the zeroisation. The behaviour was not a problem on Java 8 or Java 11; it is later JVMs, on which finalization has been deprecated and progressively de-emphasised, where it becomes one. Disposal of these classes now runs from a java.lang.ref.Cleaner registered in the multi-release jdk1.9 overlay, so on Java 9 and later it no longer depends on the finalizer being scheduled. Bouncy Castle for Java (bcprov) and Bouncy Castle for Java LTS are not affected, as neither implements the finalizer-based zeroisation scheme.
Title Zeroisation of sensitive key material on garbage collection relies on finalization
Weaknesses CWE-772
References
Metrics cvssV4_0

{'score': 8.7, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/U:Amber'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: bcorg

Published:

Updated: 2026-08-08T00:59:40.512Z

Reserved: 2026-06-28T01:23:14.833Z

Link: CVE-2026-13505

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-08T04:00:04Z

Weaknesses
  • CWE-772

    Missing Release of Resource after Effective Lifetime