GHSA-h84g-69h7-mw6v: High severity maven/com.mchange:mchange-commons-java vulnerability
Impact Prior to version 0.6.0, mchange-commons-java includes a JNDI ObjectFactory implementation (com.mchange.v2.naming.JavaBeanObjectFactory) willing to construct objects of arbitrary classes and initialize "JavaBean"-style properties. There are classes for which this kind of initialization is unsafe. For example, setting the "contentType" property of a Swing JEditorPane to text/html and the "text" property to HTML containing a stylesheet <link> will provoke an HTTP GET on an arbitrary URL, potentially from within a trusted security domain. This issue is aggravated by mchange-commons-java's ReferenceIndirector, by which malicious JNDI Reference objects could be smuggled in for dereferencing by applications anywhere a Java-serialized object might be read.
Prior to version 0.5.0, the same mchange-commons-java ObjectFactory would interpret BinaryRefAddress elements as Java-serialized objects, and deserialize unexpected objects that potentially execute malicious behavior on initialization. Although this author is unaware of any code within mchange-commons-java itself that can be abused to execute code on deserialization, this mechanism can be used to trigger well-known "deserialization gadget chains" involving other libraries. For example, in JVMs prior to Java 16 with Apache libraries commons-beanutils and commons-collections on the application CLASSPATH, objects can be crafted that will execute arbitrary commands on deserialization. (Thanks to Valerio Mulas for a proof-of-concept.)
Patches mchange-commons-java v0.5.0 eliminates all support for deserializing Java objects in com.mchange.v2.naming.JavaBeanObjectFactory, unless an application explicitly extends that class to restore it. This prevents mchange-commons-java from enabling JNDI injection to trigger common "deserialization gadgets".
mchange-commons-java v0.6.0 imposes a whitelist upon what classes com.mchange.v2.naming.JavaBeanObjectFactory consents to materialize, preventing the use of maliciously constructed Reference instances to initialize arbitrary, potentially malicious, objects.
mchange-commons-java v0.6.0 disables the ReferenceIndirector mechanism by default. This mechanism has been abused by attackers to inject dangerous JNDI Reference objects by causing an application to deserialize a malicious Java-serialized object. (The functionality remains for applications that need it, gated behind a restrictive configuration parameter. This is "defense-in-depth"; the hardening of JavaBeanObjectFactory on its own should be sufficient to prevent known Reference-based attacks. But perhaps there are other insecure ObjectFactory implementations on the CLASSPATH or vulnerabilities as-yet-unknown.)
Workarounds Upgrading to the current version of mchange-commons-java is strongly recommended. Most applications that install mchange-commons-java do so to support the c3p0 JDBC Connection pooling library. When upgrading mchange-commons-java, be sure to update c3p0 as well, or better yet, upgrade to c3p0 >=v0.14.0 and bring in a patched mchange-commons-java transitively.
Maintaining rigorous serialization filters can prevent many attacks (but not attacks requiring only construction of a named class and initialization of simple JavaBeans properties, as described for JEditorPane above).
The vulnerabilities that this advisory addresses all begin with arranging for an application to lookup a malicious JNDI Reference or deserialize a malicious Java-serialized object. Assiduously preventing an application from ever encountering such a Reference or serialized object is hypothetically a workaround. But relying upon perfection is usually bad planning.
The most common known attacks rely upon JVM-internal XSLT code that has been made inaccessible on Java 16 and beyond. Running on a more recent JVM is a mitigating workaround.
Resources The vulnerabilities and security upgrades are documented in c3p0's manual. Please see c3p0's Security Note and Configuring Security.
Credits mchange-commons-java thanks 4ra1n and unam4 on Github for a proof-of-concept.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
maven/com.mchange:mchange-commons-javato a version that resolves this vulnerability.Fixed in 0.6.0 - Upgrade
Upgrade
mchange-commons-javato a version that resolves this vulnerability.Fixed in 0.6.0 - Upgrade
Upgrade
c3p0to a version that resolves this vulnerability.Fixed in 0.14.0 - Configuration
Upgrade to mchange-commons-java v0.6.0 so the ReferenceIndirector mechanism is disabled by default.
mchange-commons-java (com.mchange.v2.naming.JavaBeanObjectFactory) ReferenceIndirector = disabled (default in v0.6.0) - Configuration
Upgrade to mchange-commons-java v0.6.0 to impose a whitelist on what classes JavaBeanObjectFactory can materialize, preventing malicious Reference-based object initialization.
mchange-commons-java (com.mchange.v2.naming.JavaBeanObjectFactory) whitelist of materializable classes = enforced (prevents initialization of arbitrary classes) in v0.6.0 - Configuration
Upgrade to mchange-commons-java v0.5.0 or later so JavaBeanObjectFactory eliminates support for deserializing Java objects (unless an application explicitly extends the class to restore it).
mchange-commons-java (com.mchange.v2.naming.JavaBeanObjectFactory) support for deserializing Java objects in JavaBeanObjectFactory = removed in v0.5.0
Event History
Frequently Asked Questions
What is the severity of GHSA-h84g-69h7-mw6v?
The severity of GHSA-h84g-69h7-mw6v is rated as high with a score of 7.1.
How do I fix GHSA-h84g-69h7-mw6v?
To fix GHSA-h84g-69h7-mw6v, upgrade to mchange-commons-java version 0.6.0 or later.
What are the potential impacts of GHSA-h84g-69h7-mw6v?
The potential impacts of GHSA-h84g-69h7-mw6v include unauthorized object instantiation and arbitrary property initialization.
Which software is affected by GHSA-h84g-69h7-mw6v?
The software affected by GHSA-h84g-69h7-mw6v is mchange-commons-java prior to version 0.6.0.
When was GHSA-h84g-69h7-mw6v published?
GHSA-h84g-69h7-mw6v was published on August 14, 2026.