Probablemente muchos conocen la aplicación (app) SOSAFE (https://www.sosafeapp.com) y quizás muchos la ocupan y la tienen instalada en sus smartphones y esto se debe a la gran cobertura que tuvo el lanzamiento de la app y también a las muchas polémicas que han surgido en torno al uso y objetivo de la misma.
Figura 1: Logo de SOSAFE
Sin embargo, para los que no la conocen es la aplicación más descargada en el país, con más de 5 millones de usuarios (casi un tercio de todos los chilenos), el desarrollo y lanzamiento de esta app se enmarcó en el programa Cascos Históricos y Centros Cívicos, financiado por la Subsecretaría de Prevención del Delito del gobierno de Chile.
¿Para que sirve?, principalmente para Reportar, alguna situación de riesgo que necesite ser informada, seleccionando el tipo de incidente, se puede describir la situación, sacar una foto y la municipalidad y los vecinos más cercanos serán notificados. Tiene un Botón de Pánico y ante una emergencia, presionando el botón la municipalidad será notificada inmediatamente y se pondrán en contacto.
Vale la pena mencionar que el nivel de seguridad en las aplicaciones móviles es muy similar al que tenían las aplicaciones web hace 15 años atrás, con esto quiero decir que no hay mucha cultura respecto aplicar buenas prácticas de seguridad en la codificación y configuración de las app, la mayoría tienen vulnerabilidades, pero la gran diferencia es la criticidad de la vulnerabilidad, hay desde las informativas, donde muchas veces no es necesario hacer nada, hasta las críticas, que pueden exponer información confidencial o privada y/o cambiar la configuración del smartphone, de hecho se han vuelto tan populares, que incluso OWASP tiene su propio ranking de las vulnerabilidades top 10 de móviles (https://www.owasp.org/index.php/Mobile_Top_10_2016-Top_10).
Figura 2: Top 10 Owasp Mobile
Por estas razones fue que en el Centro de Excelencia (CoE por sus siglas en ingles) de Dreamlab Technologies (https://dreamlab.net) decidimos analizar la app para conocer su nivel de seguridad, ¿qué encontramos? Lo detallamos a continuación.
¿Es Segura?
Lamentablemente no, todas las vulnerabilidades que a continuación exponemos fueron reportadas responsable y confidencialmente hace más de 90 días al Equipo del Centro de Respuestas a Incidentes de Seguridad CSIRT (por sus siglas en ingles) del Ministerio del Interior (https://www.csirt.gob.cl).
Se detectaron varias vulnerabilidades críticas en la app, pero nos concentramos en la que expone información de los usuarios, que incluye datos personales privados, como nombre, apellido, correo electrónico y ubicación exacta de la persona a través del GPS.
Detalle de la Vulnerabilidad
Haciendo análisis del tráfico de la app se pudo detectar que la comunicación se realiza en texto claro mediante el protocolo HTTP y no HTTPS (cifrado), sin embargo, algunos de los datos si van cifrados en la capa aplicativa, pero se puede conocer la llave como se describe en el siguiente párrafo. http://api.sosafe.cl.
En el ingreso a la app en el login o ingreso, debido a que los datos se envían sin cifrar se puede observar que el ingreso se realiza utilizando como único factor de autenticación la combinación de correo electrónico + identificador generado por la app al endpoint (smartphone del usuario). Esto permite a una persona mal intencionada posicionada entre la app y el usuario como “hombre en el medio o MiTM” obtener dichos datos e impersonar al usuario. La comunicación posterior al ingreso utiliza el mismo canal sin cifrar, algunos mensajes incluyen en el cuerpo de la respuesta datos codificados en base64 con contenido encriptado con el algoritmo AES, modo CBC. Pero, la llave se deriva de constantes encontradas en el código y de el identificador del aplicativo y es fácil de encontrar por un atacante, debido a que el código es accesible ya que la app no cuenta con ningún tipo de protección contra ejecución de usuario con privilegios de administrador o root o decompilacion.
Figura 2: Parte del código de la app donde se encuentra la llave
La app obtiene los reportes desde el servidor mediante un json (acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos) codificado, pero utilizando las llaves para decodificarlo o mediante un análisis dinámico en operación adjuntándose las funciones decrypt2 y encrypt de la clase cl.sosafe.panicbuttonandroid.app.bl.util.Mcrypt se pueden obtener los datos en claro, los cuales incluyen datos personales privados como nombres, email y ubicación exacta, aunque el reporte haya sido anónimo.
Figura 4: Json decodificado en claro con datos personales privados
Esta semana descubrimos que, gracias a la vulnerabilidad, también se puede impersonar a los usuarios y cambiar de manera no autorizada los datos del usuario (nombre, dirección, email, etc.) y escribir un reporte/incidente a nombre de otro usuario. A continuación, se demuestra en la foto, donde se puede observar una prueba que realizamos desde Suiza en mi perfil de SOSAFE (Yo no escribí ese reporte)
Figura 5: Reporte realizado de manera no autorizada
Al día de hoy los permisos excesivos y vulnerabilidades se mantienen en la app, por lo tanto, se da la paradoja de que la app más popular de chile y que se ha convertido en un gran servicio municipal y que al día de hoy es la batiseñal digital contra la delincuencia, es insegura y expone datos personales de sus usuarios incumpliendo lo dispuesto en la ley 19628 sobre protección y almacenamiento de datos personales.
_Gabriel Bergel
CSO
Dreamlab Technologies