Every CVE Search/ Get API key

CVE-2026-55223

c3p0 exposes a deserialization "sink" via JDBC DataSource bean properties

6.3 MediumFix available

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
Low
Availability
Low

Exploit likelihood

0.48%Up 0.2 points since Jul 1, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.3

c3p0 exposes a deserialization "sink" via JDBC DataSource bean properties

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
CVE-2026-55223
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-502, CWE-915
Updated
2026-11-02
EUVDEUVD-2026-40847 6.3

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
EUVD-2026-40847
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-w6w4-rjh9-9r58 6.3

c3p0 can, in combination with other libraries, compose to a "sink" for deserialization gadgets

Impact

The JDBC spec defines the interface DataSource, with a method called getConnection(), and ConnectionPoolDataSource, with a method called getPooledConnection(). These methods are potentially dangerous. One way or another they trigger calls into JDBC drivers, which themselves are complicated, flexible tools which may be, and in practice sometimes have proven to be, susceptible to abuse.

Unfortunately, the JavaBean framework treats methods of this form, getXXX(), as JavaBean "properties", which JavaBean-related libraries often presume represent quick, safe-to-look-up, state or configuration.

Attackers therefore can construct malicious DataSource objects — objects whose calls to getConnection() or getPooledConnection() would trigger attacks via vulnerable JDBC drivers — and bundle them in contexts that automatically look up bean properties on deserialization. If an attacker can smuggle such an object in serialized form to a location from which an application will deserialize it, an attack is triggered.

It's not easy. It requires that a susceptible JDBC DataSource or ConnectionPoolDataSource be available on the application CLASSPATH, along with a susceptible JDBC driver, and a carrier that will automatically look up JavaBean properties on deserialization. In practice, the most common such carrier is the composition of a collection and a Comparator implementation that sorts based on JavaBean properties from Apache commons-beanutils.

But c3p0 prior to 0.14.0 offered the susceptible JDBC DataSource or ConnectionPoolDataSource, supplying an essential component of the trigger.

Patches

c3p0 versions 0.14.0 and above no longer participate in this class of attack, because they include explicit BeanInfo classes which exclude connection and pooledConnection from the list of "introspected" JavaBean properties. Since getConnection() and getPooledConnection() no longer define JavaBean properties, classes that promiscuously read JavaBean properties do not call them, and the attack is averted.

Workarounds

If users can ensure the safety of all JDBC drivers on the application CLASSPATH, or that no libraries lie on the CLASSPATH that can be composed to trigger automatic JavaBean property lookups on deserialization, then this attack is prevented. Nevertheless, given the complexity of modern JDBC drivers and typical Java application transitive dependencies, it is strongly recommended that users upgrade to c3p0 version 0.14.0 or higher.

Some versions of this attack are foiled by the stronger encapsulation and restriction of reflective access introduced in Java 16. Running applications on Java 16+ is therefore a potential mitigation.

This attack is described by Hans-Martin Münch in a blog post called "Look Mama, no TemplatesImpl".

Record
GHSA-w6w4-rjh9-9r58
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-502
Updated
2026-11-02
NVD 6.3

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
CVE-2026-55223
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-502, CWE-915
Updated
2026-11-02
OSV 6.3

c3p0 exposes a deserialization "sink" via JDBC DataSource bean properties

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
CVE-2026-55223
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-502, CWE-915
Updated
2026-11-02
OSVDEBIAN-CVE-2026-55223 6.3

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
DEBIAN-CVE-2026-55223
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Updated
2026-11-02
Show 10 moreShow less
OSVGHSA-w6w4-rjh9-9r58 6.3

c3p0 can, in combination with other libraries, compose to a "sink" for deserialization gadgets

Impact

The JDBC spec defines the interface DataSource, with a method called getConnection(), and ConnectionPoolDataSource, with a method called getPooledConnection(). These methods are potentially dangerous. One way or another they trigger calls into JDBC drivers, which themselves are complicated, flexible tools which may be, and in practice sometimes have proven to be, susceptible to abuse.

Unfortunately, the JavaBean framework treats methods of this form, getXXX(), as JavaBean "properties", which JavaBean-related libraries often presume represent quick, safe-to-look-up, state or configuration.

Attackers therefore can construct malicious DataSource objects — objects whose calls to getConnection() or getPooledConnection() would trigger attacks via vulnerable JDBC drivers — and bundle them in contexts that automatically look up bean properties on deserialization. If an attacker can smuggle such an object in serialized form to a location from which an application will deserialize it, an attack is triggered.

It's not easy. It requires that a susceptible JDBC DataSource or ConnectionPoolDataSource be available on the application CLASSPATH, along with a susceptible JDBC driver, and a carrier that will automatically look up JavaBean properties on deserialization. In practice, the most common such carrier is the composition of a collection and a Comparator implementation that sorts based on JavaBean properties from Apache commons-beanutils.

But c3p0 prior to 0.14.0 offered the susceptible JDBC DataSource or ConnectionPoolDataSource, supplying an essential component of the trigger.

Patches

c3p0 versions 0.14.0 and above no longer participate in this class of attack, because they include explicit BeanInfo classes which exclude connection and pooledConnection from the list of "introspected" JavaBean properties. Since getConnection() and getPooledConnection() no longer define JavaBean properties, classes that promiscuously read JavaBean properties do not call them, and the attack is averted.

Workarounds

If users can ensure the safety of all JDBC drivers on the application CLASSPATH, or that no libraries lie on the CLASSPATH that can be composed to trigger automatic JavaBean property lookups on deserialization, then this attack is prevented. Nevertheless, given the complexity of modern JDBC drivers and typical Java application transitive dependencies, it is strongly recommended that users upgrade to c3p0 version 0.14.0 or higher.

Some versions of this attack are foiled by the stronger encapsulation and restriction of reflective access introduced in Java 16. Running applications on Java 16+ is therefore a potential mitigation.

This attack is described by Hans-Martin Münch in a blog post called "Look Mama, no TemplatesImpl".

Record
GHSA-w6w4-rjh9-9r58
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-502
Updated
2026-11-02
OSVUBUNTU-CVE-2026-55223 6.3

c3p0 is a JDBC Connection pooling library. In versions prior to 0.14.0, c3p0 in combination with other libraries, can compose to a "sink" for deserialization gadgets. The JDBC spec's DataSource.getConnection() and ConnectionPoolDataSource.getPooledConnection() match the getXXX() form, so JavaBean libraries treat them as "properties" assumed safe while they actually call into JDBC drivers. Attackers can thus craft malicious DataSource objects whose property lookups invoke vulnerable drivers, then smuggle them in serialized form to where an application deserializes and auto-resolves bean properties — triggering the attack. This requires a susceptible DataSource/ConnectionPoolDataSource and JDBC driver on the CLASSPATH, plus a carrier that auto-looks-up JavaBean properties on = deserialization, most commonly a collection paired with an Apache commons-beanutils Comparator that sorts by bean properties. c3p0 supplied that susceptible DataSource/ConnectionPoolDataSource, which was an essential component of the trigger. This issue has been fixed in version 0.14.0.

Record
UBUNTU-CVE-2026-55223
CVSS 4.0
6.3 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Updated
2026-11-02
OSVCLSA-2026-1786007625 No score

TuxCare security update for com.mchange:c3p0 (1 CVE)

TuxCare rebuilt com.mchange:c3p0 to address 1 CVE. Fixed in 0.9.5.5-tuxcare.3.

Record
CLSA-2026-1786007625
Updated
2026-11-02
OSVCLSA-2026-1787905903 No score

TuxCare security update for com.mchange:c3p0 (1 CVE)

TuxCare rebuilt com.mchange:c3p0 to address 1 CVE. Fixed in 0.9.5.4-tuxcare.1.

Record
CLSA-2026-1787905903
Updated
2026-11-02
OSVCLSA-2026-1789371869 No score

TuxCare security update for com.mchange:c3p0 (2 CVEs)

TuxCare rebuilt com.mchange:c3p0 to address 2 CVEs. Fixed in 0.9.5.2-tuxcare.1.

Record
CLSA-2026-1789371869
Updated
2026-11-02
OSVCLSA-2026-1789372028 No score

TuxCare security update for com.mchange:c3p0 (2 CVEs)

TuxCare rebuilt com.mchange:c3p0 to address 2 CVEs. Fixed in 0.9.5.3-tuxcare.1.

Record
CLSA-2026-1789372028
Updated
2026-11-02
OSVCLSA-2026-1793128010 No score

TuxCare security update for com.mchange:c3p0 (1 CVE)

TuxCare rebuilt com.mchange:c3p0 to address 1 CVE. Fixed in 0.9.2.1-tuxcare.2.

Record
CLSA-2026-1793128010
Updated
2026-11-02
OSVCLSA-2026-1793183878 No score

TuxCare security update for com.mchange:c3p0 (2 CVEs)

TuxCare rebuilt com.mchange:c3p0 to address 2 CVEs. Fixed in 0.9.5.4-tuxcare.5.

Record
CLSA-2026-1793183878
Updated
2026-11-02
OSVopenSUSE-SU-2026:11166-1 No score

c3p0-0.14.1-1.1 on GA media

These are all security issues fixed in the c3p0-0.14.1-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:11166-1
Updated
2026-11-02
OSVUSN-8642-1 No score

c3p0 vulnerabilities

It was discovered that c3p0 was vulnerable to remote code execution via maliciously crafted serialized objects and JNDI references. An attacker could use this to execute arbitrary code, bypass security restrictions, or cause a denial of service.

Record
USN-8642-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
com.mchange:c3p0
Maven
before 0.14.0
0.14.0
com.mchange:c3p0
TuxCare:Maven
0.9.5.5 up to 0.9.5.5-tuxcare.3, plus listed versions
0.9.5.5-tuxcare.10.9.5.5-tuxcare.2
0.9.5.5-tuxcare.3
com.mchange:c3p0
TuxCare:Maven
0.9.5.4 up to 0.9.5.4-tuxcare.1
0.9.5.4-tuxcare.1
com.mchange:c3p0
TuxCare:Maven
From an advisory covering 2 CVEs
0.9.5.2 up to 0.9.5.2-tuxcare.1
0.9.5.2-tuxcare.1
com.mchange:c3p0
TuxCare:Maven
From an advisory covering 2 CVEs
0.9.5.3 up to 0.9.5.3-tuxcare.1
0.9.5.3-tuxcare.1
com.mchange:c3p0
TuxCare:Maven
0.9.2.1 up to 0.9.2.1-tuxcare.2, plus listed versions
0.9.2.1-tuxcare.1
0.9.2.1-tuxcare.2
com.mchange:c3p0
TuxCare:Maven
From an advisory covering 2 CVEs
0.9.5.4 up to 0.9.5.4-tuxcare.5, plus listed versions
0.9.5.4-tuxcare.10.9.5.4-tuxcare.20.9.5.4-tuxcare.30.9.5.4-tuxcare.4
0.9.5.4-tuxcare.5
c3p0
Debian:12
All versions, plus listed versions
0.9.1.2-100.9.1.2-10.10.9.1.2-10.1~deb12u10.9.1.2-11
None known
c3p0
Debian:13
All versions, plus listed versions
0.9.1.2-10.10.9.1.2-11
None known
c3p0
Debian:14
All versions, plus listed versions
0.9.1.2-10.10.9.1.2-11
None known
Show 15 moreShow less
Affected packages
PackageAffectedFixed
com.mchange:c3p0
Maven
before 0.14.0, plus listed versions
0.10.00.10.0-pre10.10.0-pre20.10.0-pre30.10.0-pre4
Show 37 moreShow less
0.10.0-pre50.10.0-pre60.10.0-pre70.10.10.10.20.11.00.11.0-pre10.11.0-pre20.11.10.11.20.12.00.13.00.9.20.9.2-pre2-RELEASE0.9.2-pre30.9.2-pre40.9.2-pre50.9.2-pre60.9.2-pre70.9.2-pre80.9.2.10.9.50.9.5-pre10.9.5-pre100.9.5-pre20.9.5-pre30.9.5-pre40.9.5-pre50.9.5-pre60.9.5-pre70.9.5-pre80.9.5-pre90.9.5.10.9.5.20.9.5.30.9.5.40.9.5.5
0.14.0
c3p0
Ubuntu:Pro:16.04:LTS
before 0.9.1.2-9+deb8u1ubuntu0.16.04.1~esm2, plus listed versions
0.9.1.2-90.9.1.2-9+deb8u1build0.16.04.10.9.1.2-9+deb8u1ubuntu0.16.04.1~esm1
0.9.1.2-9+deb8u1ubuntu0.16.04.1~esm2
c3p0
Ubuntu:Pro:18.04:LTS
before 0.9.1.2-9+deb8u1ubuntu0.18.04.1+esm1, plus listed versions
0.9.1.2-90.9.1.2-9+deb8u1build0.18.04.10.9.1.2-9+deb8u1ubuntu0.18.04.1
0.9.1.2-9+deb8u1ubuntu0.18.04.1+esm1
c3p0
Ubuntu:Pro:20.04:LTS
before 0.9.1.2-10ubuntu0.20.04.1+esm1, plus listed versions
0.9.1.2-100.9.1.2-10ubuntu0.20.04.1
0.9.1.2-10ubuntu0.20.04.1+esm1
c3p0
Ubuntu:Pro:22.04:LTS
before 0.9.1.2-10ubuntu1+esm1, plus listed versions
0.9.1.2-100.9.1.2-10ubuntu1
0.9.1.2-10ubuntu1+esm1
c3p0
Ubuntu:Pro:24.04:LTS
before 0.9.1.2-10ubuntu2+esm1, plus listed versions
0.9.1.2-10ubuntu10.9.1.2-10ubuntu2
0.9.1.2-10ubuntu2+esm1
c3p0
Ubuntu:25.10
All versions, plus listed versions
0.9.1.2-10ubuntu2
None known
c3p0
Ubuntu:26.10
All versions, plus listed versions
0.9.1.2-11
None known
c3p0
Ubuntu:Pro:26.04:LTS
before 0.9.1.2-11ubuntu0.1~esm1, plus listed versions
0.9.1.2-10ubuntu20.9.1.2-11
0.9.1.2-11ubuntu0.1~esm1
c3p0
Ubuntu:Pro:18.04:LTS
From an advisory covering 4 CVEs
before 0.9.1.2-9+deb8u1ubuntu0.18.04.1+esm1, plus listed versions
0.9.1.2-90.9.1.2-9+deb8u1build0.18.04.10.9.1.2-9+deb8u1ubuntu0.18.04.1
0.9.1.2-9+deb8u1ubuntu0.18.04.1+esm1
c3p0
Ubuntu:Pro:20.04:LTS
From an advisory covering 4 CVEs
before 0.9.1.2-10ubuntu0.20.04.1+esm1, plus listed versions
0.9.1.2-100.9.1.2-10ubuntu0.20.04.1
0.9.1.2-10ubuntu0.20.04.1+esm1
c3p0
Ubuntu:Pro:22.04:LTS
From an advisory covering 4 CVEs
before 0.9.1.2-10ubuntu1+esm1, plus listed versions
0.9.1.2-100.9.1.2-10ubuntu1
0.9.1.2-10ubuntu1+esm1
c3p0
Ubuntu:Pro:24.04:LTS
From an advisory covering 4 CVEs
before 0.9.1.2-10ubuntu2+esm1, plus listed versions
0.9.1.2-10ubuntu10.9.1.2-10ubuntu2
0.9.1.2-10ubuntu2+esm1
c3p0
Ubuntu:Pro:26.04:LTS
From an advisory covering 4 CVEs
before 0.9.1.2-11ubuntu0.1~esm1, plus listed versions
0.9.1.2-10ubuntu20.9.1.2-11
0.9.1.2-11ubuntu0.1~esm1
c3p0
openSUSE:Tumbleweed
before 0.14.1-1.1
0.14.1-1.1

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-55223 is a medium vulnerability (CVSS 6.3) in Swaldman C3p0, published June 30, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.48%, the 41st percentile. Fixed in com.mchange:c3p0 0.14.0.

References

Show 9 moreShow less
MoveEnter Open