
Dalla saldatura alla shell: Sfruttamento hardware completo del router Linksys WRT54GL (CVE-2022-43973)
Un percorso di ricerca sulla sicurezza embedded in 10 fasi — dalla scoperta dei pin JTAG all'esecuzione remota di codice su un router consumer basato su MIPS.
| Autore | Umberto Della Monica |
| Ruolo | Studente MSc Cybersecurity — Ricercatore di Sicurezza Embedded |
| Data | Maggio 2026 |
| Repository | Linksys-WRT54GL-Exploitation |
Avvertenza: Questa ricerca è stata condotta esclusivamente per scopi educativi e di ricerca su hardware di mia proprietà personale. Non è stato effettuato alcun accesso a sistemi non autorizzati. Tutte le tecniche descritte devono essere riprodotte solo su dispositivi di tua proprietà o per i quali possiedi un'autorizzazione esplicita e scritta. L'autore declina ogni responsabilità per qualsiasi uso improprio delle informazioni presentate. Rispetta sempre le leggi, le normative e le pratiche di divulgazione responsabile applicabili.
Il Linksys WRT54GL è uno dei router consumer più iconici mai prodotti. Il suo supporto per firmware open-source lo ha reso un favorito tra appassionati e ricercatori. Nonostante la sua età, rimane in uso attivo in tutto il mondo, rendendolo un target rilevante per la ricerca sulla sicurezza embedded.
| Specifica | Valore |
|---|---|
| Chipset | Broadcom BCM5352 |
| Clock CPU | 200 MHz |
| Architettura | MIPS 32-bit (Little Endian) |
| Memoria Flash | 4 MB NOR (memory-mapped a 0xbfc00000) |
| RAM | 16 MB |
| Wireless | IEEE 802.11b/g, 54 Mbps |
| Rete | 4x LAN + 1x WAN, firewall NAT con SPI |
| SO | Basato su Linux (BusyBox) |
| Bootloader | CFE (Common Firmware Environment) |
Il primo passo in qualsiasi valutazione della sicurezza hardware è l'ispezione fisica. Dopo aver aperto l'involucro del dispositivo, ho identificato due interfacce di debug sul PCB:
Poiché l'header JTAG non era saldato, ho saldato un header temporaneo per accedere all'interfaccia di debug. Utilizzando un multimetro, ho identificato le linee di ground e Vcc e ho confermato che il target opera a livelli logici di 3.3V — fondamentale per evitare di danneggiare il chipset.
Per mappare i segnali JTAG, ho utilizzato un JTAGulator di Grand Idea Studio — uno strumento hardware progettato per identificare automaticamente le interfacce di debug sondando tutte le combinazioni di pin possibili.
Il JTAGulator ha identificato con successo la seguente piedinatura JTAG:
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 — logica 3.3V verificata."
Con i pin JTAG identificati, ho collegato un Attify Badge — uno strumento open-source per la valutazione della sicurezza hardware (GNU GPL v3.0) dotato di un chip FTDI FT2232H — all'header JTAG del router.
Ho avviato OpenOCD (Open On-Chip Debugger) con una configurazione personalizzata per il target BCM5352, poiché le configurazioni ufficiali erano incompatibili con questa specifica revisione hardware.
La configurazione personalizzata di OpenOCD definisce la partizione flash del router:
| Partizione | Descrizione | Indirizzo di Inizio | Dimensione |
|---|---|---|---|
| CFE | Bootloader | 0xbfc00000 | 256 KB |
| Firmware | Kernel + Root FS | 0xbfc40000 | ~3,7 MB |
| NVRAM | Configurazione | 0xbfff0000 | 64 KB |
Dopo aver fermato la CPU, ho eseguito un dump completo di 4 MB della flash NOR memory-mapped:
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
Utilizzando binwalk, ho analizzato il dump del firmware per identificare filesystem embedded, segmenti compressi e l'immagine del kernel:
binwalk ./dumps/wrt54gl.bin
binwalk -E ./dumps/wrt54gl.bin # analisi dell'entropia
sha256sum ./dumps/wrt54gl.bin # verifica dell'integrità