
Ce dépôt décrit une vulnérabilité affectant le processus d'appairage basé sur le code QR des appareils IoT eWeLink (CVE-2020-12702).
L'accès Web sans restriction à la clé de chiffrement privée de l'appareil en mode d'appairage par code QR dans l'application mobile eWeLink (jusqu'à la version 4.9.2 sur Android et jusqu'à la version 4.9.1 sur iOS) permet à un attaquant physiquement proche d'écouter les identifiants Wi-Fi et d'autres informations sensibles en surveillant le spectre Wi-Fi pendant le processus d'appairage.
Du point de vue de l'utilisateur, le processus d'appairage basé sur le code QR entre l'appareil IoT et le Wi-Fi de l'utilisateur, via l'application eWeLink, se déroule comme suit :
L'étiquette du code QR fournie avec un appareil compatible (un Sonoff Micro d'ITEAD) encode l'URL suivante https://api.coolkit.cn:8080/add-ap-device?brand=ewelink\&ssid=ITEAD-device_id, où :
Lors de la première étape, l'application se connecte au point de terminaison eu-api.coolkit.cc:8080/api/user/fdbaseinfo?deviceid=device_id&other_parameters, à partir duquel elle récupère la clé secrète de l'appareil, ainsi que d'autres informations. Conformément au flux décrit ci-dessus, le service invoqué par l'application renvoie une clé qui est ensuite utilisée pour chiffrer (en utilisant l'algorithme AES) les identifiants Wi-Fi de l'utilisateur avant de les envoyer à l'appareil IoT via le réseau softAP WiFi dédié.
Un message JSON chiffré est envoyé via une requête HTTP POST au serveur HTTP ouvert de l'appareil.
La charge utile originale suit la structure ci-dessous :
{"ssid" : "Test-Network", "password" : "Test-Password", "serverName" : "eu-disp.coolkit.cc", "port" : 443}
où les paramètres 'Test-Network' et 'Test-Password' sont les identifiants réseau que nous avons choisis pour notre configuration de test, et eu-disp.coolkit.cc est la plateforme cloud desservant la région européenne.
Nous avons effectué différents tests, et nous avons remarqué que pendant le processus d'appairage, toute personne à proximité du soft AP WiFi peut récupérer le paramètre device_id, car il fait partie du SSID WiFi softAP de l'appareil. Pour récupérer la clé secrète d'un appareil particulier, vous avez simplement besoin de :
Par conséquent, simplement en connaissant un identifiant d'appareil, la clé secrète correspondante peut être facilement récupérée. Cela permet à un utilisateur malveillant à proximité de récupérer les identifiants Wi-Fi de l'utilisateur en écoutant le message de configuration transmis par le smartphone de l'utilisateur à l'appareil IoT. Notez que le WiFi softAP de l'appareil est ouvert et non protégé par défaut, donc l'écoute est possible.
Après avoir récupéré la clé secrète des services cloud (ainsi que le paramètre device_id déjà connu), l'utilisateur malveillant pourrait déchiffrer le message de configuration et extraire les identifiants Wi-Fi de l'utilisateur. En conséquence, l'ensemble du réseau domestique du client est compromis.
Cette vulnérabilité a été testée avec les versions Android (v4.11.0 et antérieures) et iOS (v4.9.1 et antérieures) de l'application mobile eWeLink.
[1] Daniele Granata, and Massimiliano Rak, and Giovanni Salzillo, and Umberto Barbato. "Sécurité dans les protocoles d'appairage et d'authentification IoT, un modèle de menace et une analyse de cas d'étude", ITASEC 2021.
MIT