
От пайки до шелла: полная аппаратная эксплуатация маршрутизатора Linksys WRT54GL (CVE-2022-43973)
Путешествие по 10 этапам исследования безопасности встраиваемых систем — от определения выводов JTAG до удалённого выполнения кода на бытовом маршрутизаторе на базе MIPS.
| Автор | Umberto Della Monica |
| Роль | Студент магистратуры по кибербезопасности — исследователь безопасности встраиваемых систем |
| Дата | Май 2026 |
| Репозиторий | Linksys-WRT54GL-Exploitation |
Отказ от ответственности: Данное исследование проводилось исключительно в образовательных и исследовательских целях на оборудовании, которое принадлежит мне лично. Никакие несанкционированные системы не подвергались доступу. Все описанные здесь методы следует воспроизводить только на устройствах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Автор не несёт ответственности за любое неправомерное использование представленной информации. Всегда соблюдайте действующее законодательство, нормативные требования и практики ответственного раскрытия уязвимостей.
Linksys WRT54GL — один из самых знаковых бытовых маршрутизаторов за всю историю. Поддержка прошивок с открытым исходным кодом сделала его фаворитом как среди энтузиастов, так и среди исследователей. Несмотря на свой возраст, он остаётся активно используемым по всему миру, что делает его актуальной целью для исследований безопасности встраиваемых систем.
| Характеристика | Значение |
|---|---|
| Чипсет | Broadcom BCM5352 |
| Тактовая частота CPU | 200 МГц |
| Архитектура | MIPS 32-бит (Little Endian) |
| Флеш-память | 4 МБ NOR (отображается в память по адресу 0xbfc00000) |
| ОЗУ | 16 МБ |
| Беспроводная связь | IEEE 802.11b/g, 54 Мбит/с |
| Сеть | 4x LAN + 1x WAN, NAT-фаервол с SPI |
| ОС | На базе Linux (BusyBox) |
| Загрузчик | CFE (Common Firmware Environment) |
Первый шаг в любой оценке безопасности аппаратного обеспечения — физический осмотр. После вскрытия корпуса устройства я обнаружил на печатной плате два отладочных интерфейса:
Поскольку разъём JTAG не был распаян, я припаял временную контактную колодку для доступа к отладочному интерфейсу. С помощью мультиметра я определил линии земли и Vcc и подтвердил, что устройство работает с логическими уровнями 3,3 В — это критически важно, чтобы не повредить чипсет.
Для сопоставления сигналов JTAG я использовал JTAGulator от Grand Idea Studio — аппаратный инструмент, предназначенный для автоматического определения отладочных интерфейсов путём проверки всех возможных комбинаций выводов.
JTAGulator успешно определил следующую распиновку 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."
После определения выводов JTAG я подключил Attify Badge — инструмент с открытым исходным кодом для оценки безопасности аппаратного обеспечения (GNU GPL v3.0) на базе чипа FTDI FT2232H — к разъёму JTAG маршрутизатора.
Я запустил OpenOCD (Open On-Chip Debugger) с пользовательской конфигурацией, адаптированной под цель BCM5352, поскольку официальные конфигурации были несовместимы с этой конкретной ревизией аппаратного обеспечения.
Пользовательская конфигурация OpenOCD определяет раскладку flash-разделов маршрутизатора:
| Раздел | Описание | Начальный адрес | Размер |
|---|---|---|---|
| CFE | Загрузчик | 0xbfc00000 | 256 КБ |
| Прошивка | Ядро + корневая ФС | 0xbfc40000 | ~3,7 МБ |
| NVRAM | Конфигурация | 0xbfff0000 | 64 КБ |
После остановки CPU я выполнил полный дамп NOR-флеша объёмом 4 МБ, отображаемого в память:
> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000
С помощью binwalk я проанализировал дамп прошивки, чтобы определить встроенные файловые системы, сжатые сегменты и образ ядра: