Belkin Wemo Smart Plug V2 – le débordement de tampon qui ne sera pas patché

Belkin Wemo Smart Plug V2 – le débordement de tampon qui ne sera pas patché

Nœud source: 2657924

Chercheurs de la société de sécurité IoT Sternum creusé dans une prise secteur domotique populaire de la marque d'appareils bien connue Belkin.

Le modèle qu'ils ont regardé, le Mini prise intelligente Wemo (F7C063) arrive apparemment à la fin de sa durée de vie, mais nous en avons trouvé beaucoup à vendre en ligne, ainsi que des conseils et des instructions détaillés sur le site de Belkin sur la façon de les configurer.

Bien qu'ils soient anciens (au sens moderne à court terme), les chercheurs ont noté que :

Notre intérêt initial pour l'appareil est venu du fait que plusieurs d'entre eux traînaient dans notre laboratoire et étaient utilisés chez nous, nous voulions donc juste voir à quel point ils étaient sûrs (ou non) à utiliser. [… C]eci semble être un appareil grand public assez populaire [; Sur la base de ces chiffres, il est prudent d'estimer que le total des ventes sur Amazon à lui seul devrait se chiffrer à des centaines de milliers.

En termes simples, de nombreuses personnes ont déjà acheté et branché ces appareils et les utilisent actuellement pour contrôler les prises électriques de leur maison.

Une "prise intelligente", en termes simples, est une prise de courant que vous branchez dans une prise murale existante et qui interpose un interrupteur contrôlé par Wi-Fi entre la prise secteur à l'avant de la prise murale et une prise secteur d'apparence identique sur l'avant de la prise intelligente. Considérez-le comme un adaptateur secteur qui, au lieu de convertir, par exemple, une prise européenne ronde en une prise britannique triangulaire, convertit, par exemple, une prise américaine à commutation manuelle en une prise américaine à commutation électronique pouvant être contrôlée à distance via une application ou une interface de type web.

Le S dans l'IdO…

Le problème avec de nombreux appareils dits Internet des objets (IoT), comme le dit la vieille blague, c'est que c'est la lettre "S" dans "IoT" qui signifie sécurité...

… ce qui signifie, bien sûr, qu'il n'y a souvent pas autant de cybersécurité que vous pourriez l'imaginer, ou même pas du tout.

Comme vous pouvez l'imaginer, un appareil domotique non sécurisé, en particulier un appareil qui pourrait permettre à quelqu'un à l'extérieur de votre maison, ou même à l'autre bout du monde, d'allumer et d'éteindre des appareils électriques à volonté, pourrait entraîner de nombreux problèmes.

Nous avons déjà écrit sur l'insécurité de l'IdO dans une large gamme de produits différents, de bouilloires internet (oui, vraiment) qui pourrait divulguer votre mot de passe Wi-Fi domestique, aux caméras de sécurité que les escrocs peuvent utiliser pour garder leur oeil sur toi au lieu de l'inverse, aux lecteurs de disque connectés au réseau risquant d'être éclaboussée par un rançongiciel directement sur Internet.

Dans ce cas, les chercheurs ont trouvé un trou d'exécution de code à distance dans la Wemo Mini Smart Plug en janvier 2023, l'ont signalé en février 2023 et ont reçu un numéro CVE pour celui-ci en mars 2023 (CVE-2023-27217).

Malheureusement, même s'il y a presque certainement beaucoup de ces appareils en utilisation active dans le monde réel, Belkin a apparemment déclaré qu'il considérait l'appareil comme "en fin de vie" et que la faille de sécurité ne serait donc pas corrigée.

(Nous ne savons pas à quel point ce type de licenciement de «fin de vie» serait acceptable si l'appareil s'avérait avoir un défaut dans ses circuits électriques 120V AC ou 230V AC, comme la possibilité de surchauffer et d'émettre des produits chimiques nocifs ou de régler en feu, mais il semble que les défauts de l'électronique numérique basse tension ou du micrologiciel de l'appareil peuvent être ignorés, même s'ils pourraient conduire un cyberattaquant à faire clignoter l'interrupteur d'alimentation secteur de l'appareil à plusieurs reprises à volonté.)

Quand les noms amicaux sont votre ennemi

Le problème que les chercheurs ont découvert était un bon vieux débordement de la mémoire tampon de la pile dans la partie du logiciel de l'appareil qui vous permet de modifier le soi-disant FriendlyName de l'appareil - la chaîne de texte qui s'affiche lorsque vous vous y connectez avec une application sur votre téléphone.

Par défaut, ces appareils démarrent avec un nom convivial du type Wemo mini XYZ, Où XYZ désigne trois chiffres hexadécimaux que nous supposons choisis de manière pseudo-aléatoire.

Cela signifie que même si vous possédez deux ou trois de ces appareils, ils commenceront presque certainement avec des noms différents afin que vous puissiez les configurer facilement.

Mais vous voudrez probablement les renommer plus tard afin qu'ils soient plus faciles à distinguer à l'avenir, en leur attribuant des noms conviviaux tels que TV power, Laptop charger ainsi que Raspberry Pi server.

Les programmeurs de Belkin (ou, plus précisément, les programmeurs du code qui s'est retrouvé dans ces appareils de marque Belkin, qui ont peut-être également fourni un logiciel de prise intelligente à d'autres marques) ont apparemment réservé 68 octets de stockage temporaire pour suivre le nouveau nom pendant le processus de changement de nom.

Mais ils ont oublié de vérifier que le nom que vous avez fourni rentre dans cet emplacement de 68 octets.

Au lieu de cela, ils ont supposé que vous utiliseriez leur application téléphonique officielle pour effectuer le processus de renommage de l'appareil, et donc qu'ils pourraient limiter la quantité de données envoyées à l'appareil en premier lieu, afin d'éviter tout débordement de mémoire tampon qui pourrait autrement surgir.

Ironiquement, ils ont pris grand soin non seulement de vous maintenir à la limite de 68 octets requise pour que l'appareil lui-même se comporte correctement, mais même de vous limiter à la saisie de seulement 30 caractères.

Nous savons tous pourquoi laisser le côté client faire la vérification des erreurs, plutôt que de vérifier à la place (ou, mieux encore, aussi) côté serveur, est une mauvaise idée :

  • Le code client et le code serveur peuvent dériver de la non-conformité. Les futures applications clientes pourraient décider que les noms de 72 caractères seraient une bonne option et commencer à envoyer plus de données au serveur qu'il ne peut en gérer en toute sécurité. Les futurs codeurs côté serveur pourraient remarquer que personne n'a jamais semblé utiliser les 68 octets réservés et décider unilatéralement que 24 devraient être plus que suffisants.
  • Un attaquant pourrait choisir de ne pas se soucier de l'application. En générant et en transmettant leurs propres requêtes à l'appareil, ils contourneraient trivialement tous les contrôles de sécurité qui reposent uniquement sur l'application.

Les chercheurs ont rapidement pu essayer des noms de plus en plus longs au point qu'ils pouvaient faire planter l'appareil Wemo à volonté en écrivant sur la fin de la mémoire tampon réservée au nouveau nom et en corrompant les données stockées dans les octets qui suivaient immédiatement.

Corrompre la pile

Malheureusement, dans un système d'exploitation basé sur la pile, la plupart des logiciels se retrouvent avec leurs tampons de mémoire temporaire basés sur la pile disposés de sorte que la plupart de ces tampons sont suivis de près par un autre bloc de mémoire vital qui indique au programme où aller quand il est terminé. ça va en ce moment.

Techniquement, ces blocs de données "où aller ensuite" sont connus sous le nom de adresses de retour, et ils sont automatiquement enregistrés lorsqu'un programme appelle ce qu'on appelle un fonctionou sous-programme, qui est un morceau de code (par exemple, "imprimer ce message" ou "afficher une boîte de dialogue d'avertissement") que vous souhaitez pouvoir utiliser dans plusieurs parties de votre programme.

L'adresse de retour est enregistrée comme par magie sur la pile chaque fois que le sous-programme est utilisé, de sorte que l'ordinateur peut automatiquement "dérouler" son chemin pour revenir à l'endroit d'où le sous-programme a été appelé, qui peut être différent à chaque fois qu'il est activé.

(Si un sous-programme avait une adresse de retour fixe, vous ne pourriez jamais l'appeler depuis un seul endroit de votre programme, ce qui rendrait inutile de s'embêter à emballer ce code dans un sous-programme séparé en premier lieu.)

Comme vous pouvez l'imaginer, si vous piétinez cette adresse de retour magique avant que le sous-programme ne finisse de s'exécuter, alors quand il se terminera, il se "déroulera" en toute confiance mais sans le savoir au mauvais endroit.

Avec un peu (ou peut-être beaucoup) de chance, un attaquant pourrait être en mesure de prédire à l'avance comment piétiner l'adresse de retour de manière créative, et ainsi diriger le programme de manière délibérée et malveillante.

Au lieu de simplement planter, le programme mal dirigé pourrait être amené à exécuter le code choisi par l'attaquant, provoquant ainsi ce que l'on appelle un exécution de code à distance exploit, ou RCE.

Deux défenses courantes aident à se protéger contre les exploits de ce type :

  • Randomisation de la disposition de l'espace d'adressage, également connue sous le nom d'ASLR. Le système d'exploitation charge délibérément des programmes à des emplacements de mémoire légèrement différents à chaque fois qu'ils s'exécutent. Cela rend plus difficile pour les attaquants de deviner comment détourner les programmes bogués d'une manière qui obtient et conserve finalement le contrôle au lieu de simplement planter le code.
  • Empilez les canaris, nommé d'après les oiseaux que les mineurs emmenaient avec eux sous terre parce qu'ils s'évanouissaient en présence de méthane, fournissant ainsi une alerte précoce cruelle mais efficace du risque d'explosion. Le programme insère délibérément un bloc de données connu mais aléatoire juste devant l'adresse de retour chaque fois qu'un sous-programme est appelé, de sorte qu'un débordement de tampon écrasera inévitablement et de manière détectable le "canari" en premier, avant qu'il ne dépasse suffisamment loin pour piétiner sur l'adresse de retour très importante.

Pour que leur exploit fonctionne rapidement et de manière fiable, les chercheurs devaient forcer la prise Wemo à désactiver l'ASLR, ce que les attaquants distants ne pourraient pas faire, mais avec de nombreux essais dans la vie réelle, les attaquants pourraient néanmoins avoir de la chance, devinez correctement aux adresses mémoire utilisées par le programme, et obtenir le contrôle de toute façon.

Mais les chercheurs n'ont pas eu à s'inquiéter du problème de canari de la pile, car l'application boguée avait été compilée à partir de son code source avec la fonction « insérer les instructions de sécurité pour la vérification des canaris » désactivée.

(Les programmes protégés par Canary sont généralement légèrement plus volumineux et plus lents que ceux non protégés en raison du code supplémentaire nécessaire dans chaque sous-programme pour effectuer les contrôles de sécurité.)

Que faire?

  • Si vous êtes propriétaire de Wemo Smart Plug V2, assurez-vous que vous n'avez pas configuré votre routeur domestique pour autoriser l'accès à l'appareil de « l'extérieur », via Internet. Cela réduit ce que l'on appelle dans le jargon votre surface d'attaque.
  • Si vous avez un routeur qui prend en charge Universal Plug and Play, également appelé UPnP, assurez-vous qu'il est désactivé. L'UPnP facilite notoirement l'ouverture par inadvertance des périphériques internes à des tiers.
  • Si vous êtes programmeur, évitez de désactiver les fonctions de sécurité logicielles (telles que la protection de la pile ou la vérification canari de la pile) juste pour économiser quelques octets. Si vous manquez vraiment de mémoire, cherchez à réduire votre empreinte en améliorant votre code ou en supprimant des fonctionnalités plutôt qu'en diminuant la sécurité afin de pouvoir en entasser davantage.

Horodatage:

Plus de Sécurité nue