
CVE-2021-27289: Contournement de la protection de rejeu sur les appareils Zigbee Ksix
Bonjour à tous,
Je suppose que la chose professionnelle à faire était de titrer ce dépôt exactement comme il l'est – clair, descriptif et précis. Mais en le rédigeant, quelques autres titres me sont venus à l'esprit, comme :
Quoi qu'il en soit, voici l'histoire.
Alors que je me préparais à divulguer une nouvelle vulnérabilité, je me suis souvenu d'un travail que j'avais effectué il y a des années – un bug découvert lors de mon projet de fin d'études en recherchant des protocoles IoT comme Thread et Zigbee. À l'époque, j'avais envoyé un rapport à MITRE mais n'avais jamais eu de retour, j'ai donc pensé qu'il avait simplement été ignoré.
Par curiosité, je me suis reconnecté à l'ancien compte Gmail que j'avais utilisé pour la soumission… et à ma surprise, en 2023 – trois ans plus tard – j'ai vu qu'un CVE avait en fait été attribué.
CVE-2021-27289, lié à la vulnérabilité que j'avais signalée en tant qu'étudiant.
Pourquoi cela a-t-il pris autant de temps ? Lorsque j'ai contacté le vendeur, ils ont dit qu'ils n'avaient pas assez de personnel pour corriger le problème et ont répété cette excuse. J'ai informé MITRE que personne ne semblait agir, donc je suppose qu'ils ont attendu – probablement parce que le problème ne serait de toute façon jamais corrigé.
Le bug affectait plusieurs appareils IoT basés sur Zigbee fabriqués par Ksix. Le problème central était que le mécanisme de protection contre le rejeu, défini dans la spécification Zigbee et appliqué via le compteur de trames, n'était pas correctement implémenté.
Comme les appareils ne vérifiaient pas correctement le compteur de trames, un attaquant pouvait communiquer avec le réseau et usurper des paquets simplement en augmentant le numéro de séquence à une valeur supérieure à la dernière vue par l'appareil. Cela permettait de rejouer des messages capturés et de les faire accepter comme valides – résultant de fait en un contournement d'authentification.
Ce dépôt inclut tout ce sur quoi j'ai travaillé pendant mon projet de fin d'études :
Les appareils IoT Zigbee Ksix sont affectés par une vulnérabilité d'attaque par rejeu causée par une mauvaise implémentation des mécanismes de protection contre le rejeu de Zigbee.
Les versions suivantes ont été testées et se sont avérées vulnérables. Je n'ai pas testé les versions ultérieures, elles pourraient donc également être affectées.
Ces produits ne sont plus disponibles sur le site web du vendeur ni sur des plateformes comme Amazon, et semblent avoir été abandonnés.
La pile Zigbee des appareils concernés n'applique pas correctement le mécanisme de protection contre le rejeu, qui repose sur le champ du compteur de trames défini dans la spécification Zigbee. Ce champ est destiné à garantir que les messages reçus sont récents et n'ont pas été rejoués.
Cependant, dans cette implémentation, le compteur de trames est ignoré ou n'est pas correctement validé. En conséquence, un attaquant peut capturer un paquet Zigbee légitime, augmenter son numéro de séquence à une valeur plus élevée (par exemple 250), et le rejouer sur le réseau.
Comme les appareils ne vérifient que le numéro de séquence, ils acceptent le message comme nouveau – permettant une communication usurpée et des actions non autorisées sans casser l'authentification ou le chiffrement.
Selon le type d'appareil et son intégration dans l'environnement, cela peut provoquer de fausses alertes ou des états de capteurs fictifs dans l'application que l'utilisateur a utilisée initialement pour configurer le réseau (par exemple, mouvement détecté, porte ouverte) – même si rien ne s'est réellement produit. Dans des configurations plus complexes, cela pourrait même déstabiliser les flux d'automatisation ou déclencher des actions non intentionnelles basées sur des données usurpées.