El Cross-Site Scripting (XSS) Reflejado ocurre cuando una aplicación recibe datos en una petición HTTP (generalmente parámetros GET o POST) e incluye esos datos en la respuesta inmediata de forma insegura, sin la validación o el escape adecuados.
Mecánica del Ataque
A diferencia del XSS Almacenado, el script malicioso no reside en la base de datos del servidor. El flujo es el siguiente:
- El atacante construye una URL maliciosa que contiene el payload de JavaScript.
- La víctima es engañada (Ingeniería Social) para hacer clic en el enlace.
- El servidor recibe la petición y "refleja" el payload en el HTML de respuesta.
- El navegador de la víctima ejecuta el script creyendo que es código legítimo del sitio (Same Origin Policy).
Contexto de Ejecución
En Cadel Academy, el parámetro q del buscador se renderiza dentro de una etiqueta <p>. Al usar el filtro | safe en Jinja2, se deshabilita el Context-Aware Output Encoding, permitiendo la inyección de etiquetas <script>.
Impacto en la Seguridad
Aunque no es persistente, el XSS Reflejado permite:
- Robo de Sesión: Acceso a
document.cookie. - Phishing Avanzado: Modificación del DOM para presentar formularios de login falsos.
- Acciones en nombre del usuario: Realizar peticiones HTTP (CSRF) usando la sesión de la víctima.