
Da Solda ao Shell: Exploração Completa de Hardware do Roteador Linksys WRT54GL (CVE-2022-43973)
Uma jornada de pesquisa em segurança embarcada em 10 fases — desde a descoberta dos pinos JTAG até a execução remota de código em um roteador consumidor baseado em MIPS.
| Autor | Umberto Della Monica |
| Função | Estudante de Mestrado em Cibersegurança — Pesquisador de Segurança Embarcada |
| Data | Maio de 2026 |
| Repositório | Linksys-WRT54GL-Exploitation |
Aviso: Esta pesquisa foi conduzida apenas para fins educacionais e de pesquisa em hardware que possuo pessoalmente. Nenhum sistema não autorizado foi acessado. Todas as técnicas descritas aqui devem ser reproduzidas apenas em dispositivos que você possui ou para os quais tenha autorização explícita por escrito para testar. O autor não assume nenhuma responsabilidade por qualquer uso indevido das informações apresentadas. Sempre cumpra as leis, regulamentos e práticas de divulgação responsável aplicáveis.
O Linksys WRT54GL é um dos roteadores consumidores mais icônicos já produzidos. Seu suporte a firmware de código aberto o tornou um favorito entre entusiastas e pesquisadores. Apesar de sua idade, ele permanece em uso ativo em todo o mundo, tornando-se um alvo relevante para pesquisas em segurança embarcada.
| Especificação | Valor |
|---|---|
| Chipset | Broadcom BCM5352 |
| Clock da CPU | 200 MHz |
| Arquitetura | MIPS 32 bits (Little Endian) |
| Memória Flash | 4 MB NOR (mapeada em memória em 0xbfc00000) |
| RAM | 16 MB |
| Sem fio | IEEE 802.11b/g, 54 Mbps |
| Rede | 4x LAN + 1x WAN, firewall NAT com SPI |
| SO | Baseado em Linux (BusyBox) |
| Bootloader | CFE (Common Firmware Environment) |
O primeiro passo em qualquer avaliação de segurança de hardware é a inspeção física. Após abrir o gabinete do dispositivo, identifiquei duas interfaces de depuração na placa de circuito impresso (PCB):
Como o conector JTAG não estava populado, soldei um conector de pinos temporário para acessar a interface de depuração. Usando um multímetro, identifiquei as linhas de terra (GND) e Vcc e confirmei que o alvo opera em níveis lógicos de 3,3V — crítico para evitar danos ao chipset.
Para mapear os sinais JTAG, usei um JTAGulator da Grand Idea Studio — uma ferramenta de hardware projetada para identificar automaticamente interfaces de depuração testando todas as combinações possíveis de pinos.
O JTAGulator identificou com sucesso a seguinte pinagem JTAG:
board: wrt54gl_v1.1
device: Linksys WRT54GL v1.1
pins:
TCK: PA3
TMS: PA4
TDI: PA1
TDO: PA2
TRST: NC
SRST: PB0
notes: "Conector JP3 — lógica de 3,3V verificada."
Com os pinos JTAG identificados, conectei um Attify Badge — uma ferramenta de código aberto para avaliação de segurança de hardware (GNU GPL v3.0) com chip FTDI FT2232H — ao conector JTAG do roteador.
Iniciei o OpenOCD (Open On-Chip Debugger) com uma configuração customizada para o alvo BCM5352, já que as configurações oficiais eram incompatíveis com esta revisão específica de hardware.
A configuração customizada do OpenOCD define o layout das partições da flash do roteador:
| Partição | Descrição | Endereço Inicial | Tamanho |
|---|---|---|---|
| CFE | Bootloader | 0xbfc00000 | 256 KB |
| Firmware | Kernel + Root FS | 0xbfc40000 | ~3,7 MB |
| NVRAM | Configuração | 0xbfff0000 | 64 KB |
Após parar a CPU, realizei um dump completo de 4 MB da flash NOR mapeada em memória:
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
Usando o binwalk, analisei o dump do firmware para identificar sistemas de arquivos embutidos, segmentos compactados e a imagem do kernel:
binwalk ./dumps/wrt54gl.bin
binwalk -E ./dumps/wrt54gl.bin # análise de entropia
sha256sum ./dumps/wrt54gl.bin # verificação de integridade