Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify Java app on OpenJ9 ≤0.60 with dynamic class loading
-
DeliveryLoad initial concrete superclass to trigger JIT vtable caching
-
ExploitReplace superclass method with abstract version via hot deployment or instrumentation
-
InstallInvoke invokeinterface on affected subclass instance
-
C2JIT fast-path skips abstract method check
-
ExecuteUnintended interface default method executes silently
-
ImpactIntegrity violation or secondary data disclosure
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Reliance on undefined/unspecified behavior
|
| Exploitation Conditions | Exploitation requires Eclipse OpenJ9 version 0.60 or earlier as the executing JVM - other JVM implementations (HotSpot, GraalVM) are not affected. The specific triggering condition is: a class hierarchy must undergo a concrete-to-abstract superclass method transition after the JIT compiler has already cached a vtable entry for that method, which occurs in environments supporting dynamic class reloading, OSGi hot deployment, or Java instrumentation agents that redefine classes at runtime. The CVSS 4.0 vector confirms PR:L (low privileges required), UI:A (active user interaction needed to trigger the invokeinterface dispatch), and AT:P (specific attack prerequisites - the class evolution condition - must be present). Standard Java applications with static, non-reloaded class hierarchies are not vulnerable. The limiting factors are: attacker must have the ability to influence class hierarchy evolution in the target JVM process; the vulnerable code path is in JIT-compiled hot paths and may not activate in interpreted-only or cold-start scenarios; and the bug only manifests on the specific invokeinterface bytecode for methods resolved through vtable slots that have become abstract. |
| Impact | The CVSS 4.0 score of 6.9 (Medium) reflects the combination of high attack complexity (AC:H), specific attack prerequisites (AT:P) - meaning a non-default class-evolution scenario must be in place - required active user interaction (UI:A), and low-privileged access (PR:L). Integrity impact is rated High for both the vulnerable system (VI:H) and subsequent system (SI:H), reflecting that unintended code executes silently where an exception should terminate the operation; confidentiality of the vulnerable system is rated None (VC:N) though the 'Information Disclosure' tag suggests subtle secondary leakage through wrong method execution. No EPSS data was provided, limiting probabilistic scoring. The absence of a CISA KEV listing and any mention of a public exploit means exploitation status is unconfirmed. Real-world risk is substantially lower than the integrity impact scores suggest: triggering the bug requires both an OpenJ9 JVM at or below 0.60 and a class hierarchy that undergoes a concrete-to-abstract method transition after JIT compilation, a scenario requiring attacker influence over class loading or hot deployment mechanisms. This is not a trivial precondition. The JIT vs. interpreter behavioral discrepancy also means the bug is non-deterministic across execution paths, complicating reliable exploitation. |
| Exploit ScenarioDerived | An attacker with low-level access to a Java application's deployment pipeline - such as the ability to publish an OSGi bundle or inject a class via a custom ClassLoader - loads a class hierarchy where a superclass method is initially concrete (triggering JIT compilation and vtable caching) and subsequently replaces it with an abstract version. When the application's hot path next invokes invokeinterface on a subclass instance, OpenJ9's JIT fast-path bypasses the abstract method guard and silently dispatches to an interface default method chosen by the attacker, causing incorrect program behavior or data leakage without throwing the expected AbstractMethodError. No public exploit code has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 21, 2026
Incorrect interface method dispatch in Eclipse OpenJ9 up to version 0.60 causes the JVM to silently execute an unintended interface default method instead of raising AbstractMethodError or IllegalAccessError when a previously JIT-compiled concrete superclass method is subsequently recompiled as abstract. Applications running on OpenJ9 with dynamic class-loading or OSGi-style hot deployment are at risk of integrity violations - untended code paths execute where exceptions should be thrown. No confirmed active exploitation exists and this CVE does not appear in CISA KEV; EPSS data was not provided, and the high attack complexity (AC:H) and specific attack prerequisites (AT:P) significantly limit real-world exploitability.
RemediationAI
Upgrade Eclipse OpenJ9 to a release that incorporates the fix from pull request https://github.com/eclipse-openj9/openj9/pull/24396. Monitor the Eclipse OpenJ9 security advisory at https://github.com/eclipse-openj9/openj9/security/advisories/GHSA-hcfc-9hjx-2q7f for a confirmed patched release version tag, as the exact fixed version is not independently confirmed from available data. As a compensating control where immediate upgrade is not feasible, disable JIT compilation entirely by launching the JVM with -Xint (interpreted-only mode), which avoids the vulnerable JIT fast-path dispatch; note this carries a severe performance penalty and is not suitable for production throughput-sensitive workloads. Additionally, restrict or disable dynamic class-loading mechanisms - such as OSGi hot deployment, custom ClassLoader hierarchies, or Java agents that instrument class hierarchies - to eliminate the concrete-to-abstract method evolution that triggers the bug. Restricting untrusted code from influencing class loading is the most targeted compensating control with the least performance trade-off.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Eclipse OpenJ9 (CPE: cpe:2.3:a:eclipse_foundation:openj9:*:*:*:*:*:*:*:*) is an alternative JVM implementation originally developed by IBM and contributed to the Eclipse Foundation. The vulnerability resides in the JIT-compiled interface method lookup code in runtime/codert_vm/cnathelp.cpp and the JIT compiler environment in runtime/compiler/env/VMJ9.cpp. The root cause is CWE-758 (Reliance on Undefined, Unspecified, or Implementation-Defined Behavior): the JIT fast-paths for invokeinterface bytecode dispatch did not replicate the interpreter's abstract-method guard. When a vtable slot was populated during JIT compilation pointing to a concrete method, and that method later became abstract through class hierarchy evolution, the JIT path bypassed the check for J9AccAbstract in the method's ROM modifiers. Instead of throwing the correct JVM exception, it fell through to dispatch via an interface default method. The fix introduces shouldThrowIllegalAccessForAbstractInvokeInterface - a new internal VM function that checks J9AccAbstract and J9AccPublic on the ROM method before allowing dispatch - and applies it consistently across the old_slow, old_fast, and fast JIT interface lookup helpers, mirroring the existing interpreter logic in BytecodeInterpreter.hpp and VM_MHInterpreter::dispatchLoop.
Know when Openj9 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:H/AT:P/PR:L/UI:A/VC:N/VI:H/VA:L/SC:L/SI:H/SA:N
Network-delivered class files trigger the flaw with low privileges; specific class-evolution prerequisites and user-initiated dispatch raise AC:H and UI:R; silent execution of unintended code across a scope boundary justifies S:C with I:H and minor C:L.
AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:L
Primary rating from Vendor (eclipse).
CVSS VectorVendor: eclipse
Lifecycle Timeline
1DescriptionCVE.org
In Eclipse OpenJ9 versions up to 0.60, when executing class files where a previously concrete superclass method has been recompiled as abstract, execution is incorrectly delegated to an interface default method.
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.
In Eclipse Openj9 to version 0.25.0, usage of the jdk.internal.reflect.ConstantPool API causes the JVM in some cases to
In Eclipse Openj9 before version 0.29.0, the JVM does not throw IllegalAccessError for MethodHandles that invoke inacces
In Eclipse OpenJ9 prior to 0.15, the String.getBytes(int, int, byte[], int) method does not verify that the provided byt
In Eclipse Openj9 before version 0.38.0, in the implementation of the shared cache (which is enabled by default in OpenJ
From Eclipse OpenJ9 0.15 to 0.16, access to diagnostic operations such as causing a GC or creating a diagnostic file are
AIX builds of Eclipse OpenJ9 before 0.15.0 contain unused RPATHs which may facilitate code injection and privilege eleva
In Eclipse OpenJ9 version 0.8, users other than the process owner may be able to use Java Attach API to connect to an Ec
In Eclipse OpenJ9 prior to the 0.14.0 release, the Java bytecode verifier incorrectly allows a method to execute past th
All builds of Eclipse OpenJ9 prior to 0.15 contain a bug where the loop versioner may fail to privatize a value that is
In Eclipse OpenJ9 release versions prior to 0.44.0 and after 0.13.0, when running with JVM option -Xgc:concurrentScaveng
In Eclipse OpenJ9 versions up to 0.51, when used with OpenJDK version 8 a stack based buffer overflow can be caused by m
Out-of-bounds read in Eclipse OMR 0.7.0 and later can occur when the compiler optimization for Latin-compatible charset
Same technique Information Disclosure
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-46359
GHSA-cp45-6q6c-3772
NVD
CVE.org
EPSS
VulDB
Exploit-DB