Un Fallo En HyperSQL Deja Una Biblioteca Vulnerable A RCE
Investigadores de seguridad han descubierto una grave vulnerabilidad en HyperSQL (HSQLDB) que supone un riesgo de ejecución remota de código (RCE).
HSQLDB ofrece un sistema de base de datos relacional SQL basado en Java. La tecnología -que es la segunda base de datos SQL integrada más popular, con 100 millones de descargas hasta la fecha- se utiliza para el desarrollo, la prueba y la implantación de aplicaciones de bases de datos.
HSQLDB es utilizado por más de 3.120 paquetes Maven, entre los que se encuentran LibreOffice, JBoss, Log4j, Hibernate y Spring-Boot, así como varios paquetes de software empresarial.
Problema de parseo
Los investigadores de seguridad de Code Intelligence descubrieron la vulnerabilidad RCE (clasificada como CVE-2022-41853 y calificada con una puntuación de gravedad CVSS casi máxima de 9,8) tras realizar una serie de pruebas de fuzzing.
Más concretamente, descubrieron que el procedimiento de análisis sintáctico de datos en formato binario y de texto en los componentes java.sql.Statement y java.sql.PreparedStatement de la tecnología era defectuoso.
Todas las versiones del software hasta la versión 2.7.0 de HSQLDB son vulnerables. Code Intelligence se puso en contacto con HSQL Development Group, los desarrolladores de HSQLDB, que respondieron rápidamente elaborando una corrección y una solución que ayuda a salvaguardar las versiones anteriores.
«El problema ya se ha solucionado y estará disponible en la próxima versión», afirma Code Intelligence. «A partir de la versión 2.7.1. la propiedad hsqldb.method_class_names debe definirse con una lista de nombres de clases o comodines si se utiliza cualquier método estático de Java como objetivo de la rutina HSQLDB».
Las implementaciones anteriores causaban un problema porque el uso de métodos estáticos de Java, excepto los de java.lang.Math, no debe permitirse sin definir la propiedad del sistema o de lo contrario pueden surgir problemas.
Causa principal
Un escrito técnico sobre el tema realizado por Code Intelligence explica la causa del problema con mayor profundidad.
«Por defecto, las sentencias SQL pueden ser utilizadas para llamar a cualquier método estático desde cualquier clase Java en la ruta de la clase. HSQLDB (HyperSQL DataBase) permitía el uso directo de métodos».
Explicación de un post en Medium.
La vulnerabilidad significa que el uso de «java.sql.Statement» o «java.sql.PreparedStatement» en versiones anteriores al parche de HSQLDB junto con entradas no confiables puede dejar las aplicaciones vulnerables a un ataque RCE.
En respuesta a preguntas varias, Khaled Yakdan, cofundador de Code Intelligence, explicó que una aplicación no tiene que ser vulnerable a la inyección SQL para que el problema entre en juego.
«La configuración actual por defecto permite utilizar métodos estáticos de cualquier clase que esté en el classpath». «Además, se permite el uso directo de métodos por compatibilidad con el legado».
Declaraciones de Yakdan.
Yakdan declinó especular sobre qué aplicaciones concretas podrían ser vulnerables, pero sí pudo explicar el impacto del fallo en los casos en los que se activó.
«Sólo nos centramos en encontrar fallos y no investigamos qué bases de código son vulnerables». «El impacto de esta CVE es que si usas HyperSQL para procesar consultas que incluyen entradas de usuario (no confiables), los atacantes pueden ser capaces de hacer que tu app ejecute código arbitrario».
Declaraciones de Yakdan
Más información:
Via: unaaldia.hispasec.com