7 de septiembre de 2018

ANDROID. Fallo permite a una aplicación sin privilegios obtener la MAC

El sistema operativo para móviles de Google, Android, revela información sensible sobre la configuración de la red a aplicaciones instaladas que se suscriban a ciertos mensajes internos emitidos por el sistema
La dirección MAC del móvil, el BSSID, el nombre de la red, el rango IP de la red, la IP de la puerta de enlace, los servidores DNS... Toda esta información es revelada por el sistema operativo Android (sin pedir permisos adicionales) hasta su versión 8, conteniendo ya la 9 los parches necesarios para dejar de ofrecer esta información. Lo gracioso es que Android deja de ofrecer a través de la API recomendada la MAC real del dispositivo a partir de la versión 6, pero olvidaron eliminar esta información de los mensajes internos. Es necesario también indicar que esta información es accesible de forma legal siempre que se pida un permiso especial, pero este fallo permite accedir sin este permiso.
Pasamos a explicar un poco de qué va la cosa. Lo que hemos llamado "mensajes internos" en realidad se llaman broadcasts, que no son más que mensajes que se envían a cualquiera que se haya registrado para recibir ese tipo específico de mensaje. Dicho de otra forma, una aplicación se suscribe a un tipo de mensajes, y otra aplicación (o el sistema operativo Android) envía un mensaje especificando el tipo, y este mensaje lo recibirá todo aquel que esté suscrito a ese tipo de mensajes. Por debajo, es el sistema operativo el que se encarga de enviar los mensajes. Para suscribirte, basta con realizar una llamada a la API especificando un callback (un método que procese el mensaje) y para enviarlo sólo hay que hacer otra llamada a la API. Esta última llamada es asíncrona y permite que la aplicación siga ejecutándose aunque no todos los suscritos hayan recibido el mensaje.
El caso es que Android por defecto publica un par de tipos de broadcasts que puede recibir toda aplicación que se suscriba, sin necesitar permisos adicionales. Este par de tipos de broadcasts son 'NETWORK_STATE_CHANGED_ACTION' y 'WIFI_P2P_THIS_DEVICE_CHANGED_ACTION'. Y ambos revelan información sensible sobre la red (el primero más que el segundo). Esto nos lleva a hacernos las siguientes preguntas sobre el asunto:
 ¿Por qué la información filtrada se considera una vulnerabilidad? ¿Qué se puede hacer con esta información?
Para empezar, información como el nombre de la red o el BSSID (que suele ser la MAC del punto de acceso) se puede cruzar con una base de datos como WiGLE para conocer la localización del punto de acceso y por tanto la localización del usuario. Esto no está bien porque el usuario no ha dado permiso en ningún momento para que una aplicación pueda obtener su localización. E información como el rango IP de la red, la IP de la puerta de enlace o los servidores DNS usados proporcionan información de la estructura de la red local, que puede facilitar la vida a un atacante. Es por esto que se considera una vulnerabilidad y por tanto ha recibido el identificador CVE-2018-9489. Al final, hay que recordar que la seguridad está presente en todo momento en el tratamiento automático de la información, o como comúnmente se conoce, la informática.
Más información:
·         Sensitive Data Exposure via WiFi Broadcasts in Android OS [CVE-2018-9489] https://wwws.nightwatchcybersecurity.com/2018/08/29/sensitive-data-exposure-via-wifi-broadcasts-in-android-os-cve-2018-9489/
·         Android documentation – WifiManager https://developer.android.com/reference/android/net/wifi/WifiManager
·         Service set (802.11 network) https://en.wikipedia.org/wiki/Service_set_(802.11_network)
Fuente: Hispasec