27 de septiembre de 2009

Adobe getIcon Universal Exploiter

En las visitas habituales a milw0rm hay días aburridos en que apenas surgen exploits nuevos, otros en los que los que aparecen apenas están documentados y no acaban de describir que vulnerabilidad explotan (y como) y finalmente están los días normales es que aparecen programas de uso común para Windows y Linux, que son las plataformas con las que los usuarios trasteamos más. En uno de esos días de este mes de Septiembre surgió el exploit para Adobe 9.0 y 8.1.2 titulado “getIcon Universal Exploiter” el cual tenía una particularidad, estaba perfectamente documentado y era bastante fácil de explotar (así como de encontrar clientes explotables xd).

La vulnerabilidad, conocida por Adobe desde Julio del año pasado aprovecha el típico desbordamiento de buffer en la pila al no controlar los argumentos que se pasan al método “getIcon” (de ahí el original nombre). En los enlaces publicados en milw0rm hay amplia información de la vulnerabilidad, código ensamblador que muestra las llamadas no controladas, etc. Etc. A grandes rasgos el exploit desarrollado en Python aplica la conocida técnica de “Heap Spraying” para inyectar el payload que en este caso será una Shell remota, para ello formaremos un archivo .pdf que incluya una librería desarrollada en C y que luego incluiremos en el pdf mediante el exploit desarrollado en python. Me explico paso a paso:

1) En el archivo evil_payload.c se genera un socket que abrirá la conexión a la IP y puerto que indiquemos (aquí normalmente pondremos nuestra IP publica y un puerto que nos asegure no bloquee el firewall, digamos, el 80), además mostrará un error que mitigue las sospechas al usuario que abre el pdf. A partir de este código en C debemos generar la librería a inyectar en el pdf, si disponéis del Visual C++ 2008 Express Edition (gratuito) se puede compilar en un periquete:


Con la opción /LD especificamos que se genere una librería de enlace dinámico (.DLL, para más info sobre compilaciones acudir aquí:

2) Una vez que tenemos la librería toca darle paso al Script de Python, si le echamos un ojo vemos que lo único que hace es manipular el .pdf que le digamos inyectándole la librería, incluir un payload en javascript que genere la excepción y poco más:


Ejecutamos el script y creamos el .pdf especialmente modificado:

3) Llegado este punto ya tenemos nuestro documento .pdf especialmente manipulado para que las versiones no actualizadas de Adobe hagan “crash”. Probablemente al hacer este último paso os haya saltado el antivirus, y es que ya han pasado 3 semanas desde que se publicó el exploit y son varios los que lo detectan, en concreto 14 según virustotal*:

Pero claro, esto es relativo. Una idea sencilla para utilizarlo es compartir el archivo con el Emule bajo un nombre sugerente (de ahí el que yo he escogido) y esperar que la gente se lo vaya bajando, no es sofisticado pero funciona. De todas formas todavía no tendremos nada, si os fijáis nos falta algo, si queremos que se nos abra una Shell remota (para eso pusimos nuestra IP y puerto), ¿alguien tendrá que estar escuchando, verdad? Por suerte esto es facilísimo con netcat:

Recordar que deberéis tener configurado el NAT en vuestro router para que la conexión pueda abrirse, después solo queda esperar que “piquen” y se nos abrirá una bonita Shell. Fácil a la par que peligroso, ¿verdad?

Espero que os haya gustado, un saludo!

Nota*: He ofuscado el código de la librería, he eliminado los comentarios, renombrado variables, etc. pero solo he conseguido que un par de antivirus más no lo detecten hasta lograra una tasa de 12/41 :-( Se aceptan sugerencias :)

4 comentarios:

Homo libris dijo...

¡Muy, muy chulo!

Me dan ganas de ponerme a ello... jajajaja. ¡A ver si así recupero la actividad perdida!

Saludos.

(Lobosoft)

GigA ~~ dijo...

No es actividad perdida Myth, llámala actividad transformada.

¡Erudito!

eduardo abril dijo...

Hola Giga,

Acaban de sacar esto también:

http://pentestit.com/2009/10/01/pdfinjector-inject-javascript-pdfs/

Muy interesante el post ...

Saludos,
Eduardo.

GigA ~~ dijo...

Si, también lo conocía :) aunque me quedé en la versión 0.7 y ya veo que ha salido la 0.9 (que solo quita comentarios respecto a la 0.8 ¿?).

Probé a utilizarlo con este mismo exploit y el resultado es exactamente el mismo, a nivel de antivirus también :)

Salu2!