CONCEPTOS BÁSICOS VULNERABILIDADES XSS EN APLICACIONES WEB

Se trata de una de las vulnerabilidades más comunes en aplicaciones web, también unas de las mas antiguas, sin embargo este tipo de ataques frecuentemente son los mas exitosos y con mayor nivel de evolución dado que con bastante continuidad surgen técnicas cada vez mas elaboradas para conseguir alguna forma de XSS sobre una aplicación Web.

Los ataques XSS se diferencian en varias categorías, cada una con sus propias características, no obstante conocerlas todas amplia el espectro de ataque ya que algunas aplicaciones web, son más vulnerables a unas que a otras. Las categorías de dichas vulnerabilidades son las siguientes.

XSS Reflected

Se trata de un ataque que no se ejecuta en conjunto con la aplicación web, por ejemplo cuando una página en un sitio se carga, esto significa que el contexto de este ataque solamente llega hasta la petición desarrollada por un cliente, normalmente estos ataques suelen asociarse con el robo de cookies, secuestro de sesiones, acceder a historial de la víctima e inclusive acceder a contraseñas almacenadas en el navegador utilizado.

Este tipo de ataque al igual que prácticamente todas las técnicas asociadas con XSS, se encuentran directamente relacionadas con validaciones de los parámetros de entrada que espera una aplicación web. Filtros y validaciones de los datos que un usuario puede ingresar a una aplicación son frecuentemente la razón principal para que se produzcan esta clase de brechas de seguridad.

XSS Stored

Se trata de una variación del ataque anteriormente mencionado, sin embargo es el mas peligroso, (y obviamente el más deseado por un atacante) dado que el contexto de este ataque no se limita solamente al contexto del navegador web de un usuario, sino que por el contrario puede afectar directamente a todos los usuarios que acceden a la aplicación, por esta razón es una de las vulnerabilidades mas peligrosas. Funciona de un modo similar al anterior, con la diferencia que en este caso, la vulnerabilidad se encuentra almacenada de forma persistente en la aplicación, ejemplos típicos de este tipo de ataques son foros o sitios donde se pueden incluir comentarios, así como otros tipos de entradas que permite al usuario ingresar texto y estás a su vez, permiten la inclusión de código HTML o JavaScript.

DOM XSS

Este tipo de ataque se basa en los dos anteriores, la diferencia radica en que se aprovecha la API DOM que tienen los navegadores web para acceder a determinados objetos del navegador, como por ejemplo, funciones  en javascript. De esta forma es posible manipular eventos, navegación y otras características que se ejecutan en el lado del cliente. Así que en este punto es importante anotar que el atacante debe tener buenos conocimientos sobre JavaScript y DOM Api.

Flash XSS

Consiste en el aprovechamiento de Flash para inyectar código malicioso en etiquetas <object>. En este punto se puede utilizar ActionScript para acceder a las variables de una película hecha en Flash (SWF), también se pueden aprovechar determinadas funciones de Flash para inyectar código malicioso, funciones tales como getURL o loadMovie pueden ser objeto de ataque

CSRF

Es tipo de ataque es un poco diferente a los anteriores, consiste en aprovechar la confianza que tiene un sitio en un usuario determinado, si se mira detenidamente los ataques clásicos XSS funcionan justo al contrario, es decir, explotando la confianza que tiene un cliente sobre un sitio web determinado. Consiste en explotar la imposibilidad que tiene una aplicación web en diferenciar entre un usuario legitimo/víctima de un atacante.

Este tipo de ataque habitualmente funciona en tres pasos:

1. El atacante crea un script malicioso hospedado en un servidor web que él controla.

2. La víctima inicia sesión en una página web y mantiene su sesión

3. El atacante envía un enlace al usuario con el script malicioso, el usuario lo “abre” siendo víctima de algún tipo de técnica de ingeniería social (el modo más frecuente). Una vez el script es ejecutado el atacante tendrá la posibilidad de robar cookies y otros objetos del navegador correspondientes a la sesión activa de la víctima.

En realidad en este tipo de ataque, existe una suplantación de la identidad de la víctima y el atacante se hace pasar por alguien que no es.

XFS

Se trata de una variante de un ataque XSS clásico, consiste en la inyección del código malicioso utilizado por el atacante pero inyectando frames para cargar código externo y evidentemente, sin la autorización de la víctima. El “truco” se encuentra en la forma en la que se manipulan las variables que viajan en la petición

XAS – Cross Agent Scripting

Se trata de inyectar código en una aplicación web por medio de la modificación de las cabeceras HTTP, en este caso, simplemente modificando el parámetro “User-Agent” del navegador web del atacante, y estableciendo como valor el código a inyectar, de esta forma si por ejemplo la aplicación web trata de determinar el User-Agent del navegador, realmente lo que terminará por ejecutar será el código definido en dicho campo, por ejemplo: En lugar de tener el valor “Mozilla” se tiene el valor “<script>alert(document.cookie);</script> ” de esta forma cuando una aplicación intente acceder a dicho campo, realmente se ejecutará este sencillo script.

XRS – Cross Referer Script

Funciona del mismo modo que XAS, sin embargo en lugar de modificar la cabecera correspondiente al User Agent del navegador, se cambia el valor de la cabecera Referer y de esta forma, se puede inyectar el código malicioso en dicha propiedad.

En una próxima entrada, se indicará como explotar estas vulnerabilidades tan frecuentes en aplicaciones Web.