07 febrero 2013

Keep calm and run this applet

Me imagino como escenario el bunker secreto de Oracle, en algún desierto inhóspito de Nevada. 

En la mesa, muffins decorados con substancias de alto contenido calorico de forma cremosa, grandes cantidades de cafe insipido y unas carpetas azulgrana recién impresas.

El objetivo de la reunión... terminar con la golpiza mediática que reciben diariamente por su gran cantidad de vulnerabilidades.

Con el pasar del tiempo, la discusión se va poniendo cada vez mas caliente. Hay quienes sugieren incrementar el presupuesto de seguridad, otros acallar las voces de los investigadores ya sea contratándolos (el Caso Sami Koivu) o utilizando métodos menos ortodoxos. Inclusive, un desarrollador que lleva años en la empresa, sugiere la estrámbotica idea de implementar una SDL, pero rápidamente, se llama al silencio frente a las miradas atónitas de sus compañeros.

Quien parece ser el jefe, sentado en la punta de la mesa, se pone de pie, se acomoda la corbata y dice firmemente "Mañana la actualización de Java comienza con un nivel de seguridad Alto".

Puede ser que algo así haya ocurrido, o no. Lo cierto es que a partir del update 11 de Java 7, todas las instalaciones venían con ese nivel de seguridad. Y esto, traducido los que nos dedicamos a la seguridad ofensiva significa "Los applet de Java no corren ya de forma silenciosa", o por lo menos, eso creíamos....

La cuestión es que si uno ingresa a una web que está sirviendo un applet, recibirá un pop-up que le advierte sobre los peligros de ejecutar una aplicación de Java.


Y esto, para un atacante es casi una sentencia de muerte. 

Es verdad, posiblemente un estudio de alguna universidad perdida de Massachusetts, indique que el 65% de los usuarios siempre dan aceptar a la ventana y esto ayuda a tener mejor sexo y prevenir el cancer, pero el punto es que ya no es mas silencioso.

Es más... las vulnerabilidades de Java ya no tienen sentido, porque por el mismo precio (una ventana con un warning), uno puede auto-firmar un applet y cuando el usuario acepta la ventana, el applet corre por fuera de la sandbox. Win.

Pero dejénme que les diga algo, los investigadores somos inconformistas y por sobre todo, tenemos una cierta tendencia a estar en contra de la ley. Es por eso, que charlando con nuestro experto en Java (tm) Esteban decidimos que esto no podia quedar así. En definitiva, estábamos hablando de Java, la empresa que hace que mitre dude si agregar un digito mas al CVE por la cantidad de bugs anuales que reciben de Oracle.

Asi fue que Esteban se embarcó en el proyecto, y a los 15 minutos, ya estaba listo.

Bug? Característica? Bochorno?

Posiblemente todos juntos. El gran punto a tener cuenta es que el cambio de nivel de seguridad era la gran novedad de esta release. El mundo de la seguridad se focalizó por un instante en esto, y en las consecuencia que esto traería.
Lo que nadie esperó, y muchos menos nosotros, es que fuese tan simple bypassearlo.


Lo primero que notarán, es que un applet se puede inicializar de dos formas distintas. A través de un objeto serializado (variable str1) o a través de CODE (variable str2), como lo muestran las líneas 7 y 8.

Si uno sigue la forma habitual de servir un applet, a traves de CODE, notará que en la linea 41 se llama a fireAppletSSVValidation() que es la función encargada de desplegar el pop-up de advertencia y largar una horrible excepción en el caso que no se acepte ejecutar el applet.

Y ahora, es cuando el lector sagaz se pregunta "Y si seguimos el code-flow de un objeto serializado?" y es también, cuando ese mismo lector se golpea contra su escritorio en rápidos intervalos.

Porque es así, Java se olvidó completamente de llamar a fireAppletSSVValidation para un objeto serializado. Por esto mismo, es que el fix que largó Java hace unos días simplemente agrega una llamada a esta función y nada mas.

Si quieren probarlo en sus casas, pueden levantar su applet (previa serialización) de la siguiente forma:


 <embed object="object.ser" type="application/x-java-applet;version=1.6"> 


¿Es este el final de Java? No lo creo, en base a nuestra experiencia de años desarrollando exploits para CANVAS, siempre hay una forma mas de explotar oculta, sólo es cuestión de saber encontrarla.

Nico Waisman


Leer más...

06 febrero 2013

Revisando las últimas vulnerabilidades en pfsense 2.0.1


pfSense es una distribución libre, de código abierto, y personalizada de FreeBSD, adaptada para ser utilizada como firewall y router. Incluye una larga lista de funcionalidades incorporadas, y otras tantas que se pueden agregar fácilmente a través de componentes instalables.

Como su rendimiento es muy elevado, pfSense es utilizado en muchísimas organizaciones como firewall perimetral, como terminador de VPNs, y como servidor interno multipropósito (dhcp, proxy, etc.).

El filtrado de paquetes de pfSense se basa en reglas de pfctl; digamos, el "iptables" de freeBSD. El proyecto se inció en el año 2004, basándose en la distribución m0n0wall; pero si bien pfSense puede instalarse en algunos sistemas embebidos, apunta a instalaciones en computadoras personales de 32 y 64 bits.

pfSense tuvo un cambio de versión grande hace poco más de un año. La última versión estable anterior era la 1.2.3, y si bien no tenía tantas funcionalidades como la rama 2.x.x, era un producto robusto, fiable, y no le faltaba nada para reemplazar a muchos UTMs y firewalls comerciales.

La historia de las últimas versiones:
  • 1.2.3 -> 6/12/2009
  • 2.0.0 -> 17/9/2011
  • 2.0.1 -> 20/12/2011
  • 2.0.2 -> 21/12/2012

Nuevas vulnerabilidades

El 4 de enero se hicieron públicas 3 vulnerabilidades presentes en la versión 2.0.1, junto con pruebas de concepto y demo en video: http://www.exploit-db.com/exploits/23901/

Vamos a ver de qué se tratan.


1) La primera es un XSS en el archivo /usr/local/www/progress.php



En primera medida hay que comentar que este archivo no es utilizado realmente, según se puede ver al evaluar el código PHP, y según lo que se indica en :
http://www.freshbsd.org/commit/pfsense/aca65de524027e9aedfa38f83665907b41abce58

Se puede ver en la línea 24, que si el parámetro HTTP GET "e" es enviado (no importa con qué valor), entonces PHP devuelve en la línea 25 el valor del parámetro GET "UPLOAD_IDENTIFIER" que proviene del usuario, sin darle ningún tratamiento.

En la línea 28, se devuelve una variable llamada $url, la cual contiene también al parámetro "UPLOAD_IDENTIFIER", pero en este caso es sanitizado con CSRFMagic (http://csrf.htmlpurifier.org/)

De todos modos, esta debilidad no es explotable, ya que si se invoca al archivo de manera directa, la ejecución falla en la línea 21 debido a que la función "upload_progress_meter_get_info" no se encuentra definida en ninguna parte. De esta manera PHP arroja un FATAL ERROR, y el código inseguro no llega a ejecutarse.

Si cambiamos la asignación en la línea 21 de la siguiente manera:

$X = 0; // upload_progress_meter_get_info( $_GET["UPLOAD_IDENTIFIER"] );

podemos ver que el XSS sí sería explotable.




2) La segunda es un XSS en la línea 166 del archivo /usr/local/www/pkg_mgr_install.php


Nuevamente, el parámetro GET "pkg" es devuelto por PHP tal como es enviado por el navegador, sin ningún tratamiento.

Nada que agregar.


3) La tercera es una vulnerabilidad en la línea 118 del archivo /usr/local/www/system_firmware.php que permite la ejecución remota de código.



Esta vulnerabilidad es muy importante, ya que permitiría a un atacante ejecutar código con permisos totales en el sistema operativo.
El uso correcto que espera darle pfsense a este código es ejecutar:

echo SMP > /boot/kernel/pfsense_kernel.txt

pero un atacante podría enviar una petición POST con el parámetro "kerneltype" modificado, y lograr que la sentencia que se ejecuta sea otra, por ejemplo:

echo lo_que_el_atacante_desee > /boot/kernel/pfsense_kernel.txt

Vamos a modificar lo_que_el_atacante_desee por algo que nos convenga más, por ejemplo:

cualquiercosa ; echo "Me parece haber visto un lindo gatito" > /root/Evidencia_CSRF.txt ; echo SMP

Así, la sentencia completa que se ejecutaría sería:

echo cualquiercosa ; echo "Me parece haber visto un lindo gatito" > /root/Evidencia_CSRF.txt ; echo SMP > /boot/kernel/pfsense_kernel.txt

Creamos un archivo html que contenga el formulario con el valor que queremos, y que al cargarse haga la petición POST


Listamos el directorio /root del pfsense para ver qué hay:

En en navegador abrimos el archivo HTML que creamos, y luego vemos qué pasó en el directorio /root:



Como se puede ver, se creó el archivo que queríamos, en el directorio /root, y su dueño también es root. De mas está mencionar la potencialidad de explotar esta vulnerabilidad.

Estas debilidades se solucionaron en la versión 2.0.2 del producto, y en el detalle de cambio, se mencionan estos (y quizás otros?) fixes:
  • Fix a few potential XSS/CSRF vectors.
Es necesario mencionar que estas debilidades sólo podrían ser explotadas con una sesión iniciada en la consola de administración; Si no hay sesión abierta, no hay exposición.

Adicionalmente, esta última versión se basa en la versión 8.1-RELEASE-p13, que corrige algunas cuestiones de seguridad inherentes al mismo FreeBSD.

Soy un fanático de pfSense, sé que tiene algunas cuantas cosas por mejorar y refinar; personalmente me encontré con algunos casos más de validación de entrada del lado del cliente (por javascript), que no eran chequeados del lado del servidor. Pese a todo esto, creo que es un producto noble, y en muchos casos es la mejor opción.



Contribución por cortesía de Leonardo Brugues (@lbrug)



Leer más...

05 febrero 2013


En Septiembre de 2012, Alejandro Ramos publicaba un interesante post en el que exponía qué tipos de ataque se podían realizar contra una cuenta o número de cuentas de WhatsApp, en el caso de conocer la contraseña de acceso a las mismas.

Para ello, Alejandro mostraba la implementación que había realizado la aplicación WhatsApp en Android y Iphone para la generación de las contraseñas en dichos dispositivos.

Meses más tarde, el siempre genial Pablo San Emeterio publicó otro post aquí en SBD, mostrando su propia implementación de dichos ataques, incluyendo otro nuevo. Espía Whatsapp.

Estos y otros artículos, unidos al eco que se generó en las numerosas Webs más generalistas, obligó a Whatsapp a sacar una actualización de su software, seguido de una actualización en la API de autenticación y registro.

A partir de la versión 2.8.6, la contraseña se genera desde el lado del Servidor y no desde el cliente, tal y como se puede ver en la siguiente imagen:


Imagen 1.- Proceso de autenticación y registro en WhatsApp. API V2

El proceso de registro aparenta ser similar que en la versión 1 de la API, salvo que ya no se envía la dirección MAC (Iphone) en el campo ID de la petición. En ésta, el dato que se envía como parámetro, se utiliza para la negociación de una clave que vendrá como respuesta a la petición, tal y como se puede comprobar en la siguiente imagen:


Imagen 2.- Password generada desde el lado del servidor y enviada al dispositivo

El proceso de registro y autenticación, lo repetí varias veces, para comprobar que en el campo ID se enviaba siempre el mismo identificador, y se devolvía una contraseña diferente.

Una vez enviada la petición de registro, el proceso de respuesta corresponde con un fichero en formato JSON, el cual lleva una serie de campos en el que se incluye el número de teléfono y la contraseña asociada a ese número. Esta contraseña es la que se utilizará a partir de ese momento para poder autenticarse en el sistema.

De momento, Whatsapp mantenía cierta compatibilidad hacia atrás con aplicaciones antiguas, pero después de hablar con Pablo San Emeterio y realizar algunas pruebas con aplicaciones antiguas, todo parece indicar que Whatsapp está obligando a todos sus usuarios a actualizar a la versión 2 de la API.

¿Quiere decir esto que ya no se podrán realizar los ataques anteriores?

La respuesta es NO queridos lectores de SBD. Siempre nos quedará el análisis forense!

En sistemas IOS, la contraseña generada por el servidor se almacena en un fichero cifrado llamado PW.DAT, el cual se encuentra ubicado en la ruta /Library/pw.dat. 

Dejando a un lado la cuestión de por qué Whatsapp no cifra la base de datos ChatStorage.sqlite o la base de datos Contacts.sqlite en Iphone, y después de meditar largo y tendido la inquietante cuestión de que la empresa Whatsapp Inc, con más de 8 millones de dólares de inyección de capital no cuente entre sus filas con personal dedicado exclusivamente a la seguridad,  me topé con un fichero un tanto curioso y que en más de un análisis forense me ha dado unos resultados excepcionales. Una inocente base de datos llamada cache.db.

Así que analizando la base de datos cache.db, la cual se encuentra ubicada en el directorio /Library/Caches/net.whatsapp.WhatsApp/Cache.db me encuentro con que ésta, almacena datos sensibles.

Datos tan curiosos como la descarga de ficheros de audio, vídeo y fotografías que un usuario ha descargado, así como su TimeStamp.



Imagen 3.- Ficheros descargados a través de la aplicación WhatsApp

Pero los datos que más me han llamado la atención se encuentran en una tabla llamada cfurl_cache_receiver_data. Uno de estos datos es la contraseña que se genera cuando se registra la cuenta de usuario en el servicio de WhatsApp, y sí. Se almacena en claro. Estos datos se pueden visualizar en la siguiente imagen:


Imagen 4.- Fichero de respuesta JSON almacenado en claro en base de datos cache.db

Gracias a este dato, unido a que hace relativamente poco tiempo que se ha actualizado la API no oficial de Whatsapp llamada YOWSUP, se hace posible de nuevo todos los ataques anteriores, pero con la versión 2 de la API oficial.

Estos ataques son todavía posibles, debido a que aunque dos identificadores no pueden estar conectados al unísono, sí que se pueden realizar envíos de mensajes desde ubicaciones distintas mientras un usuario se encuentre autenticado en el sistema. 



Imagen 5.- Suplantación realizada a través de YOWSUP



Imagen 6.- Recepción de mensajes suplantados


Salu2 a tod@s!

MVP Enterprise Security
Leer más...

04 febrero 2013

Documental: Somos legión. La historia de los hackers

Este fin de semana pasado por casualidad he podido disfrutar del documental "Somos legión: la historia de los hackers" que se emitió en  España en uno de los canales de canal plus subtitulado (y lo volverán a emitir), aunque las malas lenguas dicen que ya está en Internet.

El vídeo repasa la historia del grupo Anonymous, desde sus orígenes más gamberros con memes y ataques desde el /b/ del foro 4chan, pasando por cómo se organizaron para coordinar ataques contra la cienciología o Paypal, para acabar hablando del grupo de hacking LulzSec y el incidente de HBGary.

Basado en entrevistas,  varios hacktivistas y detenidos de anonymous dan su opinión de los hechos. También da su visión Chris Wysopal, uno de los miembros del antiguo l0pht y famoso y reconocido hacker, creador de herramientas tan conocidas como netcat.

Personalmente el documental me ha gustado bastante y recomiendo que todo aquel que no lo haya visto, dedique su tiempo a ello. No me ha revelado ningún secreto, ya que como todos vosotros, sigo estas noticias y conozco lo ocurrido. Pero verlo en perspectiva, te hace replantearte conceptos. En cambio, algunos detalles me han llamado la atención, como que en Alemania se produjo un ataque de denegación de servicio contra Lufthansa, y en aquella ocasión el juzgado sentenció que este tipo de protesta era legitima.

Tal vez lo que más me haya chirriado es ver como han involucrado a Anonymous con el conflicto y levantamiento de Egipto, ya que si bien es cierto que pudieron sentir indignación, poco o nada tiene que ver con lo que sufrieron los egipcios aquellos días.

Mi calificación final: 8/10
Leer más...

03 febrero 2013

Enlaces de la SECmana - 160


Leer más...

02 febrero 2013

Auditorías Low Cost: La crisis manda



Tiempo atrás, ya publiqué en SbD mi visión sobre cómo desgraciadamente los recortes que están presentes en todos los sectores, han afectado también a la seguridad. 

En mi caso personal, desde que decidí ponerme a trabajar por mi cuenta, en Mayo de 2012, creando la empresa Securízame, he realizado un montón de ofertas de servicios de seguridad. Ya sea luchando por generar proyectos por mi cuenta, como a través de partners que me han subcontratado varios trabajos, he tenido que escuchar las necesidades de los clientes para dimensionar los tiempos, los recursos y colaboradores, así como el coste que tendrán los servicios solicitados.

Cada vez me encuentro con más peticiones de auditorías con un presupuesto máximo ya asignado que, claramente, hace absolutamente imposible dar un servicio de la calidad esperable. Cuando me ha tocado explicar a mi interlocutor, cliente o intermediario, que lo que se puede llevar a realizar va a ser una "faena de aliño" y no un servicio en profundidad, que garantice que la seguridad de la organización es adecuada, la respuesta es la misma siempre: "ya, lo entiendo y no me importa. Empezad a auditar y hasta donde lleguéis". Esto, al menos en mi caso, suele derivar en una lucha moral entre querer hacer las cosas correctamente, dando un servicio de calidad en la que los clientes queden plenamente satisfechos, contra la gestión de recursos de una empresa propiamente dicha, en la que el objetivo es que además los proyectos sean rentables (o que al menos no se pierda dinero en la consecución de los mismos). Luego, que además los proyectos se cobren en tiempo y forma, será otra historia dependiendo de la (in)-formalidad de según qué clientes.


¿Con qué se conforman algunos clientes?

Pues en general, desde el punto de vista de la auditoría, el cliente lo que necesita es poder tachar de su lista el hito de "Auditoría anual realizada", cumpliendo con la normativa que le sea exigida y ya está. Realmente, que la seguridad de su organización esté completamente cubierta o no, es otra guerra, aunque esto ya lo comentamos en "Cumplimiento Normativo vs Seguridad".



Para cumplir, ¿qué es lo que hace falta en una auditoría?
  • Pues como siempre, la fase de information gathering, con un escaneo de puertos abiertos, identificando los servicios gracias a la herramienta imprescindible en cualquier auditoría
  • Análisis automatizado con herramientas de búsqueda e identificación de vulnerabilidades "de sistema" (servicios con versiones de software obsoletas, configuraciones por defecto, etc,...)
  • Análisis web mediante herramientas automatizadas que permitan mapear completamente una aplicación web integrando plugins de búsqueda de vulnerabilidades web como SQLi, XSS, File Inclusion, etc,... 

Es decir, fundamentalmente un set de herramientas de botón gordo o ./, que puedan ser encadenables en su proceso,  que derive en 4 ó 5 reports a revisar y  documentar en un bonito informe, con colorines y gráficos, en el que aparezca por medio muchas veces las palabras: alto, medio y bajo. 

A partir de ahí, cualquier tipo de actividad "manual" por parte de un auditor experimentado es una utopía "para cuando haya presupuesto", puesto que el coste/hora de una máquina "haciendo cosas" es relativamente barato. Si no hay que imputar prorrateo de costes de licencias de herramientas, costes fijos de empresa, desplazamientos, etc,…  la parte manual es el análisis de los informes, comprobación de las vulnerabilidades, desechar los falsos positivos y la elaboración del documento entregable. 

En caso que las cosas se quieran hacer bien, el coste de trabajos manuales, incrementan en mayor medida el proyecto: Recorrido manual de todas y cada una de las posibilidades de interacción con el usuario, pruebas de fuerza bruta/diccionario en pantallas de autenticación, desarrollo de herramientas/scripts a medida para casos concretos, elaboración mediante ingeniería social, análisis corporativo en búsqueda de metadatos de ficheros expuestos, direcciones de correo, APT, spoofing teléfonico, y un larguísimo etcétera de pruebas que permiten poner a prueba la seguridad global de un sistema, mediante situaciones que pueden estar sucediendo a la organización ahora mismo… 

Y ojo, aun así, efectuando todas estas pruebas, no se puede garantizar que una organización jamás vaya a tener un incidente de seguridad, simplemente minimizamos el riesgo, dejando menos puntos débiles por cubrir, haciendo la función de un antibiótico de amplio espectro versus una aspirina infantil.

Afortunadamente, hay organizaciones que sí que disponen de presupuesto y de conciencia de seguridad, empresas que saben que el impacto que podría provocar no contar con las medidas de seguridad adecuadas puede ser catastrófico, y que invierten muchos miles de euros en asegurarse que las cosas están bien hechas. Sin embargo, el porcentaje de compañías con esta mentalidad y con los recursos necesarios para hacerlo posible, respecto del total, lamentablemente es demasiado bajo.


Entonces, ¿hacia dónde vamos?

Pues aunque, inicialmente, la cabeza me haga pensar en decir una grosería, visto lo visto con la situación económica de mi país, en la que cada día se cierran más y más empresas, y las que quedan tienen que hacer magia para poder subsistir, destinando menos presupuesto para proyectos de seguridad en profundidad, nos dirigimos de forma indirecta, de cabeza a una sociedad cada vez más insegura. 

La misión de los departamentos de seguridad de las organizaciones (aquellas que tienen de eso) es mantener al día lo que tienen, algunas migrando hacia soluciones libres, otras pagando únicamente el mantenimiento de las soluciones comerciales que disponen, no permitiendo la evolución natural de implantar los mecanismos de seguridad necesarios para las cada vez más ingeniosas amenazas de seguridad.

Como conclusión personal, me gustaría recalcar que de verdad lamento que actualmente las compañías tengan esta mentalidad meramente cumplidor o conformista con un análisis superficial de su seguridad, puesto que resulta frustrante sentirte capaz de hacer un trabajo de mucha mayor calidad y profesionalidad, y no poder llevarlo a cabo porque excedería, con mucho, la cantidad de jornadas que el cliente te ha permitido ofertar. 

Eso sí, luego cuando sale a la palestra algún escándalo de seguridad por una mala configuración web, nos asombramos de cómo pueden pasar esas cosas. Siempre tengo en la cache de mi memoria la frase que dijo una vez mi amigo Javier Megías: "Si no quieres monos, no pagues con cacahuetes"

Y después dicen que el pescado es caro…
Leer más...

01 febrero 2013

Libro: Metasploit para Pentesters

Metasploit para pentesters es un profundo manual técnico del famoso framework de test de intrusión. Más de 260 páginas en español repasando cada una de las fases de un ethical hacking exclusivamente con esta utilidad.

Tiene orientación puramente práctica donde se muestra mediante pruebas de concepto y ejemplos como llevar a cabo determinadas acciones con la aplicación. El nivel es bastante asequible para cualquier persona que esté empezando y entre sus páginas guarda perlas para todos aquellos que ya llevan más tiempo en este mundo. No esperéis ver comandos seguidos sin sentido, en determinados momentos incluso se llega a tocar código para solucionar problemas de sus módulos.

Uno piensa que conoce Metasploit hasta que le pega un repaso a este libro. Antes de leérmelo, hice "scroll" rápido sobre una copia que me enseño el Maligno, me tocó pararme varias veces para ver algunos trucos. No resistí, finalmente me pase por Bronxtoles y pedí mi propia copia.

Está dividido en ocho capítulos:
  • Conceptos básicos
  • Preliminares
  • El arte de la intrusión
  • Meterpreter y Post-Explotation
  • Otras msf tools
  • Ingeniería social con SET
  • Más allá con Fast-Track
  • Metasploit en dispositivos móviles.
Lo ha escrito Pablo González, uno de los editores del popular blog Flu-Project, lo que ya es una garantía para todo aquel que no lo conozca. Repasad sus artículos en la página de la judía y os daréis cuenta de que Pablo tiene habilidades ninjas especiales.

El libro está a la venta en la tienda online de Informática64.
Leer más...