- Il a été révélé qu’un masque de sommeil intelligent acheté sur Kickstarter transmettait les données d’ondes cérébrales des utilisateurs vers l’extérieur
- Le masque est constitué d’un matériel composite intégrant des capteurs EEG, une stimulation électrique (EMS), des vibrations, une fonction chauffante et de l’audio
- Lors de l’analyse de l’application, des identifiants d’authentification codés en dur pour un broker MQTT partagés par tous les appareils ont été découverts, permettant à un tiers de recevoir en temps réel les données de tous les appareils
- Il a effectivement été confirmé qu’environ 25 appareils transmettaient à un broker public des données d’ondes cérébrales en temps réel, de température, d’humidité, de CO₂ et de détection de présence
- Avec les mêmes identifiants, il était aussi possible d’envoyer des commandes de stimulation électrique, ce qui fait peser de graves risques sur la sécurité des utilisateurs et la protection de la vie privée
Structure et fonctions du masque de sommeil intelligent
- Le masque obtenu via Kickstarter est un produit fabriqué par une petite société de recherche chinoise ; il inclut la mesure des ondes cérébrales basée sur l’EEG ainsi que des fonctions de stimulation électrique musculaire (EMS), de vibration, de chauffage et de lecture audio
- Comme la qualité de l’application était médiocre et que la connexion se coupait souvent, le protocole Bluetooth a été rétroconçu afin de créer directement un panneau de contrôle web
- Le scan BLE a révélé l’existence de deux canaux de données (un pour l’envoi de commandes, un pour le streaming de données), mais il n’y avait pas de réponse car ils utilisaient un format propriétaire et non un protocole standard
Processus de rétro-ingénierie de l’application
- La décompilation de l’APK Android avec jadx a montré que l’application était développée sur une base Flutter
- Comme Flutter compile le code Dart en code natif ARM64, la restauration est plus difficile qu’avec une application Java classique
- À l’aide de la commande
strings sur le binaire, ont été extraits des identifiants de broker codés en dur, des endpoints d’API cloud, les noms de 15 fonctions de commande et des informations sur la structure des paquets
- Ensuite, l’outil blutter a été utilisé pour analyser le snapshot Dart et reconstituer l’intégralité des octets de commande
Contrôle de l’appareil réussi
- Après l’envoi d’une requête de 6 octets, l’appareil a renvoyé une réponse de 153 octets
- Elle comprenait le nom du modèle, la version du firmware, le numéro de série, la configuration de 8 canaux de capteurs (EEG 250Hz, respiration, accéléromètre 3 axes, gyroscope 3 axes) et une batterie à 83 %
- Le contrôle des vibrations, du chauffage, de l’EMS et de la musique fonctionnait normalement
- Une implémentation a été réalisée pour permettre de contrôler chaque fonction via des curseurs dans un tableau de bord web
Exposition du broker MQTT
- En se connectant au broker MQTT avec les identifiants codés en dur présents dans l’application, les données de tous les appareils ont été reçues
- Environ 25 appareils étaient actifs et transmettaient des données EEG pendant le sommeil, des mesures de qualité de l’air (température, humidité, CO₂) ainsi que des informations de détection de présence
- Il a été constaté que deux utilisateurs se trouvaient respectivement en sommeil paradoxal (REM) et en sommeil lent profond (ondes delta inférieures à 4Hz)
- Comme tous les appareils utilisent les mêmes identifiants, il existe une possibilité qu’un tiers externe envoie des commandes de stimulation électrique
Problèmes de sécurité et réponse
- Le nom du produit et celui de l’entreprise n’ont pas été divulgués, et le fabricant a été informé du problème
- Cet incident met en lumière de graves failles dans la protection des données personnelles et la gestion de la sécurité IoT
- L’auteur recommande de relire le texte de Karpathy, « Digital Hygiene », et souligne l’importance de l’hygiène numérique
Informations supplémentaires
- Le processus de rétro-ingénierie a été réalisé de manière autonome pendant environ 30 minutes par le modèle Claude (Opus 4.6)
- Par la suite, ce cas a atteint la 1re place sur Hacker News, et les logs de conversation associés ont été rendus publics
Aucun commentaire pour le moment.