CVE-2026-16440 Overview
CVE-2026-16440 affects Eclipse OpenJ9 versions up to and including 0.60. A crafted .class file containing deeply nested annotations triggers uncontrolled recursion in the class file parser, causing a segmentation fault in the Java Virtual Machine (JVM). The flaw is classified as CWE-674: Uncontrolled Recursion. Exploitation results in a denial-of-service condition on the OpenJ9 runtime process. Applications that load untrusted class files, including build servers, plugin loaders, and multi-tenant Java runtimes, are exposed to abrupt termination.
Critical Impact
A single malformed .class file can crash the OpenJ9 JVM process, disrupting availability of any Java service loading untrusted bytecode.
Affected Products
- Eclipse OpenJ9 versions up to and including 0.60
- Java runtimes built on OpenJ9, including IBM Semeru Runtimes distributions
- Applications and services that parse or load untrusted Java .class files with OpenJ9
Discovery Timeline
- 2026-08-19 - CVE-2026-16440 published to the National Vulnerability Database (NVD)
- 2026-08-19 - Last updated in NVD database
Technical Details for CVE-2026-16440
Vulnerability Analysis
The vulnerability resides in the OpenJ9 class file parser that processes Java annotation attributes. Java annotations can nest, since an annotation element value may itself be another annotation. OpenJ9 walks this structure recursively without enforcing a nesting depth limit. A crafted .class file containing thousands of nested annotation element values exhausts the native stack, triggering a segmentation fault (SIGSEGV) in the JVM process. Because the crash occurs in native code during class loading, the JVM cannot recover through a StackOverflowError. The result is immediate process termination and loss of availability for the hosted application. See the GitHub Security Advisory GHSA-ch6r-v7rg-4jqx for maintainer analysis.
Root Cause
The root cause is uncontrolled recursion [CWE-674] during parsing of nested annotation element values. The parser recurses on each nested annotation without bounding the depth of the call chain. Attacker-controlled class metadata therefore controls native stack consumption directly.
Attack Vector
An attacker supplies a malicious .class file to an OpenJ9 JVM that loads it. Delivery paths include uploaded plugins, build artifacts processed by CI systems, class files served over the network to a running JVM, and libraries pulled from untrusted repositories. Successful parsing of the malformed annotations crashes the process. No memory disclosure or code execution has been reported.
No public proof-of-concept exploit is available. See the upstream pull request 24572 for the maintainer fix that adds bounds on annotation nesting depth.
Detection Methods for CVE-2026-16440
Indicators of Compromise
- Unexpected SIGSEGV crashes of java processes running on OpenJ9, accompanied by javacore or core dump files referencing the class file parser.
- Application logs showing repeated JVM restarts immediately after loading a specific class or JAR from an untrusted source.
- Presence of .class files with abnormally large annotation attribute sections or unusually deep RuntimeVisibleAnnotations structures.
Detection Strategies
- Inventory OpenJ9 installations by querying java -version output for the OpenJ9 build string and flag versions at or below 0.60.
- Scan artifact repositories and build outputs for .class files with annotation attribute sizes disproportionate to the class size.
- Correlate JVM crash telemetry with recent class loading events to identify malicious inputs.
Monitoring Recommendations
- Forward JVM crash dumps and javacore files to a central log store for review.
- Alert on repeated segmentation faults from the same Java service within short time windows.
- Track integrity of deployed JARs and class files against known-good baselines.
How to Mitigate CVE-2026-16440
Immediate Actions Required
- Identify all OpenJ9-based JVMs in the environment, including IBM Semeru Runtimes, and prioritize systems that load third-party or user-supplied bytecode.
- Upgrade Eclipse OpenJ9 to a release beyond 0.60 that includes the fix from pull request 24572.
- Restrict class loading to trusted sources and validate JARs before deployment.
Patch Information
The fix is delivered in the OpenJ9 upstream pull request eclipse-openj9/openj9#24572, which enforces a bound on annotation nesting during class file parsing. Consult the GitHub Security Advisory GHSA-ch6r-v7rg-4jqx for the list of fixed builds and rebuild any runtimes derived from OpenJ9 source.
Workarounds
- Block ingestion of .class files and JARs from untrusted sources until patched builds are deployed.
- Run OpenJ9 workloads under a process supervisor that restarts the JVM after a crash to preserve service availability.
- Isolate JVMs that must load untrusted bytecode using container or sandbox boundaries to limit blast radius.
# Verify OpenJ9 version on a target host
java -version 2>&1 | grep -i openj9
# Example: reject class files whose annotation attribute exceeds a size threshold
find ./artifacts -name '*.class' -size +256k -print
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

