Tu privacidad vibra con CLM Messenger!

Iniciado por blackdrake, Julio 05, 2018, 02:36:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Hola a todos!

En el día de hoy os traigo junto a No tienes permitido ver enlaces. Registrate o Entra a tu cuenta[/b]]@No tienes permitido ver enlaces. Registrate o Entra a tu cuenta[/url] un post sobre el análisis de la versión NO oficial de MSN Messenger para Android disponible desde hace pocos días en la Play Store.

Antes de empezar, si acabas de enterarte del lanzamiento de MSN Messenger para Android, recomendamos la siguiente lectura: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta


La idea de este post no es más que concienciar a todos de la importancia de nuestros datos y de que una mala práctica de implementación puede poner en peligro nuestra privacidad.

Sin nada más que añadir... ¡Comencemos!

A través de Twitter llegó a mí una aplicación que se hacía llamar "CLM - Chat Live Messenger" que decía reproducir aquella sensación nostalgia que nos hacía tener Messenger (MSN) de una manera muy similar a la aplicación del 2005.

No soy muy dado a instalar aplicaciones en mi dispositivo actual, sin antes echar un ojo... (Creo que todos aquí tenemos ese tipo de curiosidad con las cosas de vez en cuando ;) )

Empecé por algo sencillo: ¿Qué me proporciona Play Store?


¿Versao Beta? ¿500k descargas? Algo no me cuadraba mucho, pero cuando visité el sitio web que proporcionaba me quedó más claro...


A partir de este punto me decidí a descargarme la apk en mi ordenador y proceder a analizarla.

Una buena fuente de APKs sería Apkpure (No tienes permitido ver enlaces. Registrate o Entra a tu cuenta), así que la usaremos en este post.

En este punto una vez identificada nuestra aplicación a analizar podemos partir hacia muchas ramas, dos de ellas comunes podrían ser o centrarnos en la lógica que hay detrás de esta aplicación o simplemente observar como realiza las conexiones nuestro dispositivo con su servidor.

En este post vamos a tratar ambas, para la primera utilizaremos JADX (No tienes permitido ver enlaces. Registrate o Entra a tu cuenta) que nos echará una mano en decompilar el archivo .dex de la apk para así poder leer un poco la lógica de la misma. Y para la segunda usaremos algunas aplicaciones tanto en Android como en escritorio, que serán Packet Capture, Postman y cURL.

Pero procedamos primero a analizar la aplicación decompilando sus clases con JADX y leyendolas para ver que encontramos. Para esto me gusta iniciar la decompilación en consola e ir abriendo tranquilarmente en un editor como podría ser Sublime Text o VS Code dichas clases según se van decompilando.

Si recibimos algunos errores durante el proceso de decompilación, no les prestemos atención de momento, mientras no notemos nada extraño durante nuestra investigación, estos errores quedarán reflejados en los archivos que hayan sucedido. (Podéis echarle un ojo al README de Jadx para haceros una idea de como funciona.)


Una vez decompilé la aplicación miré los permisos que requería, no noté nada en especial que no se requeriera en una aplicación de mensajería. Hasta aquí, todo normal. Pero realmente sentía curiosidad de como era la lógica que usaba para conectarse con ese posible "servidor" que habíamos encontrado en Play Store.


Así que realicemos una búsqueda rápida del dominio "No tienes permitido ver enlaces. Registrate o Entra a tu cuenta"




Nos encontramos con lo que podrían ser los endpoint de nuestra aplicación, un directorio /app/ y dos puertos, 3000 y 4000. De momento centrémonos en /app/, donde podemos ver nuestro querido "Index of" que deja poco a la imaginación enseñandonos archivos PHP y directorios de "images", curioso de mi cliqué en "images", ni si quiera cargó, olvidé por completo la cantidad de descargas que había obtenido esa aplicación, así que preferí utilizar cURL y cargar toda la web en un fichero para más tarde hacerme una idea de la cantidad de información con la que estaba trabajando.

Código: bash
curl http://msnmessenger.xyz/app/pictures/ > clmdump.html


Tras filtrar solo el nombre de los archivos que se encontraban en ese directorio obtuve un archivo de en torno a 11MB, unos 421365 archivos de imagen a día de 7/06/18, en mi opinión, bastante crítico para tratarse solo de nombres de archivos y su extensión.
No contento con esto, decidí observar un poco más esa "TelaPrincipal" de nuestro análisis, observé que utilizaba uno de los puertos que descubrimos antes para comunicarse con la API de nuestra APK. Más tarde, en una actualización que realizó el desarrollador cambió este puerto por otra dirección IP distinta al dominio que utilizaba, debido a la alta demanda de este.
Sobre este puerto o IP, lanzaba distintas peticiones a su servidor, algunas de ellas podemos encontrarlas definidas en la lógica de la APK haciendo una búsqueda tras analizar como añadía el desarrollador su endpoint en el resto de clases.


En este punto tras ver lo tedioso que sería analizar todas las llamadas a la API y al observar que su servidor no disponía de un certificado, procedí a usar Packet Capture (No tienes permitido ver enlaces. Registrate o Entra a tu cuenta) en uno de mis dispositivos para analizar los paquetes enviados al servidor, esta aplicación muestra los paquetes a través de un proxy creado en una VPN que se crea en nuestro dispositivo, este método es muy útil ya que nos permite visualizar directamente el tráfico de paquetes sin necesidad de ser root.


Una vez llegados a este punto, observé que solo era necesario un id de usuario para obtener los mensajes que tenía en espera y que no habían sido almacenados en dispositivo, procedí a divulgarlo así como a avisar a su desarrollador para que lo arreglara lo antes posible tal y como me sugirió Marcos. Además de ello, podíamos obtener el MD5 de la contraseña de los usuarios si estos nos enviaban una petición de amistad...



Pensé que viendo el estado de la aplicación el correo que mostraba el desarrollador en Play Store no sería muy útil si quería que actuase rápidamente. Así que procedí a analizar como agregar un contacto en la aplicación.
Descubrí que se mandaba una petición de amistad y una vez aceptada, nuestra aplicación agregaba al contacto a nuestra lista de amigos con una llamada a la API teniendo en el body el "from" y el "to"; esto me hizo pensar que si mi id de usuario era tan elevada, la del administrador sería una baja. Efectivamente, la id número 2 era la del desarrollador, así que me agregué a su lista de contactos para hablarle y explicarle lo sucedido.


Os dejo una pequeña muestra de lo que pasó.



Llegados a este punto, me gustaría mencionar algunas "features" que tenía esta aplicación (aparte de sacar las contraseñas de los usuarios).


Obteniendo conversaciones a través del ID único de la conversación:


Obtención de todos los emails de los usuarios registrados a través del campo "busca":


Y la mejor, spamear a base de zumbidos, si, podrías replicar esta petición todas las veces que quisieras, provocando que el móvil de la víctima no dejase de vibrar. Para ello simplemente necesitabas ser su amigo (recordamos que podías aceptar la petición de otro) y tener su ID y Token, estos valores eran de fácil acceso a través del buscador o al acceder a una conversación con dicha persona.



Llegados a este punto, ¿Qué creéis que hizo el autor? Pues borrar la aplicación hasta ahí todo bien... Hasta que después de borrarla la subió con otro nombre apuntando a otro dominio y si, añadiendo más funcionalidades y aunque ésta ya no está disponible en la Play Store es 100% funcional si instaláis la APK.


Concretamente la nueva aplicación es la siguiente (No tienes permitido ver enlaces. Registrate o Entra a tu cuenta)


Decompilamos rápidamente el código para visualizar los cambios y el nuevo endpoint, en el propio MainActivity podemos observar las primeras llamadas.


En este caso, el nuevo dominio es: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta además, al acceder a éste nos aparece el siguiente index.


De hecho, obtenemos lo mismo si accedemos a No tienes permitido ver enlaces. Registrate o Entra a tu cuenta



A simple vista parece que la cosa mejoraba, pero realmente no era así, ya que en lugar de desactivar el Directory Listing simplemente se limitó a subir el index a esos dos directorios, por lo que, las imágenes (entre otros datos) seguían siendo accesibles.


Además, con las nuevas funcionalidades, tenemos más directorios de imágenes, a las imágenes de perfil se suman las imágenes que se envían de forma privada vía conversación y vía grupos.


Por último, pese a que se nos negase el acceso a dichos directorios, seguría siendo viable el acceso a dichas imágenes, ya que el nombre de éstas es simplemente el ID de la imagen (con autoincrement) seguido de un guión bajo y el timestamp de subida, por lo que con una fuerza bruta sencilla deberíamos ser capaces de obtenerlas.


Además, todo esto sin contar que seguían disponibles una gran cantidad de ficheros PHP a nuestra disposición, algunos de ellos subían archivos, otros realizaban consultas a la BBDD, etc... No revisamos la seguridad de éstos en la nueva aplicación, pero no creo que haya mejorado mucho.


Mencionar que algunas vulnerabilidades como un posible File Upload y un SQLi fueron descubiertas durante el análisis de la aplicación, sin embargo,  y como es lógico éstas no fueron explotadas y obviamente, fueron reportadas. Dicho objetivo no es otro que informar de la importancia de nuestra privacidad y de los riegos que corremos en instalar aplicaciones de desconocidos y/o inseguras.


Por último, si habéis llegado hasta aquí, es buen momento para escuchar este audio que la propia aplicación nos facilita: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta


Esperamos que os haya parecido interesante, y cualquier duda que tengáis no dudéis en preguntarla!

Un saludo.



 
Estupenda investigación, examen y análisis @No tienes permitido ver enlaces. Registrate o Entra a tu cuenta.

Clic y más clic, la auténtica puerta abierta a nuestra privacidad. Porque que cuela la app no lo dudo.

Gracias por compartir tu trabajo, detallado, explícito y revelador.

Saludos

Gabriela

PD: je y luego dicen que una es paranoica, como para no serlo  ;D
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.