
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-27830 is a remote code execution vulnerability in c3p0, a widely used JDBC Connection pooling library for Java, caused by unsafe deserialization of the userOverridesAsString property. All versions of com.mchange:c3p0 prior to 0.12.0 (including c3p0-loom) are affected. The vulnerability was disclosed by the maintainer on February 23, 2026, published to the GitHub Advisory Database on February 25, 2026, and to NVD on February 26, 2026. It carries a CVSS v4.0 base score of 8.9 (High) (GitHub Advisory, Red Hat Bugzilla).
The root cause is classified under CWE-502 (Deserialization of Untrusted Data) and CWE-94 (Code Injection). Prior to v0.12.0, the userOverridesAsString property of c3p0's ConnectionPoolDataSource implementations was stored as a hex-encoded Java-serialized object. An attacker with low privileges and adjacent network access who can reset this property — either on an existing ConnectionPoolDataSource or via maliciously crafted serialized objects or javax.naming.Reference instances — can trigger deserialization of attacker-controlled data. The risk is compounded by a vulnerability in c3p0's dependency mchange-commons-java, which provided ungated support for remote factoryClassLocation values in JNDI references, enabling an attacker to embed JNDI references in the serialized payload that cause the JVM to download and execute code from an attacker-controlled remote location. The fix (commit e14cbd8) replaces the hex-serialized format with a safe CSV-based format and upgrades the dependency to mchange-commons-java 0.4.0+, which restricts remote factoryClassLocation by default (GitHub Advisory, c3p0 Commit).
Successful exploitation allows an attacker to execute arbitrary code on the application server within the JVM's classpath, resulting in full compromise of confidentiality, integrity, and availability of the vulnerable system and potentially subsequent systems. An attacker can exfiltrate sensitive data (e.g., database credentials, application secrets), modify application data, disrupt service availability, and use the compromised host as a pivot point for lateral movement within the network. The vulnerability affects any Java application using c3p0 < 0.12.0 that exposes ConnectionPoolDataSource objects via JNDI or allows modification of the userOverridesAsString property (GitHub Advisory, Red Hat Bugzilla).
ConnectionPoolDataSource objects via JNDI interfaces or allow modification of the userOverridesAsString JavaBean property (e.g., through application configuration endpoints or management interfaces).marshalsec) that serves a malicious javax.naming.Reference pointing to a remote factoryClassLocation hosting attacker-controlled Java bytecode.userOverridesAsString property that embeds a javax.naming.Reference pointing to the attacker's JNDI server and remote class location.userOverridesAsString property on the target ConnectionPoolDataSource — either by manipulating a serialized object delivered over a deserialization endpoint, via a JNDI lookup that returns a crafted ConnectionPoolDataSource, or through any interface that allows setting this JavaBean property.userOverridesAsString value, which triggers dereferencing of the embedded javax.naming.Reference and a connection to the attacker's JNDI server.factoryClassLocation, achieving arbitrary code execution in the context of the application server process (GitHub Advisory, c3p0 Security Advisory).factoryClassLocation).javax.naming.Reference, JNDI lookups, or deserialization errors in application logs; unexpected class loading events from remote URLs in JVM verbose class-loading logs.curl, wget, nc); unexpected network connections initiated by the JVM..class files or JAR files in temporary directories or application directories; unexpected web shells or scripts written by the application server process.The primary remediation is to upgrade c3p0 to version 0.12.0 or later, which replaces the unsafe hex-serialized userOverridesAsString format with a safe CSV-based format and upgrades the mchange-commons-java dependency to 0.4.0+, which restricts remote factoryClassLocation by default. There is no supported workaround for versions prior to 0.12.0. As additional defensive measures, implement Java deserialization filters (JEP 290) to block dangerous classes, restrict outbound network access from application servers to prevent JVM class loading from remote sources, and limit exposure of ConnectionPoolDataSource objects via JNDI. Vendor patches have been issued by Red Hat (RHSA-2026:3890, RHSA-2026:18054/18055/18059 for JBoss EAP 8.1), IBM (Business Automation Manager Open Editions), Oracle (April 2026 CPU), and Atlassian (May 19, 2026 security bulletin) (GitHub Advisory, Red Hat Bugzilla, Oracle CPU).
The vulnerability was originally researched and reported by Hans-Martin Münch (credited as 'dpp'), who published a blog post titled "c3p0, you little rascal" at Mogwai Labs detailing the attack surface (GitHub Advisory). The maintainer (swaldman) promptly disclosed and patched the issue. Coverage appeared across security news outlets including Heise (noting Atlassian products were affected) and community aggregators. The vulnerability attracted attention due to its similarity to well-known JNDI/deserialization attack chains (e.g., Log4Shell), though its adjacent-network attack vector and low-privilege requirement limit its scope compared to fully remote, unauthenticated vulnerabilities.
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."