Fallos Wi-Fi en Android 10 con WPA2 en Cisco IOS-XE y AireOS

Last updated on junio 6th, 2020 at 08:19 pm

Han pasado varios meses desde el anuncio por parte de Cisco de la nueva versión de código AireOS 8.10 el pasado 19 de octubre con soporte para WPA3. A fecha de este artículo, existen 3 versiones del código que corrigen fallos encontrados o heredados, la 8.10.105, 8.10.112 y 8.10.121.

Así mismo, el pasado 6 de octubre se ponía disposición de los clientes el código IOS-XE Gibraltar 16.12.1s para los nuevos controladores Catalyst 9800 con soporte para WPA3, y recientemente se han lanzado las versiones 17.1.1s y 17.2.1 para soportar nuevas funcionalidades que permiten emparejar las soportadas por parte de los controladores AireOS.

Por su lado, los diferentes fabricantes de sistemas operativos añadieron soporte para WPA3 hace tiempo y, en el caso que nos concierne, Google ha incorporado en su versión Android 10 el soporte de WPA3.

El problema que he encontrado ha sido al tratar de llevar a cabo pruebas configurando un SSID en modo transición WPA2-WPA3-SAE, pero más tarde he visto que dicho problema se producía también cuando se configuraba el SSID únicamente en modo WPA2-Personal o WPA2-Enterprise.

Tras buscar más en profundidad en Internet, múltiples usuarios ya detectaron fallos tras el lanzamiento de Android 10 con varios dispositivos móviles de múltiples fabricantes, y utilizando diversos puntos de accesos o routers, no solamente de Cisco.

Pruebas de Conexión

Las pruebas de conectividad se han llevado a cabo únicamente con dispositivos móviles Xiaomi con Android 10, pero según información disponible, parece ser que afecta también a dispositivos Nokia con Android 10, y no se descarta que pueda afectar a algún otro.

Se han probado distintas configuraciones de seguridad, resultando todas ellas en fallos de conexión:

  • WPA2-PSK-SHA1: con 802.11w PMF (deshabilitado/opcional/requerido) y 802.11r FT (deshabilitado, adaptativo)
  • WPA2-PSK-SHA1-SHA256: con 802.11w PMF (deshabilitado/opcional/requerido) y 802.11r FT (deshabilitado, adaptativo)
  • WPA2-8021X-SHA1: con 802.11w PMF (deshabilitado/opcional/requerido) y 802.11r FT (deshabilitado, adaptativo)
  • WPA2-8021X-SHA1-SHA256: con 802.11w PMF (deshabilitado/opcional/requerido) y 802.11r FT (deshabilitado, adaptativo)
  • WPA2-WPA3-SAE-SHA1: con 802.11w PMF (opcional/requerido) y 802.11r FT (deshabilitado) ==> Los dispositivos de pruebas no soportan SAE en el momento de crear este artículo
  • WPA2-WPA3-SAE-SHA256: con 802.11w PMF (opcional/requerido) y 802.11r FT (deshabilitado) ==> Los dispositivos de pruebas no soportan SAE en el momento de crear este artículo
  • WPA2-WPA3-SAE-SHA1-SHA256: con 802.11w PMF (opcional/requerido) y 802.11r FT (deshabilitado) ==> Los dispositivos de pruebas no soportan SAE en el momento de crear este artículo
  • WPA3-SAE: con 802.11w PMF requerido y 802.11r FT deshabilitado ==> Los dispositivos de pruebas no soportan SAE en el momento de crear este artículo

Las siguientes configuraciones de seguridad han resultado en conexiones satisfactorias por parte de los dispositivos Android 10. Sin embargo, el problema con estos métodos es que los dispositivos más antigüos, los que no soportan estas caraterísticas de seguridad, no consiguen conectar, por lo que se soluciona el problema para los más modernos, pero perdemos conectividad de otros:

  • WPA2-PSK-SHA256: con 802.11w PMF (deshabilitado/opcional/requiredo) y 802.11r FT habilitado
  • WPA2-PSK-SHA1: con 802.11w PMF (deshabilitado/opcional/requiredo) y 802.11r FT habilitado
  • WPA2-PSK-SHA1-SHA256: con 802.11w PMF (deshabilitado/opcional/requiredo) y 802.11r FT habilitado
  • WPA2-8021X-SHA1: con 802.11w PMF (deshabilitado/opcional/requiredo) y 802.11r FT habilitado
  • WPA2-8021X-SHA1-SHA256: con 802.11w PMF (deshabilitado/opcional/requiredo) y 802.11r FT habilitado
  • WPA2-PSK-SHA256: con 802.11w PMF (opcional/requerido) y 802.11r FT deshabilitado
  • WPA2-8021X-SHA256: con 802.11w PMF (opcional/requerido) y 802.11r FT deshabilitado
  • WPA3-802.1X: con 802.11w PMF requerido y 802.11r FT deshabilitado

IMPORTANTE:

La lista de dispositivos que soportan WPA3-SAE aparece en la web de Wi-Fi Alliance (https://www.wi-fi.org/product-finder-results?sort_by=default&sort_order=desc&categories=4&capabilities=16&certifications=96). En ella se ve que los dispositivos que lo soportan son todos los lanzados a finales de 2019, inicios de 2020.

Tras ejecutar varias pruebas de configuración, y llevar a cabo capturas en el aire y debugs en el AP y en el controlador, se ve que el dispositivo no transmite el paquete Association-Request, el cual inicia el proceso de conexión.

Dado que Android está basado en un sistema Linux, utiliza el servicio wpa_supplicant para conectar a las redes WLAN, por lo que conectando al dispositivo a través de la herramienta Android Debug Bridge (ADB), y depurando el log de los eventos de conexión, se ve que el suplicante del dispositivo envía ningún paquete (CTRL-EVENT-ASSOC-REJECT).

Entre las líneas del log vemos información relevante, como que el driver del adaptador inalámbrico reconoce varias  suites de cifrado, entre ellas, la utilizada por WPA2 y WPA3 (CCMP-128).

(…)
wpa_supplicant: nl80211: cipher 00-0f-ac:1
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:5
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:2
wpa_supplicant: nl80211: Supported cipher 00-40-96:254
wpa_supplicant: nl80211: Supported cipher 00-40-96:255
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:4 ==> (CCMP-128)
wpa_supplicant: nl80211: Supported cipher 00-14-72:1
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:6
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:11
wpa_supplicant: nl80211: Supported cipher 00-0f-ac:12
(…)
wlan0: Trying to associate with SSID ‘_WPA2-P-SSID’
wpa_supplicant: wlan0: Adapt 11r Enabled for BSS aa:11:22:33:44:5f
wpa_supplicant: eap_proxy: eap_proxy_notify_config
wpa_supplicant: eap_proxy: eap_proxy_allowed_method
wpa_supplicant: eap_proxy: eap_proxy_allowed_method
wpa_supplicant: wlan0: CTRL-EVENT-ASSOC-REJECT bssid=aa:11:22:33:44:5f status_code=1
(…)

Sin embargo, durante los intentos de conexión, no aparece ninguna información enviada desde el dispositivo ni en las capturas de aire (OTA), ni en el AP o el controlador. Esta es la salida mostrada en la depuración de Android:

wpa_supplicant: getCapabilitiesInternal capabilities: NONE IEEE8021X WPA-EAP WPA-PSK WPA-EAP-SUITE-B WPA-EAP-SUITE-B-192 OWE DPP FILS-SHA256 FILS-SHA384 FT-PSK
wpa_supplicant: eap_proxy: eap_proxy_notify_config
wpa_supplicant: wlan0: Trying to associate with SSID ‘_WPA2-P-SSID’
wpa_supplicant: wlan0: Adapt 11r Enabled for BSS aa:11:22:33:44:5f
QCNEJ/WlanStaInfoRelay: Received action: android.net.wifi.STATE_CHANGE
HingeNetworkManager: NETWORK_STATE_CHANGED_ACTION: mIsWifiConnected=false
DPMJ : |SERVICE| DPM received action android.net.wifi.STATE_CHANGE
CommStateMonitor: onReceive: android.net.wifi.STATE_CHANGE
QCNEJ/NativeHalConnector: -> SND notifyWlanStaStatusChanged([WlanStaInfo]: wifiSwitchState = 1 rssi = -127 ssid = DeviceNet bssid = aa:11:22:33:44:5f dnsInfo = 0.0.0.0;0.0.0.0;0.0.0.0;0.0.0.0; freqBand = _2GHz countryCode = [RatInfo]: networkType = 1 subType = 101 networkState = CONNECTING netHdl = -1 ipAddrV4 = ipAddrV6 = ifNameV4 = ifNameV6 = slotIdx = 0 isAndroidValidated = false) timeStamp = 2020-05-06 15:53:00.799
wpa_supplicant: eap_proxy: eap_proxy_notify_config
wpa_supplicant: eap_proxy: eap_proxy_allowed_method
wpa_supplicant: eap_proxy: eap_proxy_allowed_method
DPMJ : |SERVICE| sendWifiStatus – subType: 21 networkState: 0 softApState: 11 rssi=0 ssid= bssid=00:00:00:00:00:00 ipV4Addr= ifNameV4= ipAddrV6= ifNameV6=
wpa_supplicant: wlan0: CTRL-EVENT-ASSOC-REJECT bssid=aa:11:22:33:44:5f status_code=1
wpa_supplicant: eap_proxy: eap_proxy_notify_config

Para aquellos interesados en resolver de manera temporal el problema, utilizando WPA2-SHA256, estas son las configuraciones a implementar para los casos WPA2-Personal o WPA2-Enterprise:

## WPA2-PERSONAL SSID
config wlan security wpa akm psk disable
config wlan security wpa akm pmf psk enable <wlan_id>

config wlan security wpa akm psk set-key ascii <psk> <wlan_id>
config wlan security ft disable <wlan_id>  <== must be disabled when removing previous security features if adaptive is selected
!

## WPA2-ENTERPRISE SSID
config wlan security wpa akm 802.1x disable <wlan_id>
config wlan security wpa akm pmf 802.1x enable <wlan_id>
config wlan security ft disable <wlan_id>  <== must be disabled when removing previous security features if adaptive is selected

3 Junio 2020 Update

Despues de llevar a cabo varias investigaciones colaborando con los ingenieros de Cisco, el fallo parece deberse a un bug en el firmware de algunos chipsets de Qualcomm chipsets, y a que los dispositivos de Nokia/Sony/Xiaomi provocan la aparición del fallo al procesar la etiqueta Cisco IE Att 44 recientemente añadida en los paquetes beacon para facilitar el proceso de roaming en dispositivos Samsung.

Qualcomm está resolviendo el problema y los fabricantes están incorporando los parches en los nuevos Security Patch de cada modelo (Xiaomi ha desplegado el parche para el Mi10 con el April 2020 security Patch).

Desde el punto de vista de Cisco, despues de varias pruebas y sesiones de depuración con los ingenieros, se ha hecho oficial el bug así como el procedimiento:

  • Habilitar solamente SHA256 con cualquier combinación de Fast Transition (802.11r)
  • Habilitar Fast Transition (802.11r) con cualquier combinación SHA1, SHA256 o SHA1+SHA256. Este workaround está registrado en el bug CSCvu24770.

Estas son las configuraciones de seguridad que he probado.

PMF (disabled/optional/required)dot11r adaptivedot11r enableddot11r disableddot11r adaptive + overDSdot11r enabled + overDS
SHA1NoSiNoNoSi
SHA256InvalidaSiSiInvalidaSi
SHA1+SHA256NoSiNoNoSi
Xiaomi Mi8 + Cisco AP3800/4800

IMPORTANTE:

Durante los últimos días he estado colaborando en dos hilos de la comunidad de Cisco relativos a estos fallos.
Estos son los enlaces:
AireOS: https://community.cisco.com/t5/wireless-and-mobility/issues-connecting-android-10-to-cisco-me/td-p/4009289
IOS-XE: https://community.cisco.com/t5/wireless-and-mobility/wlc9k8-ap9k-android10-connectivity-issue/td-p/4027403

También estoy colaborando con el TAC y con ingenieros de la BU de Cisco, trabajando en la resolución del caso.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.