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:
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:
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 :)