Introducción a Cross-Site Scripting (XSS)

Cross-Site Scripting (XSS) es una vulnerabilidad de seguridad que permite a los atacantes inyectar scripts maliciosos en páginas web vistas por otros usuarios. Estos scripts pueden robar datos sensibles, como cookies de sesión, manipular el contenido de la página o redirigir a los usuarios a sitios maliciosos.

Tipos de XSS

Existen tres tipos principales de XSS:

  1. XSS Reflejado (Reflected XSS):

    • Ocurre cuando los datos proporcionados por un usuario se reflejan inmediatamente en una página web sin ser validados o codificados.
    • Ejemplo: Un formulario de búsqueda que muestra los resultados de la búsqueda sin validar la entrada del usuario.
  2. XSS Almacenado (Stored XSS):

    • Ocurre cuando los datos maliciosos proporcionados por un usuario se almacenan en el servidor y se muestran a otros usuarios en una página web.
    • Ejemplo: Un comentario en un foro que contiene un script malicioso.
  3. XSS Basado en DOM (DOM-based XSS):

    • Ocurre cuando el script malicioso se ejecuta como resultado de la modificación del Document Object Model (DOM) en el navegador del usuario.
    • Ejemplo: Un script que manipula el DOM basado en la URL o la entrada del usuario.

Ejemplo de XSS Reflejado

Supongamos que tenemos un formulario de búsqueda en una página web:

<form action="/search" method="get">
  <input type="text" name="query">
  <input type="submit" value="Search">
</form>

El servidor devuelve los resultados de la búsqueda reflejando la entrada del usuario:

<p>Results for: <b><?php echo $_GET['query']; ?></b></p>

Si un atacante envía una entrada maliciosa como <script>alert('XSS');</script>, el navegador ejecutará el script:

<p>Results for: <b><script>alert('XSS');</script></b></p>

Ejercicio Práctico: Identificación de XSS

Ejercicio

  1. Identificar la Vulnerabilidad:
    • Analiza el siguiente código y determina si es vulnerable a XSS.
<form action="/submit" method="post">
  <input type="text" name="username">
  <input type="submit" value="Submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    echo "<p>Welcome, $username!</p>";
}
?>
  1. Explota la Vulnerabilidad:
    • Intenta inyectar un script malicioso en el campo de entrada username.

Solución

  1. Identificación de la Vulnerabilidad:

    • El código es vulnerable a XSS porque la entrada del usuario ($username) se refleja en la página sin ser validada o codificada.
  2. Explotación de la Vulnerabilidad:

    • Inyecta el siguiente script en el campo username: <script>alert('XSS');</script>.
    • El navegador ejecutará el script, mostrando una alerta con el mensaje "XSS".

Prevención de XSS

Para prevenir XSS, sigue estas prácticas:

  1. Validación y Codificación de Entrada:

    • Valida y codifica todas las entradas del usuario antes de reflejarlas en la página.
    • Usa funciones de codificación específicas para HTML, JavaScript, CSS, etc.
  2. Uso de Cabeceras de Seguridad:

    • Implementa cabeceras de seguridad como Content Security Policy (CSP) para restringir las fuentes de scripts ejecutables.
  3. Escapado de Salida:

    • Escapa todas las salidas que incluyen datos proporcionados por el usuario.
    • Ejemplo en PHP:
echo htmlspecialchars($username, ENT_QUOTES, 'UTF-8');

Ejercicio Práctico: Implementación de Controles de Seguridad

Ejercicio

  1. Modificar el Código para Prevenir XSS:
    • Modifica el código del ejercicio anterior para prevenir la vulnerabilidad XSS.

Solución

  1. Implementación de Controles de Seguridad:
    • Usa htmlspecialchars para escapar la salida del usuario.
<form action="/submit" method="post">
  <input type="text" name="username">
  <input type="submit" value="Submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
    echo "<p>Welcome, $username!</p>";
}
?>

Conclusión

En esta sección, hemos aprendido sobre la vulnerabilidad de Cross-Site Scripting (XSS), sus tipos y cómo identificar y prevenir ataques XSS. Es crucial validar y codificar todas las entradas del usuario y usar cabeceras de seguridad para proteger las aplicaciones web contra XSS. En el próximo módulo, profundizaremos en otra vulnerabilidad crítica del OWASP Top Ten.

Curso de OWASP: Directrices y Estándares para la Seguridad en Aplicaciones Web

Módulo 1: Introducción a OWASP

Módulo 2: Principales Proyectos de OWASP

Módulo 3: OWASP Top Ten

Módulo 4: OWASP ASVS (Application Security Verification Standard)

Módulo 5: OWASP SAMM (Software Assurance Maturity Model)

Módulo 6: OWASP ZAP (Zed Attack Proxy)

Módulo 7: Buenas Prácticas y Recomendaciones

Módulo 8: Ejercicios Prácticos y Casos de Estudio

Módulo 9: Evaluación y Certificación

© Copyright 2024. Todos los derechos reservados