Исследователь под ником mrbruhh нашёл неаутентифицированную RCE в роутере Motorola MR2600. Прошивку для этой модели Motorola в открытом доступе не выкладывает — только через OTA. Исключением стал MR2600, Wi-Fi 5 роутер, последнее обновление v1.0.22 вышло в середине 2024 года. Скачав прошивку, автор извлёк файловую систему и начал копаться в CGI-скриптах и SOAP-обработчиках, чтобы понять, как работает ручное обновление.
Процесс оказался двухэтапным: загрузить образ, потом запустить проверку и прошивку. Оба шага требовали аутентификации, по задумке, — но не работали. Загрузка идёт через эндпоинт /WEBCGI1/prog.fcgi?method=/cgi-bin/fwupload.cgi. Внутренний обработчик проверяет, что первые четыре байта файла — это 0x27 0x05 0x19 0x56 (сигнатура SEAMA-образа). Но разработчики совершили классическую ошибку: они проверяли сырые данные multipart-формы, а не извлечённое содержимое поля. Легитимный запрос всегда начинается с ----, поэтому нормальная загрузка вообще не работала. Атакующему достаточно просто отправить сырой образ без multipart-границ. Система пыталась защититься проверкой аутентификации, но файл уже оказывался записан в /tmp/firmware.img, и при неудаче проверки его не удаляли.
Прошивка запускается SOAP-запросом с действием LoadFirmwareValidation. Он проверяет SEAMA-заголовок и CRC32, но никакой криптографической подписи нет — сгенерировать валидный образ может кто угодно. Если проверка пройдена, вызывается mtd_write -r -w write /tmp/firmware.img Kernel &, что шьёт прошивку и перезагружает роутер.
И тут вторая уязвимость — обход аутентификации на этом эндпоинте. Код проверял разрешённые пути через подстроку, а запрещённый /WEBCGI1/ — точным совпадением. Достаточно добавить к URI разрешённый параметр, например, /WEBCGI1/?Login.html. Подстрока Login.html находится, блокировка не срабатывает. Готовый эксплойт: загрузить вредоносную прошивку через fwupload.cgi, затем вызвать LoadFirmwareValidation с параметром ?Login.html. Всё прошивается, роутер перезагружается с инфицированным образом.
Атака работает минимум из локальной сети. Если включено удалённое управление, то и из интернета. На момент написания статьи Shodan показывал 41 такой роутер в открытом доступе.
Автор упоминает, что Exodus Intelligence уже находила похожие уязвимости для этой же модели — Command Injection и обход аутентификации — но их детали скрыты за пейволлом. При попытке сообщить об ошибке Motorola Mobility переадресовала его в Motorola Solutions, а та — обратно. Роутер давно end-of-life, официальный сервер обновлений на zoom.com больше не отвечает. В итоге исследователь решил сделать полное публичное раскрытие. Бонус: за все отчёты в AMD, ASUS, Google, Motorola, MSI, Netgear, TP-Link и другие он не получил ни доллара баг-баунти.