2 points par GN⁺ 2025-07-28 | 1 commentaires | Partager sur WhatsApp
  • Deux étudiants en cybersécurité ont tenté de pirater un lave-linge pour le fun et le défi
  • Ils ont analysé par rétro-ingénierie l’application mobile du lave-linge afin d’étudier l’API et le mécanisme de chiffrement
  • Ils ont retrouvé la clé de chiffrement XOR et mis en œuvre une méthode pour lire et déchiffrer en temps réel les données d’état du lave-linge
  • En utilisant un webhook Discord, ils ont créé un bot de notifications qui automatise l’état de fonctionnement du lave-linge et les alertes de fin de cycle
  • Ils prévoient à l’avenir d’appliquer une automatisation domotique similaire à d’autres appareils électroménagers « stupides »

Introduction

  • L’auteur a mené avec un ami un projet de piratage de lave-linge dans son nouveau logement
  • L’objectif était moins l’aspect pratique que le plaisir et le défi technique
  • Le point de départ était la curiosité de connecter le lave-linge et d’autres appareils électroménagers à un système de maison intelligente
  • L’expérience acquise en le piratant directement a aussi servi d’exercice pratique de rétro-ingénierie

Contexte

  • Le logement était équipé d’un lave-linge intelligent compatible Wi‑Fi
  • Ce lave-linge permet de recevoir des notifications de progression via une application mobile
  • Une seule personne peut être liée à l’application à la fois, ce qui le rend peu pratique à partager
  • Voyant là une opportunité, l’auteur a décidé de faire en sorte que plusieurs personnes puissent recevoir les notifications d’état sans les limitations de l’application

Le cas de la sonnette

  • La sonnette du logement est un système qui envoie des alertes via un signal radio 433MHz
  • Un ami a créé un système qui détecte le signal de la sonnette et envoie une notification sur un serveur Discord
  • Il est utilisé en complément du vrai son de sonnette, comme notification de secours
  • En voyant ce succès, ils ont tenté d’intégrer le lave-linge de la même manière à des notifications automatisées

Plan et préparation

  • L’auteur a choisi de faire de la rétro-ingénierie de l’application mobile pour comprendre le fonctionnement de l’API
  • Il a utilisé un routeur OpenWRT pour capturer directement le trafic réseau du lave-linge intelligent
  • Le lave-linge a été connecté à un Wi‑Fi temporaire afin de repérer les schémas de communication via capture de paquets

Analyse du trafic du lave-linge

  • Le lave-linge envoie et reçoit du trafic par plusieurs voies : sa propre IP, 255.255.255.255 (broadcast), des serveurs externes (API HTTP, trafic chiffré) et une communication HTTP directe avec l’application (port 80)
  • L’analyse s’est particulièrement concentrée sur la partie communiquant directement avec l’application mobile

Rétro-ingénierie de l’API du lave-linge

  • L’application utilise en boucle deux endpoints : /http-read.json?encrypted=1 (lecture de l’état) et /http-write.json?encrypted=1 (envoi de commandes)
  • Le point d’intérêt était l’endpoint de lecture, mais les données de réponse sont chiffrées (HEX, type HTML)
  • Même en passant le paramètre de requête encrypted=0, on n’obtenait qu’un échec de déchiffrement ou une erreur 400

Analyse du chiffrement et récupération de la clé

  • En partant de l’hypothèse d’un chiffrement simple basé sur XOR, l’auteur a tenté un bruteforce à l’aide d’outils en ligne comme CyberChef
  • Dans un projet de référence (CandySimplyFi-tool), il a trouvé du code ayant déjà réussi à extraire la clé, ce qui lui a permis de restaurer la clé et déchiffrer les données en quelques secondes
  • Pour mieux comprendre le schéma de données, il s’est aussi appuyé sur le code open source ofalvai/home-assistant-candy

Expérimentation sur les valeurs d’état du lave-linge

  • Il a observé l’évolution des données lors de diverses manipulations physiques du lave-linge (changement de programme, réglage de la température et de la vitesse, démarrage/arrêt/fin)
  • Principaux champs de valeur d’état :
    • Pr : état du sélecteur de programme
    • PrPh : cycle de lavage en cours
    • Temp : température définie
    • SpinSp : vitesse d’essorage définie
    • RemTime : temps restant (en minutes, avec parfois un blocage à 10 minutes)
  • Limite : certaines valeurs (par exemple SpinSp) peuvent ne pas correspondre à la valeur réelle

Développement du script d’automatisation des notifications

  • L’implémentation de tout le nécessaire a été terminée : schéma de l’API du lave-linge, clé de chiffrement, lecture et déchiffrement des données, puis détermination de l’état
  • Un script de bot de notifications utilisant un webhook Discord a été créé
  • Ordre principal de fonctionnement :
    1. Interroger le lave-linge
    2. S’il n’y a pas de changement d’état, dormir puis recommencer
    3. En cas de changement détecté, mettre à jour le dernier message ou envoyer un nouveau message
    4. Répéter

Conclusion et projets futurs

  • L’automatisation des notifications de la sonnette et du lave-linge a déjà été réalisée avec succès
  • Des automatisations similaires sont envisagées pour le lave-vaisselle, le sèche-linge, la TV, etc. (prise intelligente, capteur de vibration, IR blaster)
  • Un système de sécurité rudimentaire à base de webcam doit aussi être testé

Conclusion

  • Ce projet a permis d’acquérir les bases de la rétro-ingénierie IoT en conditions réelles et d’un piratage domotique simple
  • C’est un exemple où l’auteur a pu combiner à la fois l’aspect pratique et le plaisir

1 commentaires

 
GN⁺ 2025-07-28
Avis Hacker News
  • Je précise d’abord que ce n’est pas une critique du billet original ; je trouve qu’il présente très bien un processus d’analyse d’appareil vraiment fascinant
    Si l’appareil communique avec une application Android, je recommande apk-mitm
    Cet outil supprime de l’APK presque tous les mécanismes connus de certificate pinning et réécrit le manifeste pour permettre l’utilisation de certificats locaux sans root
    Après avoir désinstallé l’application d’origine puis sideloadé le résultat d’apk-mitm, on peut utiliser mitmproxy sur un appareil stock classique
    Autre point important : si l’application reçoit des données chiffrées puis les déchiffre pour les afficher, la clé se trouve forcément quelque part dans l’application, ou bien elle est récupérée depuis quelque part
    En analysant l’APK avec jadx, on peut voir quelque chose de très proche du code Java, ce qui permet parfois de trouver la clé
    Mais certains fabricants déplacent le chiffrement dans du code natif ; dans ce cas, il faut faire du reverse engineering avec Ghidra ou autre
    Ce processus peut être incroyablement ennuyeux, ou extrêmement amusant
    Même si l’auteur s’est appuyé sur les travaux précédents d’autres personnes, je pense que même lorsqu’il s’agit d’un sujet sur lequel personne ne s’est encore lancé, ça vaut largement la peine d’essayer au lieu d’abandonner
    Au final, on apprend énormément en découvrant le fonctionnement d’un appareil qu’on possède

    • Ce n’était pas spécifique à un appareil, mais j’ai moi aussi eu un problème avec une appli et j’ai désactivé les mises à jour automatiques pour revenir à une ancienne version
      Au bout d’un moment, l’accès au serveur a fini par être bloqué, et je suis tombé par hasard sur le certificate pinning ; j’ai essayé ce dépôt, et ça a réglé le problème de façon vraiment propre
      Les publicités ont même disparu, probablement parce qu’il s’agissait d’anciennes URL publicitaires
      Je ne le regrette pas, vu que l’éditeur ne faisait que dégrader l’application au fil du temps
  • Moi, j’utilise une machine à laver Bosch pour surveiller sa progression depuis l’autre bout de la maison, contrairement au billet original
    Grâce à l’API Bosch, je peux savoir si le cycle est terminé et si la porte a été ouverte
    Pour l’instant j’utilise la version API de base, mais le PoC est terminé et je compte passer ensuite à une option auto-hébergée locale
    Avec Home Assistant, si le cycle est terminé mais que la porte n’a pas été ouverte, cela signifie qu’il y a encore du linge humide dedans
    J’ai donc configuré une notification linge toutes les 15 minutes sur mon téléphone, et aussi sur celui de ma femme uniquement lorsqu’elle est à la maison
    C’est très simple et ça fonctionne parfaitement

    • Ma machine à laver est un vieux modèle des années 90 qui fonctionne avec un sélecteur de minuterie
      Pas d’ordinateur ni de capteurs, seulement une détection supplémentaire à l’étape de remplissage d’eau
      Il suffit toujours de régler 40 minutes au minuteur et c’est terminé, avec en plus une fonction pour couper l’alarme ; on ne peut pas faire plus simple

    • J’ai aussi l’intention d’appliquer quelque chose de similaire à un petit four
      Il n’a ni API ni connectivité, mais l’idée est de le brancher sur une prise intelligente pour mesurer sa consommation électrique, détecter les états veille/en fonctionnement et envoyer des notifications

    • Il m’arrive souvent de lancer une lessive avant de me coucher puis de la remettre au lendemain, mais ma machine a une fonction du genre « rotation prolongée » qui garde le linge frais toute la nuit
      Ça consomme un peu plus d’eau, mais ça sauve ma routine du soir et ça aide aussi à utiliser l’électricité pendant les heures creuses
      J’aime vraiment beaucoup mon Electrolux, et je suppose que des fonctions similaires existent aussi chez d’autres marques

    • J’utilise depuis plus de 15 ans une montre G-Shock 5600 comme rappel de fin de lessive
      Je règle le minuteur de la montre sur la durée totale au moment où je lance la machine, et elle bippe quand c’est fini
      Ça marche quelle que soit la présence d’une API, et peu importe la marque

    • C’est une solution vraiment élégante
      Une logique simple, mais avec un effet très concret sur la vie quotidienne

  • Je suis en train de hacker le matériel d’un réfrigérateur
    Pas le logiciel : c’est un réfrigérateur haut de gamme pour camping-car, compatible gaz / 12v / 220v
    Le contrôleur électronique a pris feu, ce qui a détruit les câbles et l’intérieur, mais le réfrigérateur lui-même est encore en bon état
    Comme il faut de toute façon remplacer toutes les pièces, au lieu d’acheter une nouvelle carte de contrôle à 250 dollars, je veux combiner d’anciens composants de chaudière à gaz pour le remplacer par un nouveau système
    La carte mère de la chaudière intègre déjà tout le dispositif d’allumage, donc si je conçois correctement la logique et les sécurités, ça devrait pouvoir fonctionner en mode gaz
    Ça m’évitera d’acheter un nouveau frigo, et c’est un excellent projet pour apprendre l’électronique à mon fils de 9 ans
    Bien sûr, le gaz peut être dangereux, mais au final c’est toujours amusant, et une fois le hack terminé les critiques disparaissent
    Si le déroulé intéresse du monde, je peux en faire un billet complet

  • J’ai fixé des capteurs de vibration Zigbee sur mon lave-linge et mon sèche-linge, puis je les ai reliés à Home Assistant
    Je n’avais jamais pensé à la méthode de surveillance du courant/de la tension avec une prise intelligente, je trouve que c’est une bonne idée

    • Chez nous, le lave-linge et le sèche-linge sont branchés sur des smart plugs, et la consommation électrique est envoyée via MQTT vers Node-RED
      Avec quelques conditions de déclenchement simples, on automatise la mise à jour du tableau de bord ainsi que les notifications par e-mail au début et à la fin du cycle
      Il y a aussi une application et des fonctions Bluetooth, mais je n’ai aucune intention de les utiliser, car l’application demande l’accès à l’appareil photo, à l’audio et aux contacts de mon téléphone
      Il semble aussi qu’un travail d’intégration HA soit en cours au lien ci-dessous
      https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
  • Pour moi, c’est exactement le genre de billet qui incarne l’esprit de Hacker News

    • J’aimerais voir plus souvent ce type de contenu, du vrai hacking au sens bricolage/passion, parce qu’en ce moment j’ai l’impression qu’il n’y en a plus que pour l’IA et les LLM

    • Si vous aimez ce genre de hardware hacking, je recommande aussi vivement https://hackaday.com/

  • Installer un certificat personnel sur un Android non rooté est plutôt pénible
    On ne peut l’ajouter qu’au magasin de certificats système, ce qui nécessite généralement un module Magisk
    Une méthode plus simple consiste à lancer un ancien émulateur Android sur PC, y injecter le certificat et rediriger le trafic vers Burpsuite ou mitmproxy
    Pas besoin de changer d’appareil
    En analysant le code de l’application avec APKLab ou Jadx, on devrait pouvoir retrouver au moins l’algorithme de dérivation de clé
    Je me demande si l’application et la machine à laver ne fonctionnent que lorsqu’elles sont sur le même réseau ; c’est un aspect qui me plaît

  • J’ai été surpris par l’expression « cycle de lavage de 3 heures » — en réalité 4 à 5 heures
    Chez moi, le mode éco standard de ma machine prend moins de 30 minutes, et à la fin elle émet une alerte très bruyante
    Avec un cycle court et une alerte, je n’ai pas besoin d’une solution technique plus compliquée

    • L’auteur du commentaire est probablement américain
      Les machines européennes mettent plus de temps à cause des exigences plus strictes sur la consommation d’eau et d’électricité
      L’appareil du billet semble être un combiné lave-linge/sèche-linge, donc encore plus lent
      Chez nous, même le mode normal dure 104 minutes, et en cas de surcharge cela peut aller jusqu’à 3 heures

    • Les cycles longs éliminent mieux les micro-organismes lorsqu’on utilise des détergents enzymatiques et des agents de blanchiment oxygénés
      Un programme de 30 minutes se contente à peu près de « rincer » le linge
      https://pubmed.ncbi.nlm.nih.gov/25207988/

    • Mon sèche-linge est un modèle sans conduit d’évacuation, ce qui est franchement pénible, et il lui faut 3 heures
      Du lavage au séchage, on arrive à 4 h 30
      C’est l’appareil dont je suis le plus mécontent parmi tous ceux que j’ai utilisés
      Parfois, le linge n’est même pas vraiment sec

  • Quelqu’un signale qu’il ne voit pas de chiffrement
    Il analyse les données de la fenêtre d’entrée du premier screenshot (cyberchef.avif) comme de simples caractères ASCII hexadécimaux non chiffrés
    Par exemple, 7D correspond à {, 0D0A à CRLF, 09 à TAB, 22 à ", etc.
    Autrement dit, il estime qu’il s’agit déjà de texte en clair décodé, et que l’explication sur un chiffrement XOR ne colle pas
    Il relève aussi que la valeur de clé visible dans le screenshot ne correspond ni à des limites d’octets cohérentes ni aux espacements de l’entrée réelle
    Il se demande donc si le screenshot n’a pas été manipulé ou édité
    Il dit être curieux de savoir pourquoi et ce qui s’est passé

  • Quelqu’un signale que l’image correspondant à la phrase « For now, I plugged this key into CyberChef, and was able to decrypt the data. » est cassée
    Il fournit même des détails précis sur l’élément HTML concerné et le lien associé

  • À propos du passage disant que « la machine à laver communiquait énormément avec elle-même », quelqu’un note que cela donne l’impression que le concepteur de la stack réseau ne connaissait pas le concept d’interface loopback
    L’appareil envoyait beaucoup de paquets à sa propre adresse IP, ainsi que des paquets par seconde vers 255.255.255.255, mais la personne dit ne pas trop s’en être souciée

    • Ça peut paraître inutile, mais il peut s’agir de trafic lié à ARP
      J’ai souvent observé ce comportement sur des appareils IoT, notamment pour détecter des conflits ou des changements d’adresse IP
      J’ai la même intuition