
Du Solder au Shell : Exploitation complète du matériel du routeur Linksys WRT54GL (CVE-2022-43973)
Un parcours de recherche en sécurité embarquée en 10 phases — de la découverte des broches JTAG à l'exécution de code à distance sur un routeur grand public basé sur MIPS.
| Auteur | Umberto Della Monica |
| Rôle | Étudiant MSc en Cybersécurité — Chercheur en Sécurité Embarquée |
| Date | Mai 2026 |
| Dépôt | Linksys-WRT54GL-Exploitation |
Avertissement : Cette recherche a été menée à des fins éducatives et de recherche uniquement sur du matériel que je possède personnellement. Aucun système non autorisé n'a été accédé. Toutes les techniques décrites ici ne doivent être reproduites que sur des appareils que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester. L'auteur décline toute responsabilité en cas d'utilisation abusive des informations présentées. Respectez toujours les lois, réglementations et pratiques de divulgation responsable applicables.
Le Linksys WRT54GL est l'un des routeurs grand public les plus emblématiques jamais produits. Son support du firmware open source en a fait un favori des passionnés et des chercheurs. Malgré son âge, il reste largement utilisé dans le monde, ce qui en fait une cible pertinente pour la recherche en sécurité embarquée.
| Spécification | Valeur |
|---|---|
| Chipset | Broadcom BCM5352 |
| Fréquence CPU | 200 MHz |
| Architecture | MIPS 32 bits (Little Endian) |
| Mémoire Flash | 4 Mo NOR (mappée en mémoire à 0xbfc00000) |
| RAM | 16 Mo |
| Sans fil | IEEE 802.11b/g, 54 Mbps |
| Réseau | 4x LAN + 1x WAN, pare-feu NAT avec SPI |
| OS | Linux (BusyBox) |
| Bootloader | CFE (Common Firmware Environment) |
La première étape de toute évaluation de sécurité matérielle est l'inspection physique. Après avoir ouvert le boîtier de l'appareil, j'ai identifié deux interfaces de débogage sur le circuit imprimé :
Comme le connecteur JTAG n'était pas soudé, j'ai soudé un connecteur broche temporaire pour accéder à l'interface de débogage. À l'aide d'un multimètre, j'ai identifié les lignes de masse et Vcc et confirmé que la cible fonctionne à des niveaux logiques 3,3V — crucial pour éviter d'endommager le chipset.
Pour cartographier les signaux JTAG, j'ai utilisé un JTAGulator de Grand Idea Studio — un outil matériel conçu pour identifier automatiquement les interfaces de débogage en testant toutes les combinaisons de broches possibles.
Le JTAGulator a identifié avec succès le brochage JTAG suivant :
board: wrt54gl_v1.1
device: Linksys WRT54GL v1.1
pins:
TCK: PA3
TMS: PA4
TDI: PA1
TDO: PA2
TRST: NC
SRST: PB0
notes: "Header JP3 — vérifié logique 3,3V."
Une fois les broches JTAG identifiées, j'ai connecté un Attify Badge — un outil open source d'évaluation de sécurité matérielle (GNU GPL v3.0) équipé d'une puce FTDI FT2232H — au connecteur JTAG du routeur.
J'ai lancé OpenOCD (Open On-Chip Debugger) avec une configuration personnalisée adaptée à la cible BCM5352, car les configurations officielles étaient incompatibles avec cette révision matérielle spécifique.
La configuration OpenOCD personnalisée définit la disposition des partitions flash du routeur :
| Partition | Description | Adresse de début | Taille |
|---|---|---|---|
| CFE | Bootloader | 0xbfc00000 | 256 Ko |
| Firmware | Noyau + Système de fichiers racine | 0xbfc40000 | ~3,7 Mo |
| NVRAM | Configuration | 0xbfff0000 | 64 Ko |
Après avoir arrêté le CPU, j'ai effectué un vidage complet de 4 Mo de la flash NOR mappée en mémoire :
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
À l'aide de binwalk, j'ai analysé le vidage du firmware pour identifier les systèmes de fichiers intégrés, les segments compressés et l'image du noyau :