
Del soldador al shell: explotación completa del hardware del router Linksys WRT54GL (CVE-2022-43973)
Un viaje de investigación de seguridad embebida en 10 fases: desde el descubrimiento de pines JTAG hasta la ejecución remota de código en un router doméstico basado en MIPS.
| Autor | Umberto Della Monica |
| Rol | Estudiante de Máster en Ciberseguridad — Investigador de seguridad embebida |
| Fecha | Mayo 2026 |
| Repositorio | Linksys-WRT54GL-Exploitation |
Aviso legal: Esta investigación se realizó únicamente con fines educativos y de investigación sobre hardware de mi propiedad personal. No se accedió a ningún sistema no autorizado. Todas las técnicas descritas aquí solo deben reproducirse en dispositivos que sean de tu propiedad o sobre los que tengas autorización escrita explícita para realizar pruebas. El autor no asume ninguna responsabilidad por el mal uso de la información presentada. Cumple siempre con las leyes, normativas y prácticas de divulgación responsable aplicables.
El Linksys WRT54GL es uno de los routers domésticos más icónicos que se hayan producido. Su soporte de firmware de código abierto lo convirtió en un favorito tanto de entusiastas como de investigadores. A pesar de su antigüedad, sigue en uso activo en todo el mundo, lo que lo convierte en un objetivo relevante para la investigación de seguridad embebida.
| Especificación | Valor |
|---|---|
| Chipset | Broadcom BCM5352 |
| Reloj de CPU | 200 MHz |
| Arquitectura | MIPS de 32 bits (Little Endian) |
| Memoria Flash | 4 MB NOR (mapeada en memoria en 0xbfc00000) |
| RAM | 16 MB |
| Inalámbrico | IEEE 802.11b/g, 54 Mbps |
| Red | 4x LAN + 1x WAN, firewall NAT con SPI |
| SO | Basado en Linux (BusyBox) |
| Bootloader | CFE (Common Firmware Environment) |
El primer paso en cualquier evaluación de seguridad de hardware es la inspección física. Tras abrir la carcasa del dispositivo, identifiqué dos interfaces de depuración en la PCB:
Como el conector JTAG no estaba poblado, soldé un conector de pines temporal para acceder a la interfaz de depuración. Con un multímetro, identifiqué las líneas de tierra y Vcc y confirmé que el objetivo opera a niveles lógicos de 3.3V, algo fundamental para evitar dañar el chipset.
Para mapear las señales JTAG, utilicé un JTAGulator de Grand Idea Studio, una herramienta de hardware diseñada para identificar automáticamente interfaces de depuración probando todas las combinaciones posibles de pines.
El JTAGulator identificó correctamente la siguiente distribución de pines 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 — verified 3.3V logic."
Con los pines JTAG identificados, conecté una Attify Badge — una herramienta de evaluación de seguridad de hardware de código abierto (GNU GPL v3.0) con un chip FTDI FT2232H — al conector JTAG del router.
Ejecuté OpenOCD (Open On-Chip Debugger) con una configuración personalizada adaptada al objetivo BCM5352, ya que las configuraciones oficiales eran incompatibles con esta revisión específica de hardware.
La configuración personalizada de OpenOCD define la distribución de particiones flash del router:
| Partición | Descripción | Dirección de inicio | Tamaño |
|---|---|---|---|
| CFE | Bootloader | 0xbfc00000 | 256 KB |
| Firmware | Kernel + sistema de archivos raíz | 0xbfc40000 | ~3.7 MB |
| NVRAM | Configuración | 0xbfff0000 | 64 KB |
Tras detener la CPU, realicé un volcado completo de 4 MB de la memoria flash NOR mapeada en memoria:
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
Utilicé binwalk para analizar el volcado de firmware e identificar sistemas de archivos embebidos, segmentos comprimidos y la imagen del kernel: