Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessTarget network-facing app using BC-FJA on Java 12+ JVM
-
DeliverySend sustained high-volume cryptographic requests
-
ExploitAllocate key objects faster than finalizer thread retires them
-
ExecutionPending-finalization queue grows without bound
-
PersistJVM raises OutOfMemoryError
-
ImpactApplication process crashes
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup on lifecycle end
|
| Exploitation Conditions | The vulnerability is triggered when: (1) the application uses BC-FJA specifically - not bcprov or BC-LTS; (2) the JVM version is Java 9 or later, with the OutOfMemoryError path most reliably manifesting on Java 12+ where finalization has been de-emphasized and on Java 18+ where it is deprecated for removal; and (3) the rate of BC-FJA cryptographic object allocation exceeds what the single finalizer thread can retire - typically requiring sustained or high-throughput load. For the availability (OOM) impact the limiting factor is load level: low-traffic deployments are unlikely to exhaust the finalizer queue, so the practical DoS risk scales with request volume. For the key-material-lingering concern no load threshold is required - any unfixed deployment on Java 9+ fails to guarantee prompt zeroisation. No special feature flags or non-default configurations are needed; the flaw is intrinsic to how the affected class hierarchy implements zeroisation. |
| Impact | The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H, score 8.7, Amber urgency) captures the primary availability threat but rates confidentiality impact as none (VC:N), which conflicts with the reporter-assigned 'Information Disclosure' tag and the CVE description's explicit concern that key material 'stays resident in the heap for as long as they are queued, defeating the purpose of the zeroisation.' This discrepancy is worth flagging: the VC:N scoring reflects that no attacker directly reads the key data through this vulnerability alone; a second-step heap access (heap dump, memory forensics, or a separate arbitrary-read primitive) would be needed. The availability risk is more straightforwardly exploitable - an attacker who can drive sustained cryptographic workload through a network-facing BC-FJA application can cause OutOfMemoryError. No EPSS score was provided. There is no CISA KEV listing and no known public proof-of-concept. The real-world priority is highest for Java FIPS compliance deployments (finance, healthcare, government) running on Java 12+ JVMs under network-accessible load; organizations still on Java 8 or Java 11 are not affected by the OOM path, though the key zeroisation design flaw is present in all unfixed versions. The fix is available and well-defined, making this a straightforward patch-and-verify remediation rather than a complex mitigate-in-place situation. |
| Exploit ScenarioDerived | A threat actor targeting a financial services API that uses BC-FJA for FIPS-compliant TLS key operations on a Java 17 JVM sends a sustained high-volume stream of requests that each cause BC-FJA to instantiate and discard AES or DESede engine objects. The single JVM finalizer thread cannot retire the pending-finalization queue fast enough, causing heap exhaustion and an OutOfMemoryError that crashes the API process. Separately, if the attacker also possesses a heap-dump or memory-read primitive (e.g., through a concurrent deserialization vulnerability), the unzeroed key material resident in the queue can be extracted. No public proof-of-concept exists for this scenario. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 08, 2026
Cryptographic key material in Bouncy Castle for Java FIPS (BC-FJA) persists in the JVM heap far beyond its intended lifetime on Java 12 and later runtimes because the library's zeroisation scheme relies on Object.finalize(), a mechanism progressively de-emphasized since Java 9 and deprecated for removal in Java 18. Under load, the single finalizer thread cannot retire pending objects as fast as they are allocated, causing the queue to grow without bound - resulting in an OutOfMemoryError that crashes the application and defeating the cryptographic hygiene goal of prompt key zeroisation. No public exploit is identified at time of analysis; however, any network-accessible application built on BC-FJA prior to the fixed versions is exposed to both a remotely triggerable denial-of-service and prolonged in-memory residence of sensitive key material.
RemediationAI
Upgrade to one of the patched releases: bc-fips 1.0.2.7 (for the 1.0.X series), 2.0.2 (for the 2.0.X series), or 2.1.3 (for the 2.1.X series). The fix replaces the Object.finalize()-based zeroisation with a java.lang.ref.Cleaner-backed scheme in a multi-release jdk1.9 JAR overlay, ensuring prompt deterministic cleanup on Java 9 and later. Full vendor advisory is at https://github.com/bcgit/bc-java/wiki/CVE%E2%80%902026%E2%80%9013505. If an immediate upgrade is not possible, organizations running on Java 8 or Java 11 can confirm they are not exposed to the OutOfMemoryError degradation path, though the key-material-lingering concern still applies on those platforms in theory. As a short-term workaround on Java 9+ environments, tuning the JVM's GC aggressiveness (e.g., reducing GC pause targets or increasing heap headroom) may delay OOM onset but does not fix the root cause and does not address the key zeroisation failure - this trade-off must be clearly communicated to security auditors. The only complete remediation is patching.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in maven, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
BC-FJA (cpe:2.3:a:legion_of_the_bouncy_castle_inc.:bc-fja:*:*:*:*:*:*:*:*) is the FIPS 140-validated edition of the Bouncy Castle Java cryptographic library. The vulnerability is classified CWE-772 (Missing Release of Resource after Effective Lifetime). The affected classes - AES and DESede cipher engines, SP 800-90A DRBG implementations, SymmetricSecretKey, and PBKD and scrypt parameter classes - all override Object.finalize() to zero out key material when the garbage collector discards the object. The Java specification guarantees only that finalize() will be called before the object is reclaimed, not when: a single JVM-wide finalizer thread services all registered finalizers, and if the production rate of finalizable objects exceeds the retirement rate that thread can sustain, the pending-finalization queue grows unbounded. On Java 8 and Java 11 the finalizer thread was sufficiently aggressive that this did not manifest as a practical problem. Starting with Java 12, and accelerating through Java 18 (JEP 421 deprecated finalization for removal), the JVM's investment in timely finalization has been reduced, making the race condition exploitable at realistic load. The fix replaces finalize() with java.lang.ref.Cleaner (introduced in Java 9) via a multi-release JAR jdk1.9 overlay, giving the garbage collector a phantom-reference-based callback that does not depend on the finalizer thread. The non-FIPS editions of Bouncy Castle (bcprov and BC-LTS) never implemented this zeroisation scheme and are not affected.
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
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
AV:N and PR:N because load is triggerable via unauthenticated network requests; C:L added over official VC:N to reflect unzeroed key material lingering in heap beyond intended lifetime.
Primary rating from Vendor (bcorg).
CVSS VectorVendor: bcorg
Lifecycle Timeline
2DescriptionCVE.org
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.
Blast Radius
ecosystem impact- 16 maven packages depend on org.bouncycastle:bc-fips (6 direct, 10 indirect)
Ecosystem-wide dependent count for version 2.0.0.
Articles & Coverage 1
Executive ViewAI
Applications relying on Bouncy Castle for Java FIPS (BC-FJA) are at risk of both denial-of-service crashes and prolonged exposure of cryptographic keys in memory, threatening operational continuity and encryption key confidentiality. Any organization running network-accessible Java services built on BC-FJA on Java 12 or later must prioritize immediate mitigation and patching.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Enable aggressive JVM heap monitoring with automatic restart thresholds to prevent OutOfMemoryError crashes before they impact availability; (2) Deploy connection and request rate limiting to reduce object allocation velocity that accelerates finalizer queue overflow; (3) Isolate BC-FJA usage to dedicated JVM processes with strictly bounded heap sizes to contain impact; (4) Evaluate and prepare migration to alternative cryptographic libraries without finalization-based key zeroization (e.g., conscrypt, BoringSSL bindings); (5) Implement network segmentation to restrict BC-FJA application exposure to trusted internal infrastructure only.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Related Vulnerabilities in Bouncy Castle BC-FJA Cryptographic Engine Flaws
View all 2Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
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
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
EUVD-2026-54726
GHSA-98j2-6v39-78w8
NVD
CVE.org
EPSS
VulDB
Exploit-DB