Localiza vulnerabilidades XSS fácilmente con esta herramienta

Localiza vulnerabilidades XSS fácilmente con esta herramienta

Lorena Fernández

Más que nunca, no hay excusas a la hora de encontrarse con herramientas de hacking que sean fáciles de instalar y que sean útiles de verdad. Además, si utilizas Linux como sistema operativo principal, o si lo usas cada cierto tiempo, te encontrarás con muchísimas opciones. En esta ocasión, os vamos a mostrar un tutorial rápido y sencillo para instalar una solución denominada FinDOM-XSS. Esta herramienta solamente requiere de unos cuantos comandos y te ayudará a detectar vulnerabilidades de tipo XSS, es decir, Cross-Site Scripting. Sobre todo, se enfoca en las vulnerabilidades XSS basadas en DOM.

¿Qué es DOM?

Sus siglas significan Document Object Model. En español, se refiere a Modelo de Objetos del Documento. Consiste en una API que se desenvuelve en documentos de formato HTML y XML. Pero, ¿qué es lo que hace exactamente? Se encarga de construir la lógica de los documentos de los formatos citados, de manera que los mismos puedan ser accesibles y manipulables. Podemos entender mejor el concepto gracias a los documentos de formato HTML.

Sabemos que HTML es uno de los formatos esenciales de la web así como lo conocemos. Un archivo HTML puede tener contenido como el que mostraremos a continuación:

<!DOCTYPE html>
<html>
<head>
<title>Página HTML</title>
<style>
body {
background-color: red;
text-align: center;
color: white;
}
</style>
</head>
<body>
<h1>Este es un encabezado</h1>
<p>Este es un párrafo.</p>
<img src="avatar.png" alt="Avatar" style="width:200px">
</body>
</html>

Si nos fijamos, el archivo HTML que compartimos se divide en varias partes:

  • El encabezado (head) que es donde realizamos algunas definiciones esenciales antes de ir al contenido de la página en cuestión:
    • El título principal en la página que aparece en la pestaña de nuestro navegador (title).
    • El apartado en donde personalizamos el layout de la página, es decir, el formato general que tendrá. Es como elegir un tema de WordPress o Blogger que más nos guste.
  • El cuerpo de la página que es donde se almacena el contenido (body):
    • Colocamos un encabezado.
    • Ponemos el texto que queremos.
    • Insertamos una imagen de nuestra preferencia en el cual podemos personalizar el ancho y/o el alto de la misma.

Por supuesto, todo esto puede extenderse a mucho más. Tan sólo con un documento HTML podemos sacar bastante provecho del contenido multimedia. Sin embargo, este ejemplo nos demuestra que gracias a DOM, es posible que logremos manejar de manera práctica, sencilla y sobre todo estandarizada. El modelo DOM no se reserva HTML, se encuentra abierto a otros lenguajes de programación populares como JavaScript.

Vulnerabilidades y ataques XSS basadas en DOM

Los ataques XSS basados en DOM se llevan a cabo mediante la modificación del entorno DOM que se despliega en el navegador del usuario cuando visita una determinada página web. Básicamente, cuando un usuario visita una página web, el navegador interpreta el código de una forma tal, que el mismo pueda visualizar lo que desea. Es decir, imágenes, texto, vídeo, audio y mucho más. Sin embargo, esta peligrosa variante de ataque XSS tiene la capacidad de alterar lo que el usuario puede visualizar en el navegador. Lo hace de una forma tal que desemboque en perjuicios como instalación de malware, varios tipos de virus, scripts que consumen tus recursos del ordenador por minado de criptomonedas y mucho más.

Vamos a basarnos en un ejemplo compartido por OWASP para ilustrar cómo este ataque se pone en acción. Vamos a suponer que quieres visitar la siguiente página web la cual te habilita un formulario para que selecciones tu idioma preferido:

La URL, es decir, el enlace de la página original es el siguiente:

http://www.some.site/page.html?default=French

Muy fácilmente, un cibercriminal puede alterar dicha URL y queda así:

http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

Como vemos, lo que distingue a la segunda URL de la primera es lo siguiente:

default=<script>alert(document.cookie)

En lugar de decir «French«, el cibercriminal logra alterar la URL para que se despliegue en el navegador del usuario un «document.cookie» que puede ser cualquier pieza de código malicioso.

El ataque XSS basado en DOM es posible en este caso gracias a que el código Javascript original de la página web no acepta código HTML. En consecuencia, el navegador interpreta directamente lo que indica la URL de la página. Ésto último, sin importar que el script al que hace referencia la URL sea malicioso. Desgraciadamente, esto es algo difícil de controlar por parte del usuario. De todas formas, más adelante daremos consejo para protegernos de este tipo de ataques.

¿Qué es el XSS?

No está demás refrescar el concepto de los ataques de tipo inyección XSS. Las siglas corresponden a Cross (X) Site Scripting. Consiste en la acción de scripts maliciosos que se inyectan en sitios y aplicaciones web que en principio, tienen fines lícitos o benignos. ¿Cómo ocurren en general? El cibercriminal se apodera del sitio o la aplicación web, sobre todo en la parte front-end, y por diversas vías se inserta el código malicioso. Por desgracia, es una situación común que los sitios y aplicaciones web no tengan un fuerte control respecto a qué es lo que se ejecuta del lado del usuario final o bien, qué es lo que el usuario puede insertar sobre todo a través de los formularios web.

Además de los ataques XSS basados en DOM, el cual hemos descripto en esta nota, existen otras variantes que son tan o más peligrosas que esta. Hay que citar a Stored XSS y Reflected XSS, las cuales son ataques que están más orientados a vulnerar la seguridad y la integridad del servidor web.

Cómo instalar FIN-DOM XSS

Esta solución es un poderoso escáner de vulnerabilidades que podrían dar paso a los ataques XSS basados en DOM. Es sumamente sencillo de instalar, sólo precisas de contar con Linux mediante la distribución de tu preferencia. Recuerda que no es necesario contar con un ordenador independiente con este sistema operativo. ¡Siempre tienes la opción de virtualizar!

Lo primero que debemos tener presente es que la instalación es mediante línea de comando y obtendremos todo lo necesario mediante su portal oficial en Github.

Instalar LinkFinder

Es un script desarrollado en Python para detectar endpoints y sus parámetros en archivos de Javascript. Es muy usado por pentesters y personas dedicadas a la cacería de bugs (bug hunters). Así como FIN-DOM XSS, vamos a instalar a partir de la línea de comando. Este es un pre-requisito o dependencia para el funcionamiento correcto del escáner.

Escribe los siguientes comandos para instalar LinkFinder:

$ git clone https://github.com/GerbenJavado/LinkFinder.git
$ cd LinkFinder
$ python setup.py install

Por último, agregamos un par de dependencias que son unos módulos en Python para que este script funcione adecuadamente mediante pip. Par más detalles respecto a LinkFinder, puedes referirte al portal oficial en Github.

$ pip3 install -r requirements.txt

Comenzando con FIN-DOM XSS

Ya que has concluido con los pre-requisitos, puedes proceder a instalar el escáner en cuestión con el siguiente comando:

$ git clone https://github.com/dwisiswant0/findom-xss.git

Una vez concluida con la instalación, debes realizar un ajuste en la configuración. Es cambiar el valor de la variable LINKFINDER de la línea 3 con la ruta correspondiente a tu archivo principal de LinkFinder.

Para ejecutar FIN-DOM XSS sólo necesitas de ejecutar el siguiente comando:

$ ./findom-xss.sh https://target.host/about-us.html

La estructura es sencilla, el comando que llama a FIN-DOM XSS para ejecutarse es ./findom-xss-sh.

Por otro lado, está el enlace que sería nuestro target o blanco que queremos examinar en búsqueda de vulnerabilidades. Puede ser una página web cualquiera. Entonces, es posible traducir el comando más arriba a un ejemplo más concreto.

$ ./findom-xss.sh https://www.freecodecamp.org

Incluso, cuentas con la opción de agregar un parámetro más al comando para que los resultados se exporten automáticamente en un archivo de texto plano ubicado en donde prefieras.

$ ./findom-xss.sh https://www.freecodecamp.org /rutaejemplo/rutaejem/resultadosescaneo.txt

Sin embargo, aunque no coloques el tercer parámetro, el resultado de los escaneos se almacenan por defecto en la carpeta results y el nombre del archivo es target.host.txt.

Este es el resultado en pantalla que debes obtener al ejecutar exitosamente FIN-DOM XSS:

Esperamos que este tutorial os ayude a encontrar este tipo de vulnerabilidades.