Prey Anti Robos para Android no verifica la validez de los certificados SSL del servidor

1. Información del reporte

Título: Prey Anti Robos para Android no verifica la validez de los certificados SSL del servidor
Reporte ID: STIC-2014-0731
Reporte URL: http://www.fundacionsadosky.org.ar/publicaciones-2
Fecha de publicación: 2014-11-11
Fecha de última actualización: 2014-11-11
Fabricantes contactados: Fork Ltd. (desarrollador de Prey Anti Robos)
Modo de publicación: Coordinado

2. Información de vulnerabilidades

Clase: Incorrecta validación de la cadena de confianza de un certificado [CWE-296]
Impacto: Denegación de servicio, Eludir mecanismos de seguridad
Remotamente explotable: No
Localmente explotable: No
Identificador CVE: CVE-PENDING

3. Descripción de vulnerabilidad

Prey es una aplicación antirobo gratuita que permite a usuarios de teléfonos inteligentes rastrear y localizar sus dispositivos móviles en caso que hayan sido perdidos o robados. Provee una forma de obtener remotamente la ubicación geográfica precisa de un dispositivo, bloquearlo, sacar fotos, reproducir sonidos de alarma y mostrar mensajes en la pantalla. Según estadísticas del mercado de aplicaciones Play de Google, a Noviembre del 2014 tiene entre 1 y 5 millones de instalaciones mundialmente [1].

La comunicación entre la aplicación Prey corriendo en el dispositivo Android y el servidor web es realizada vía HTTPS, un mecanismo de transporte que busca garantizar confidencialidad e integridad de los datos mediante cifrado. Sin embargo, el primero no valida los certificados SSL presentados por el segundo al iniciar una conexión. Como resultado, es posible subvertir el propósito de la aplicación y evitar que funcione como mecanismo anti-robo con bloqueo y rastreo de dispositivos. Para hacerlo, un atacante simplemente necesita realizar un ataque de intermediación de tráfico (Man-in-the-Middle) entre la comunicación de la aplicación corriendo en dispositivo (presuntamente robado y bloqueado con una contraseña del usuario) y el servidor, presentarle un certificado falso y enviarle un pedido de lock command (comando de bloqueo) con una contraseña que el atacante elija. Luego el atacante podría desbloquear el dispositivo manualmente con la contraseña que especificó. Otros tipos de ataques son posibles dado que toda la comunicación entre el dispositivo y el servidor puede ser inspeccionada y modificada por un atacante.

4. Paquetes vulnerables

5. Información y soluciones del fabricante

El fabricante reconoció el problema y se comprometió a publicar una actualización que lo solucione el 11 de Noviembre del 2014.

Mientras tanto los usuarios que quieran protegerse pueden desinstalar la aplicación Prey Anti Robos de su dispositivo Android abriendo el panel de "Configuración|Administrador de aplicaciones", seleccionar "Prey" y tocar "Desinstalar". Los pasos para desinstalar pueden variar dependiendo de la version de Android que tenga el dispositivo.

6. Créditos

Las vulnerabilidades fueron descubiertas e investigadas por Joaquín Manuel Rinaudo. La publicación de este reporte fue coordinada por Programa de Seguridad en TIC.

7. Descripción técnica

La vulnerabilidad se encuentra en la clase com.prey.net.HttpUtils que instancia un HttpClient para conectarse al servidor de Prey. El HttpClient utiliza un SSLSocketFactory a medida llamado EasySSLSocketFactory para obtener los sockets usados para comunicarse al servidor. Esta clase también llama al método setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) para aceptar como válido cualquier nombre de host presentado en el certificado[2]. Aún más, como EasySSLSocketFactory implementa un X509TrustManager con métodos verificadores vacíos [3], cualquier certificado presentado por el servidor será considerado válido. Esto permite a un atacante montar ataques de MITM (Hombre en el Medio) para impersonar al servidor de Prey con certificados SSL fraguados.

Para desbloquear un dispositivo bloqueado por un usuario, un atacante puede simplemente falsificar un comando de bloqueo del dispositivo especificando una nueva contraseña y así obtener control del dispositivo. Esto podría hacerse modificando la respuesta del servidor al pedido comandos a https://solid.preyproject.com/api/v2/devices/[DEVICE_ID].json a lo siguiente:

[+ full code]

La aplicación intenta obtener nuevos comandos del servidor registrándose para escuchar varios eventos de Android como cambios de conectividad, nivel de la batería, entrar en modo avión, prendido y apagado del dispositivo.

8. Cronología del reporte

9. Referencias

[1] https://play.google.com/store/apps/details?id=com.prey
[2] https://github.com/prey/prey-android-client/blob/master/src/com/prey/net/HttpUtils.java
[3] https://github.com/prey/prey-android-client/blob/master/src/com/prey/net/EasySSLSocketFactory.java

10. Acerca Fundación Dr. Manuel Sadosky

La Fundación Dr. Manuel Sadosky es una institución público privada cuyo objetivo es favorecer la articulación entre el sistema científico – tecnológico y la estructura productiva en todo lo referido a la temática de las Tecnologías de la Información y la Comunicación (TIC). Creada a través del Decreto Nro. 678/09 del Poder Ejecutivo Nacional, la Fundación es presidida por el ministro de Ciencia, Tecnología e Innovación Productiva. Sus vicepresidentes son los presidentes de las cámaras más importantes del sector TIC: CESSI (Cámara de Empresas de Software y Servicios Informáticos) y CICOMRA (Cámara de Informática y Comunicaciones de la República Argentina). Para más información visitar: http://www.fundacionsadosky.org.ar

11. Derechos de autor

El contenido de este reporte tiene copyright (c) 2014 Fundación Sadosky y se publica bajo la licencia Creative Commons Attribution Non-Commercial Share-Alike 4.0: http://creativecommons.org/licenses/by-nc-sa/4.0/