Clapier
La renaissance du Nabaztag:tag : un terrier HTTP en Rust, le bytecode Garenne, des correctifs WPA2/3 bas niveau dans le firmware nabgcc, et les tarifs EDF Tempo annoncés par un lapin.
- Rôle
- Rétro-ingénierie, firmware, serveur, application web.
- Période
- 2026
- Stack
- Bytecode Metal, C (firmware nabgcc), Rust (axum), Svelte 5, Kyutai Pocket TTS


Le besoin
Le Nabaztag:tag de Violet est un lapin Wi-Fi aux oreilles motorisées. À chaque démarrage, il télécharge son application sur les serveurs de Violet, arrêtés depuis longtemps. Violet en a publié les sources, et RedoXyde en a tiré nabgcc, un portage du firmware sous GCC.
Mon lapin acceptait le partage de connexion d’un téléphone et refusait la box de la maison. Une fois connecté, il cessait de recevoir le trafic au bout de 25 à 60 minutes. J’ai lancé Clapier fin juillet 2026 pour régler ces deux problèmes : un firmware corrigé, une application et un serveur écrits pour ce modèle.
À l'usage
L’installation tient en trois étapes : flasher une fois le firmware wpa23-gtk, lancer clapier, puis donner au lapin la clé Wi-Fi et l’adresse du serveur. Au premier démarrage, Clapier enregistre le lapin et lui sert Garenne, mon application.
L’interface web affiche chaque lapin dans une tuile, avec un avatar dont les oreilles suivent leur position réelle. Des boutons font saluer le lapin, le mettent en silence, le redémarrent, lancent une chorégraphie, changent sa couleur, bougent ses oreilles ou lui font lire un texte.
Maison, mon tableau de bord domestique, s’en sert pour le tarif de l’électricité. Tous les quarts d’heure, le ventre du lapin prend la couleur du jour EDF Tempo. Les oreilles annoncent le lendemain : les deux quand RTE a publié la couleur, la gauche seule quand la prévision atteint 80 %.
Architecture
Le firmware reste en C et embarque la machine virtuelle Metal, qui exécute Garenne. Le pilote Wi-Fi transmet les trames brutes, et Garenne implémente sa propre pile réseau, d’ARP à TCP.
Côté serveur, Clapier est un binaire Rust qui implémente le HTTP de 2006 attendu par le lapin. Au démarrage, le lapin envoie son adresse MAC ; Clapier cherche chaque fichier dans le dossier de ce lapin, puis dans le dossier commun. Tester une version sur un seul lapin revient à déposer un fichier.
Les correctifs WPA2
Le code Wi-Fi de nabgcc contenait quatre bogues. La trame d’association annonçait une suite de chiffrement (00-0F-AC-00) refusée par les box en mode de transition WPA2/WPA3 ; elle reprend désormais les chiffrements relevés pendant le scan. strcpy tronquait la PMK, la clé dérivée du mot de passe Wi-Fi, au premier octet nul. Le script d’édition de liens omettait 56 sections .bss.*, si bien que l’état EAPOL démarrait avec le contenu de la RAM à la mise sous tension.
Le quatrième bogue expliquait la perte de réception : aes128.c contenait trois fonctions vides. Le lapin avait seulement sa clé par paire, et les paquets de diffusion, chiffrés avec la clé de groupe, lui restaient illisibles. J’ai écrit le déchiffrement AES-128 (environ 2 Ko), le désemballage RFC 3394 et la lecture de la clé de groupe ; un ping de diffusion a ensuite reçu sa réponse.
Décisions
Le serveur prépare, le lapin lit. Garenne lit uniquement des formats fixes, binaires ou ligne par ligne. Clapier prépare le reste, des chorégraphies aux MP3 encodés comme ceux de Violet.
Du code neuf. Les sources de Violet et le projet ServerlessNabaztag m’ont servi de référence ; le code de Garenne est entièrement nouveau.
Une boucle de test courte. Avant TCP, j’ai mis en place un fondu lumineux, un canal de journalisation et un redémarrage à distance. Une nouvelle version arrive sur le lapin en une trentaine de secondes, et une version défectueuse se corrige en le débranchant.
Le diagnostic par radio. Pendant la perte de réception, le lapin pouvait encore émettre : je lui ai fait diffuser ses compteurs Wi-Fi toutes les deux secondes. La cryptographie a été validée sur Mac avec les vecteurs de test FIPS-197 et RFC 3394.
Aujourd'hui
Clapier tourne sur un Raspberry Pi 1, à côté de Maison, et gère Garen, mon lapin. Le 28 août 2026, RedoXyde a intégré mes correctifs à la branche wpa2 de nabgcc. Les deux dépôts sont publics, sous licence MIT.