Hace unas semanas se anunciaba la versión 3.3.2 de Wordpress, que incluía entre otras cosas, 6 correcciones de seguridad, referentes a varias vulnerabilidades remotas encontradas, y de varios tipos. Ayer en el twitter de Daboblog nos recomendaba parchear nuestros blogs a su última versión debido a estas vulnerabilidades: Tres de ellas (CVE-2012-2399, CVE-2012-2400 y CVE-2012-2401) fueron detectadas en librerías externas que utiliza Wordpress para subir ficheros en la sección de Multimedia, mediante Plupload, SWFUpload (librería anterior) y SWFObject (esta última se encuentra incluída dentro de muchos themes, y se utiliza para incrustar contenido Flash).
Para estas tres vulnerabilidades, podemos obtener detalles más técnicos referentes a ellas, simplemente revisando los diff de archivos entre ramas de versiones: omo ejemplo, en el caso de la librería SWFObject (utilizada no sólo en Wordpress), el fallo radica en que no se codificaba previamente el valor de MMredirectURL, O.location, variable Flash utilizada en su instanciación. En la actualización del fichero Javascript, se realiza una codificación de la URL mediante la función encodeURI: De las otras 3 vulnerabilidades (CVE-2012-2402, CVE-2012-2403 y CVE-2012-2404) se dispone de más información, tratándose de Cross-Site Scriptings y una evasión limitada de restricciones.
CVE-2012-2402 - Se actualiza el fichero plugins.php, habiéndose descubierto la posibilidad de desactivar plugins por parte de usuarios administradores, para toda una red creada de blogs bajo una misma instalación, aun teniendo dicha restricción activada. Esta vulnerabilidad se ha categorizado como baja. A continuación podremos ver los cambios realizados, referentes a una comprobación utilizada para verificar que no se desactivaban plugins que ya estaban desactivados: CVE-2012-2403 - Se actualiza el fichero wp-includes/formatting.php, cuya función vulnerable era aquella que intentaba habilitar enlaces clicables (make_clickable) dentro de atributos, permitiendo la realización de ataques Cross-Site Scripting. Dicha función se ha re-escrito completamente: CVE-2012-2404 - Se actualiza el fichero wp-comments-post.php, que incluía una redirección a una variable $location de forma insegura, mediante una función propia de wordpress wp_redirect(). Como actualización, se sustituye el uso de dicha función por otra, llamada wp_safe_redirect(), que incluye comprobaciones y realiza la redirección local de forma más segura. Si bien no se trata de vulnerabilidades muy críticas, debido a su posible explotación remota se recomienda actualizar Wordpress a su versión 3.3.2 ya disponible.
El pasado marzo durante la RootedCon, presenté un prototipo de troyano que involucraba el uso fraudulento del Dni Electrónico.
EL concepto es simple: El DNIe como tal es prácticamente inviolable (acceso a las claves privadas, etc) pero en el momento que tiene que trabajar dentro de un sistema operativo, se vuelve vulnerable
Como expliqué en el turno de preguntas, mi intención era hacer algo basado enteramente en el API de windows, sin emplear hooking ni módulos en el Kernel.
Hoy libero el prototipo del troyano y explicaré su funcionamiento. Hay que destacar que el comportamiento es 'de troyano' pero no efectúa nada dañino. El objetivo es conectarse a la web de la DGT y extraer el saldo de puntos del poseedor del DNI de forma automatizada.
El primer paso es robar el PIN. Para este propósito el troyano utiliza dos métodos:
Keylogging: Es el método mas obvio, el DNIe como tal no aporta ningún tipo de seguridad frente a este tipo de ataques ya que 'caen' en la capa del sistema operativo. Tampoco el software que acompaña al DNIe ofrece ningún tipo de protección.
Obviamente no vale cualquier keylogger, hay que afinar el tiro y saber exactamente cuando logear.
Para ello tenemos que localizar exactamente cuando aparece la ventana que solicita el PIN del DNIe y logear las pulsaciones mientras está presente.
Windows tiene la función perfecta para ello: FindWindow(). Esta función permite localizar cualquier ventana buscándola por su 'caption'. Para averiguar cual es el caption de la ventana del DNIe, podemos usar un programa como WinSpy++ que permite obtener los datos de cualquier ventana.
Por lo tanto, el troyano lo que hace es quedar a la espera hasta que aparece esa ventana y, cuando aparece, usa la función GetAsyncKeyState() para obtener las pulsaciones del teclado.
Hay que señalar que falta por pulir bastante esta funcionalidad del troyano, ya que en estos momentos solo captura combinaciones tecla / número y no combinaciones del tipo @#$%, tampoco discrimina mayúsculas / minúsculas. Como prueba de concepto es suficiente, en sucesivas actualizaciones mejoraré este método.
IntraPhishing: Este método es mucho mas 'divertido' y se basa en un hecho que todo usuario del DNIe conoce bien: la cantidad de veces que sale la ventana de solicitud del PIN. Es muy frecuente y muy normal verla aparecer una y otra vez, lo que me lleva a plantearme la idea de: ¿Y si le envío al usuario una ventana idéntica de solicitud de PIN, pero controlada por mi? El resultado, probablemente, sea que el usuario meta su PIN y nos lo entregue en bandeja. Muy al estilo del Phishing tradicional cuando una web clona a otra.
Una vez el usuario introduzca el PIN, estará bajo nuestro control y podemos proceder a la siguiente fase.
Para llegar a ella vamos a usar Internet Explorer y su objeto OLE InternetExplorer.Application
Para el que no lo sepa, Internet Explorer (así como otros muchos programas) ponen a disposición del desarrollador lo que se denominan 'Objetos OLE/COM' que permiten automatizar tareas de forma desatendida. En el caso de Explorer, queremos que navegue hacia la web de la DGT.
Antes de eso, y dado que va a haber actividad en la pantalla del PC, es necesario que el troyano 'espere' a que el PC esté inactivo para realizar la navegación (van a verse las ventanas de solicitud del PIN) para ello usaremos la función GetLastInputInfo() que permite determinar el tiempo que un PC ha estado inactivo. En el caso del troyano, viene configurado para 6 segundos, obviamente en un escenario real, sería necesario una ventana de tiempo mayor.
Una vez el PC esté desatendido, el troyano instancia un Internet Explorer cuya ventana está oculta, y navega hacia la web de la DGT.
Problema: Vamos a necesitar rellenar varias veces la ventana de solicitud del PIN.
Solución: Lanzamos un hilo que constantemente esté buscando la ventana del DNIe y cuando aparezca, enviamos el PIN (que ya tenemos) haciendo uso de la función SendInput() que permite simular las pulsaciones del teclado.
Una vez completado el proceso, el troyano 'parsea' la respuesta de la web de la DGT y obtiene el saldo de puntos.
Aquí podéis ver un vídeo del troyano en acción con el modo IntraPhishing
miércoles, 16 de mayo de 2012 DNI-E Trojan KIT 1.0 El pasado marzo durante la RootedCon, presenté un prototipo de troyano que involucraba el uso fraudulento del Dni Electrónico.
EL concepto es simple: El DNIe como tal es prácticamente inviolable (acceso a las claves privadas, etc) pero en el momento que tiene que trabajar dentro de un sistema operativo, se vuelve vulnerable
Como expliqué en el turno de preguntas, mi intención era hacer algo basado enteramente en el API de windows, sin emplear hooking ni módulos en el Kernel.
Hoy libero el prototipo del troyano y explicaré su funcionamiento. Hay que destacar que el comportamiento es 'de troyano' pero no efectúa nada dañino. El objetivo es conectarse a la web de la DGT y extraer el saldo de puntos del poseedor del DNI de forma automatizada.
El primer paso es robar el PIN. Para este propósito el troyano utiliza dos métodos:
Keylogging: Es el método mas obvio, el DNIe como tal no aporta ningún tipo de seguridad frente a este tipo de ataques ya que 'caen' en la capa del sistema operativo. Tampoco el software que acompaña al DNIe ofrece ningún tipo de protección.
Obviamente no vale cualquier keylogger, hay que afinar el tiro y saber exactamente cuando logear.
Para ello tenemos que localizar exactamente cuando aparece la ventana que solicita el PIN del DNIe y logear las pulsaciones mientras está presente.
Windows tiene la función perfecta para ello: FindWindow(). Esta función permite localizar cualquier ventana buscándola por su 'caption'. Para averiguar cual es el caption de la ventana del DNIe, podemos usar un programa como WinSpy++ que permite obtener los datos de cualquier ventana.
Por lo tanto, el troyano lo que hace es quedar a la espera hasta que aparece esa ventana y, cuando aparece, usa la función GetAsyncKeyState() para obtener las pulsaciones del teclado.
Hay que señalar que falta por pulir bastante esta funcionalidad del troyano, ya que en estos momentos solo captura combinaciones tecla / número y no combinaciones del tipo @#$%, tampoco discrimina mayúsculas / minúsculas. Como prueba de concepto es suficiente, en sucesivas actualizaciones mejoraré este método.
IntraPhishing: Este método es mucho mas 'divertido' y se basa en un hecho que todo usuario del DNIe conoce bien: la cantidad de veces que sale la ventana de solicitud del PIN. Es muy frecuente y muy normal verla aparecer una y otra vez, lo que me lleva a plantearme la idea de: ¿Y si le envío al usuario una ventana idéntica de solicitud de PIN, pero controlada por mi? El resultado, probablemente, sea que el usuario meta su PIN y nos lo entregue en bandeja. Muy al estilo del Phishing tradicional cuando una web clona a otra.
Fake Una vez el usuario introduzca el PIN, estará bajo nuestro control y podemos proceder a la siguiente fase.
Para llegar a ella vamos a usar Internet Explorer y su objeto OLE InternetExplorer.Application
Para el que no lo sepa, Internet Explorer (así como otros muchos programas) ponen a disposición del desarrollador lo que se denominan 'Objetos OLE/COM' que permiten automatizar tareas de forma desatendida. En el caso de Explorer, queremos que navegue hacia la web de la DGT.
Antes de eso, y dado que va a haber actividad en la pantalla del PC, es necesario que el troyano 'espere' a que el PC esté inactivo para realizar la navegación (van a verse las ventanas de solicitud del PIN) para ello usaremos la función GetLastInputInfo() que permite determinar el tiempo que un PC ha estado inactivo. En el caso del troyano, viene configurado para 6 segundos, obviamente en un escenario real, sería necesario una ventana de tiempo mayor.
Una vez el PC esté desatendido, el troyano instancia un Internet Explorer cuya ventana está oculta, y navega hacia la web de la DGT.
Problema: Vamos a necesitar rellenar varias veces la ventana de solicitud del PIN.
Solución: Lanzamos un hilo que constantemente esté buscando la ventana del DNIe y cuando aparezca, enviamos el PIN (que ya tenemos) haciendo uso de la función SendInput() que permite simular las pulsaciones del teclado.
Una vez completado el proceso, el troyano 'parsea' la respuesta de la web de la DGT y obtiene el saldo de puntos.
Aquí podéis ver un vídeo del troyano en acción con el modo IntraPhishing
Cabe destacar que si bien este 'kit' está adaptado al DNIe, usando estas mismas técnicas se podría atacar cualquier otra SmartCard.
En este ejemplo tan solo se ha obtenido una información más o menos confidencial pero se podría adaptar para, por ejemplo, obtener la declaración de la renta o modificar los datos fiscales
Nueva versión de Opera 11.64 soluciona vulnerabilidad de ejecución de código
El equipo de Opera Software acaba de lanzar la versión 10.64 de su navegador homónimo. Entre otras mejoras, se soluciona una vulnerabilidad de ejecución de código calificada por el fabricante como crítica.
La vulnerabilidad podría provocar una denegación de servicio o incluso la ejecución de código arbitrario de manera remota. Está causada por la introducción de URLs especialmente construidas que podrían causar que el navegador reservara una cantidad de memoria incorrecta para almacenarlas y, en un intento por guardar la URL, se sobrescribieran zonas de memoria no relacionadas con Opera con instrucciones controladas por el atacante. Además, esta actualización también soluciona cierto comportamiento de versiones anteriores, que provocaba que al utilizar "On-Demand-Plugins" ciertos sitios seguros dejaran de serlo, y sobre el que no se ha extendido la información. La actualización está disponible para usuarios de Windows, Linux y Mac. Para los dos primeros, el salto es de dos versiones, ya que la actualización 11.63 fue sólo lanzada para el sistema operativo de Apple.
Se han publicado seis vulnerabilidades que afectan a SAP NetWeaver 7 y que podrían permitir a un atacante remoto provocar condiciones de denegación de servicio y ejecutar código arbitrario
NetWeaver es una plataforma tecnológica compuesta por diferentes productos SAP cuyos objetivos son lograr una mejor integración con las aplicaciones, utilizar estándares para asegurar la interoperabilidad, aportar flexibilidad, y reducir costes. SAP NetWeaver es ampliamente utilizado en el mundo empresarial.
Las vulnerabilidades residen en diferentes desbordamientos de búfer en el servicio "Dispatcher" (que forma parte de SAP Netweaver Application Server ABAP), en el tratamiento de paquetes SAP Diag específicamente creados. Un atacante remoto podría explotar estos problemas para lograr la ejecución de código arbitrario.
Siguiendo la línea de algunos posts sobre la aplicación WhatsApp (que de seguro todos conocemos), en este post me gustaría presentaros una herramienta para facilitar la extracción e interpretación de los datos generados por esta aplicación.
Si bien es cierto que la aplicación cifra los logs de los mensajes cuando realiza el backup en la sdcard, todos estos registros así como las conversaciones actuales, agenda de contactos y demás ficheros propios de la aplicación, se encuentran sin cifrar en la memoria interna del dispositivo, de tal forma, que accediendo a la memoria del dispositivo podremos extraer dichos ficheros para analizarlos en otro entorno.
La aplicación que me gustaría presentaros está escrita en Python (DJango) y aunque es una versión Beta y espero poder seguir agregándole más funcionalidades, nos facilitará bastante la tarea a la hora de interpretar la información basándose en los registros de los siguientes ficheros:
wa.db (agenda de contactos) msgstore.db (conversaciones actuales) whatsapp-YYYY-MM-DD.log.gz (registro de conversaciones) msgstore-YYYY-MM-DD.X.db.crypt (registro de conversaciones cifrado)
Listado de archivos de interés Nota: Como registro de mensajes solo se usará msgstore.db, pero podemos reemplazar este archivo por cualquiera de los registros de mensajes guardados. Para descargar la aplicación, podemos hacerlo desde la URL del proyecto descargando el fichero zip/tgz o clonando el repositorio:
Hecho esto, podemos iniciar la aplicación y acceder al navegador accediendo al puerto correspondiente, que por defecto es el 8000: Ejecutando el servidor DJango Hecho esto, si accedemos a la URL especificada podremos ver como página principal un breve resumen de la actividad: Si por el contrario, solo tenemos acceso a los ficheros cifrados, podemos usar el script "tools/decrypt.py" (gracias al post de Alejandro Ramos): Volcando y descifrando un registro de mensajes desde la sdcard. Ahora volvemos a acceder a la aplicación y navegar por todos sus apartados para revisar el registro descifrado: En la parte de "Contacts" (como en el resto de la aplicación) se muestran tanto los contactos con WhatsApp como los que no. Cuando un contacto tiene WhatsApp instalado en su dispositivo, aparecerá con el icono (como se muestra) al lado del nombre, el número de mensajes intercambiados y un enlace en su número de teléfono para mostrar la conversación.
En el menú superior de la aplicación, aparecen secciones para ver la lista de contactos, los chats mantenidos, mostrar los mensajes con coordenadas GPS, mensajes con contenido multimedia, etc. Cuando un mensaje posee algún tipo de adjunto (imagen, contacto, coordenadas, etc.) a demás de mostrar el thumbnail del contenido, nos aparecerá un icono al lado del nombre del contacto, con la URL al contenido original, (en el caso de las coordenadas GPS, será un enlace a Google Maps). Y para sorpresa (o no) de muchos, esto es lo que pasa cuando accedemos a la URL original: Y finalizando, dos capturas para ver cómo se muestra el listado de chat y las conversaciones: Como dije al principio del post, se trata de una beta y se le pueden agregar muchas más opciones que espero poder agregar. No obstante, toda contribución de ideas (se incorporarán al TODO) , manual o mejora (serán agregadas lo antes posible) es bienvenida.