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