¿Qué hace xss-cross-site-scripting?
Manual de XSS. Úselo cuando el contenido controlado por el usuario llegue a HTML, atributos, JavaScript, sumideros DOM, cargas o rutas de renderizado en múltiples contextos.
¿Qué es XSS?
Cross-Site Scripting (XSS) es una vulnerabilidad de seguridad que permite a un atacante inyectar código malicioso (generalmente JavaScript) en páginas web vistas por otros usuarios. Esto puede llevar al robo de cookies, secuestro de sesiones, redirecciones maliciosas, y otras acciones no autorizadas.
Contextos de inyección
El manual cubre los siguientes contextos donde puede ocurrir XSS:
- HTML directo: El contenido se inserta como HTML sin escapar (
<,>,&,",'). - Atributos HTML: El contenido se coloca dentro de un atributo como
src,href,style, etc. - JavaScript: El contenido se inserta en un bloque
<script>o en manejadores de eventos comoonclick,onload. - Sumideros DOM: El contenido se asigna a propiedades del DOM como
innerHTML,document.write,eval, osetTimeout. - Cargas de archivos: El nombre o contenido de un archivo subido se refleja en la página sin escape.
- Múltiples contextos: El mismo dato se usa en varias partes de la página (por ejemplo, primero en un atributo y luego en un script), requiriendo escapes específicos para cada uno.
Uso del playbook
Este playbook está diseñado para ser usado durante pruebas de penetración o auditorías de seguridad autorizadas. Siga estos pasos:
- Identifique el punto de entrada: Determine dónde y cómo se introduce el contenido del usuario.
- Analice el contexto: Identifique en qué contexto se renderizará el contenido (HTML, atributo, JS, etc.).
- Seleccione un payload: Elija el payload adecuado para el contexto, basado en las técnicas documentadas aquí.
- Pruebe la inyección: Inserte el payload y observe si se ejecuta.
- Documente los resultados: Registre la vulnerabilidad y las posibles soluciones.
Ejemplos de payloads
HTML directo
<script>alert('XSS')</script>
Atributo HTML
" onfocus="alert('XSS')" autofocus="
JavaScript en evento
<img src=x onerror="alert('XSS')">
Sumidero DOM
document.write('<script>alert(1)</script>');
Prevención
- Escape contextual: Use librerías que escapen según el contexto (HTML, atributo, JS, URL).
- Content Security Policy (CSP): Implemente CSP para restringir las fuentes de scripts.
- Validación de entrada: Valide y sanitice todo dato ingresado por el usuario.
- HttpOnly cookies: Marque las cookies como HttpOnly para mitigar el robo de cookies vía XSS.
Compatibilidad
Este playbook es compatible con herramientas como Yaklang y plataformas de pruebas automatizadas que soporten la inyección de payloads XSS en diferentes contextos.