ICM / seguridad / Qué es un ataque XSS o Cross Site Scripting

Qué es un ataque XSS o Cross Site Scripting

11 mayo 2022 | Pablo Gómez

¿Qué son los ataques XSS?

El Cross Site Scripting (XSS) es uno de los ataques más populares y vulnerables que se conoce. Está considerado como uno de los ataques más arriesgados para las aplicaciones web y también puede traer consecuencias muy graves.

El XSS se compara a menudo con otros ataques similares en el lado del cliente, ya que durante este ataque se utilizan principalmente lenguajes del lado del cliente. Sin embargo, el ataque XSS se considera más arriesgado, debido a su capacidad para dañar incluso tecnologías en teoría menos vulnerables.

El ataque Cross Site Scripting es una inyección de código malicioso, que se ejecutará en el navegador de la víctima. El script malicioso puede guardarse en el servidor web y ejecutarse cada vez que el usuario llame a la funcionalidad correspondiente. También se puede realizar sin ningún script guardado en el servidor web.

El objetivo principal de este ataque es robar los datos de identidad de un usuario, como cookies, tokens de sesión y otra información. En la mayoría de los casos, este ataque se utiliza para robar las cookies del usuario. Como sabemos, las cookies nos ayudan a iniciar la sesión automáticamente. Por lo tanto, con las cookies robadas, podemos iniciar sesión con otras identidades. Y esta es una de las razones por las que este ataque se considera uno de los más arriesgados.

El ataque XSS se realiza en el lado del cliente. Se puede realizar con diferentes lenguajes de programación en el lado del cliente. Sin embargo, la mayoría de las veces este ataque se realiza con Javascript y HTML.

¿Cómo se realiza el XSS?

El ataque Cross Site Scripting significa enviar e inyectar código o un script malicioso. El código malicioso se suele escribir con lenguajes de programación que se utiliza en el lado del cliente como Javascript, HTML, VBScript, Flash, etc. Sin embargo, Javascript y HTML son los más utilizados para realizar este ataque.

 

Este ataque se puede realizar de diferentes maneras. Dependiendo del tipo de ataque XSS, el script malicioso puede reflejarse en el navegador de la víctima o almacenarse en la base de datos y ejecutarse cada vez que el usuario llama a la función apropiada. El script malicioso se ejecutará en el navegador de la víctima.

 

Para entender como funciona podemos imaginar una situación normal del dia a dia. Existen muchos servidores con vulnerabilidades XSS.

Un escenario muy común se produce cuando un atacante crea una URL con el código malicioso inyectado y la camufla. El atacante envía el enlace de este site a la víctima. La víctima visita este site vulnerable y el código malicioso es ejecutado por el navegador del usuario. Este tipo de vulnerabilidad XSS se denomina «XSS reflejado».

Este tipo de ataques se utilizan para robar las «cookies» de la víctima, secuestrar las sesiones, tratar de acceder al historial de visitas o cambiar el contenido de la web que visita la víctima.

 

Existe otro tipo de vulnerabilidad XSS denominada «XSS almacenado o persistente». El script malicioso se guarda en el servidor web de forma permanente. Es más peligroso que el mencionado anteriormente ya que ejecuta el código inyectado por el atacante en los navegadores de todos los usuarios que vistan la aplicación web. Normalmente se produce en aquellas aplicaciones que permiten a los usuarios guardar algún tipo de dato.

Su funcionamiento se basa en que el atacante guarda código malicioso de forma persistente en una web vulnerable. La víctima se identifica en la aplicación con sus credenciales de usuario visitando la web vulnerable y el código malicioso se ejecuta en el navegador del usuario. Este tipo de vulnerabilidades permite tomar el control del navegador de la víctima, capturar información sobre sus aplicaciones, cambiar la apariencia de la web, escanear puertos de

usuarios o ejecutar exploits del navegador.

Ejemplo de XSS almacenado se pueden ver en páginas web que contienen foros o permiten dejar comentarios en los artículos. Cuidado también con sites donde se le permite al usuario gestionar su identidad, carritos de compra o gestores de archivos.

 

El XSS basado en DOM (Modelo de Objeto de Documento), es un ataque XSS en el que la carga útil del ataque se ejecuta como resultado de la modificación del «entorno» del DOM en el navegador de la víctima utilizado por el script original del lado del cliente, de modo que el código del lado del cliente se ejecuta de una manera «inesperada». Es decir, la página en sí no cambia, pero el código del lado del cliente se ejecuta de forma diferente debido a las modificaciones maliciosas que se han producido en el entorno DOM.

Esto contrasta con otros ataques XSS (almacenados o reflejados), en los que la carga útil del ataque se coloca en la página de respuesta (debido a un fallo en el lado del servidor).

 

El Modelo de Objetos de Documento es una convención utilizada para representar y trabajar con objetos en un documento HTML (así como en otros tipos de documentos). Todos los documentos HTML tienen un DOM asociado que consiste en objetos, que representan las propiedades del documento desde el punto de vista del navegador. Cuando se ejecuta un script del lado del cliente, puede utilizar el DOM de la página HTML donde se ejecuta el script. El script puede acceder a varias propiedades de la página y cambiar sus valores.

¿Cómo minimizar una ataque XSS?

Hay varias formas de intentar minimizar ataques XSS, pero los más fáciles son, mantener actualizado el software al máximo posible, desde plugins de nuestro servidor hasta los navegadores del cliente, y siempre que sea posible, lo ideal sería mantener el servidor detrás de un WAF.