PHP2Shell: Read our blog on the critical RCE vulnerabilities affecting 70% of the Internet
Vulnerability DatabaseCVE-2026-113730

CVE-2026-113730: 
Java vulnerability analysis and mitigation

Overview

CVE-2026-113730 is a security feature bypass vulnerability in OGNL (Object Graph Navigation Library) for Java, specifically a stricter-invocation block list bypass via java.lang.reflect reflection proxies. It affects OGNL versions up to and including 3.4.12 (Maven artifact ognl:ognl), and was first published by the maintainer on September 11, 2026, with NVD publication on October 20, 2026. The vulnerability carries a CVSS v3.1 base score of 5.6 (Moderate) (GitHub Advisory).

Technical details

The root cause is a Protection Mechanism Failure (CWE-693) in OgnlRuntime.invokeMethod: the optional stricter-invocation mode maintains a block list of dangerous classes (e.g., Runtime, ProcessBuilder, ClassLoader) but omitted java.lang.reflect.Method, java.lang.reflect.Constructor, and java.lang.reflect.Field. An attacker-controlled OGNL expression can obtain a Method object for a blocked class's method and call Method.invoke() on it; the actual operation then executes inside JDK reflection machinery without re-entering OGNL's invokeMethod, so the block list check is never applied to the real call. Exploitation requires three conditions: (1) the application evaluates untrusted OGNL expressions, (2) it uses the default or equivalently permissive MemberAccess that allows java.lang.reflect, and (3) it relies on stricter-invocation mode as its sandbox. A published proof-of-concept in the advisory demonstrates creating a file via ProcessBuilder.start() using this reflection proxy technique (GitHub Advisory, Patch Commit).

Impact

Successful exploitation allows an unauthenticated remote attacker to bypass the stricter-invocation sandbox and execute arbitrary methods on blocked classes, potentially achieving arbitrary OS command execution (as demonstrated by the ProcessBuilder PoC), unauthorized data access, or modification of application state. The impact is limited to low confidentiality, integrity, and availability effects per CVSS scoring, reflecting that this is a bypass of a secondary defense-in-depth layer rather than OGNL's primary security boundary. Applications using a restrictive MemberAccess (such as Apache Struts with SecurityMemberAccess) are not affected, significantly narrowing the scope of vulnerable deployments (GitHub Advisory).

Exploitability

A proof-of-concept OGNL expression is publicly documented in the official security advisory, demonstrating file creation via ProcessBuilder reflection proxy. As of the time of disclosure, there is no evidence of in-the-wild exploitation, no known threat actor attribution, and the vulnerability is not listed in the CISA KEV catalog. The EPSS score is approximately 0.358%, indicating a low probability of exploitation in the near term. NVD SSVC assessment classifies exploitation as "none" and the attack as non-automatable (GitHub Advisory, Feedly).

Exploitation steps

  1. Identify a vulnerable target: Locate a Java application that evaluates untrusted OGNL expressions, uses OGNL ≤ 3.4.12 with the default permissive MemberAccess, and relies on stricter-invocation mode as its sandbox (not SecurityMemberAccess or equivalent).
  2. Craft a reflection-proxy OGNL expression: Construct an expression that obtains a java.lang.reflect.Method object for a method on a blocked class (e.g., ProcessBuilder.start()), bypassing the block list check:
(#pb=new java.lang.ProcessBuilder({"/usr/bin/touch","rce-proof.txt"}),
 #methods=@java.lang.ProcessBuilder@class.getMethods(),
 #names=#methods.{ #this.getName() },
 #startIdx=#names.indexOf("start"),
 #methods[#startIdx].invoke(#pb, null))
  1. Submit the expression: Inject the crafted OGNL expression through any application input point that is evaluated server-side (e.g., HTTP parameter, template field, or API endpoint).
  2. Achieve sandbox bypass: The Method.invoke() call executes ProcessBuilder.start() inside JDK reflection without re-entering OGNL's invokeMethod, so the block list never intercepts the real operation, resulting in OS command execution or other blocked actions (GitHub Advisory).

Indicators of compromise

  • Logs: Application logs showing OGNL expression evaluation containing java.lang.reflect.Method, Constructor, or Field class references alongside blocked class names (e.g., ProcessBuilder, Runtime); unexpected IllegalAccessException stack traces from OgnlRuntime.invokeMethod in pre-patch versions.
  • File System: Unexpected files created by the application server process (e.g., rce-proof.txt or similar artifacts in writable directories), or new scripts/executables in application directories.
  • Process: Unusual child processes spawned by the Java application server process (e.g., /bin/sh, /usr/bin/touch, curl, wget) that are not part of normal application behavior.
  • Network: Outbound connections from the application server to unexpected external hosts, potentially indicating reverse shell or data exfiltration activity following exploitation.

Mitigation and workarounds

Upgrade OGNL to version 3.4.13 or later, which adds java.lang.reflect.Method, java.lang.reflect.Constructor, and java.lang.reflect.Field to the stricter-invocation block list (OGNL Release). As a workaround, configure a restrictive MemberAccess implementation (such as Apache Struts' SecurityMemberAccess) that blocks access to java.lang.reflect classes, which prevents the bypass at the primary access-control gate. Additionally, disable evaluation of untrusted OGNL expressions wherever possible to eliminate the attack surface entirely (GitHub Advisory).

Community reactions

The vulnerability was responsibly disclosed through Tidelift by researcher 毛锐 (youyi.mr@alibaba-inc.com) and published by OGNL maintainer lukaszlenart. The advisory explicitly frames this as a hardening of a defense-in-depth secondary layer rather than a primary security boundary break, and notes that properly configured consumers such as Apache Struts are unaffected — a nuance that has been highlighted in the advisory text to prevent unnecessary alarm (GitHub Advisory).

Additional resources


Source: This report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-111765HIGH7.5
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-http-client-android
NoYesOct 20, 2026
CVE-2026-102834HIGH7.5
  • Java logoJava
  • org.bytedeco:javacv
NoYesOct 16, 2026
CVE-2026-111763MEDIUM5.7
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-parent
NoYesOct 20, 2026
CVE-2026-111762MEDIUM5.7
  • Java logoJava
  • org.a2aproject.sdk:a2a-java-sdk-transport-rest
NoYesOct 20, 2026
CVE-2026-113730MEDIUM5.6
  • Java logoJava
  • ognl:ognl
NoYesOct 21, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management