Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

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.