Vulnerabilidad en c3p0 (CVE-2026-27830)
Gravedad CVSS v4.0:
ALTA
Tipo:
CWE-94
Control incorrecto de generación de código (Inyección de código)
Fecha de publicación:
26/02/2026
Última modificación:
27/02/2026
Descripción
c3p0, una biblioteca de pooling de conexiones JDBC, es vulnerable al ataque a través de objetos serializados en Java creados maliciosamente e instancias de `javax.naming.Reference`. Varias implementaciones de `ConnectionPoolDataSource` de c3p0 tienen una propiedad llamada `userOverridesAsString` que representa conceptualmente un `Map>`. Antes de la v0.12.0, esa propiedad se mantenía como un objeto serializado codificado en hexadecimal. Cualquier atacante capaz de restablecer esta propiedad, en un `ConnectionPoolDataSource` existente o a través de objetos serializados creados maliciosamente o instancias de `javax.naming.Reference`, podría ser manipulado para ejecutar código inesperado en el `CLASSPATH` de la aplicación. El peligro de esta vulnerabilidad fue fuertemente magnificado por vulnerabilidades en la dependencia principal de c3p0, mchange-commons-java. Esta biblioteca incluye código que refleja implementaciones tempranas de la funcionalidad JNDI, incluyendo soporte sin restricciones para valores remotos de `factoryClassLocation`. Los atacantes podrían establecer objetos serializados codificados en hexadecimal de `userOverridesAsString` de c3p0 que incluyen objetos 'serializados indirectamente' a través de referencias JNDI. La deserialización de esos objetos y la desreferenciación de los objetos `javax.naming.Reference` incrustados podrían provocar la descarga y ejecución de código malicioso desde un `factoryClassLocation` remoto. Aunque el peligro presentado por las vulnerabilidades de c3p0 se ve exacerbado por las vulnerabilidades en mchange-commons-java, el uso de hexadecimal de objetos serializados en Java como formato para una propiedad Java-Bean escribible, de objetos que pueden ser expuestos a través de interfaces JNDI, representa una grave fragilidad independiente. La propiedad `userOverridesAsString` de las clases `ConnectionPoolDataSource` de c3p0 ha sido reimplementada para usar un formato seguro basado en CSV, en lugar de depender de la deserialización de objetos Java potencialmente peligrosa. c3p0-0.12.0+ y versiones superiores dependen de mchange-commons-java 0.4.0+, que restringe el soporte para valores remotos de `factoryClassLocation` mediante parámetros de configuración que por defecto son valores restrictivos. c3p0 adicionalmente impone el nuevo `com.mchange.v2.naming.nameGuardClassName` de mchange-commons-java para prevenir la inyección de nombres JNDI inesperados, potencialmente remotos. No hay solución alternativa soportada para versiones de c3p0 anteriores a la 0.12.0.
Impacto
Puntuación base 4.0
8.90
Gravedad 4.0
ALTA
Referencias a soluciones, herramientas e información
- https://github.com/swaldman/c3p0/commit/e14cbd8166e423e2e9a9d6f08b2add3433492d6e
- https://github.com/swaldman/c3p0/security/advisories/GHSA-5476-xc4j-rqcv
- https://mogwailabs.de/en/blog/2025/02/c3p0-you-little-rascal
- https://www.mchange.com/projects/c3p0/#configuring_security
- https://www.mchange.com/projects/c3p0/#security-note



