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:
-
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.
-
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.
-
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:
Si un atacante envía una entrada maliciosa como <script>alert('XSS');</script>
, el navegador ejecutará el script:
Ejercicio Práctico: Identificación de XSS
Ejercicio
- 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>"; } ?>
- Explota la Vulnerabilidad:
- Intenta inyectar un script malicioso en el campo de entrada
username
.
- Intenta inyectar un script malicioso en el campo de entrada
Solución
-
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.
- El código es vulnerable a XSS porque la entrada del usuario (
-
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".
- Inyecta el siguiente script en el campo
Prevención de XSS
Para prevenir XSS, sigue estas prácticas:
-
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.
-
Uso de Cabeceras de Seguridad:
- Implementa cabeceras de seguridad como Content Security Policy (CSP) para restringir las fuentes de scripts ejecutables.
-
Escapado de Salida:
- Escapa todas las salidas que incluyen datos proporcionados por el usuario.
- Ejemplo en PHP:
Ejercicio Práctico: Implementación de Controles de Seguridad
Ejercicio
- Modificar el Código para Prevenir XSS:
- Modifica el código del ejercicio anterior para prevenir la vulnerabilidad XSS.
Solución
- Implementación de Controles de Seguridad:
- Usa
htmlspecialchars
para escapar la salida del usuario.
- Usa
<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
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
Módulo 3: OWASP Top Ten
- A1: Inyección
- A2: Pérdida de Autenticación
- A3: Exposición de Datos Sensibles
- A4: Entidades Externas XML (XXE)
- A5: Control de Acceso Roto
- A6: Configuración Incorrecta de Seguridad
- A7: Cross-Site Scripting (XSS)
- A8: Deserialización Insegura
- A9: Uso de Componentes con Vulnerabilidades Conocidas
- A10: Registro y Monitoreo Insuficientes
Módulo 4: OWASP ASVS (Application Security Verification Standard)
- Introducción a ASVS
- Niveles de Verificación
- Requisitos de Seguridad
- Implementación de ASVS en Proyectos
Módulo 5: OWASP SAMM (Software Assurance Maturity Model)
Módulo 6: OWASP ZAP (Zed Attack Proxy)
- Introducción a ZAP
- Instalación y Configuración
- Escaneo de Vulnerabilidades
- Automatización de Pruebas de Seguridad
Módulo 7: Buenas Prácticas y Recomendaciones
- Ciclo de Vida de Desarrollo Seguro (SDLC)
- Integración de Seguridad en DevOps
- Capacitación y Concienciación en Seguridad
- Herramientas y Recursos Adicionales
Módulo 8: Ejercicios Prácticos y Casos de Estudio
- Ejercicio 1: Identificación de Vulnerabilidades
- Ejercicio 2: Implementación de Controles de Seguridad
- Caso de Estudio 1: Análisis de un Incidente de Seguridad
- Caso de Estudio 2: Mejora de la Seguridad en una Aplicación Web