🚨 Один пакет до рута. В OpenWrt нашли критическую дыру в DHCPv6-сервере (CVSS 9.8)
В любимой прошивке раскопали шикарную RCE. Вся магия происходит в демоне
odhcpd, который отвечает за выдачу IPv6-адресов. И да, по дефолту этот демон крутится с правами root 😬
Разрабы допустили классическое переполнение фиксированного 512-байтового стекового буфера (
pdbuf). Чтобы взломать роутер, атакующему не нужна авторизация. Достаточно плюнуть снаружи всего один нужный UDP-пакет на 547 порт.
На Гитхабе
подробно расписали сразу два независимых вектора атаки в функциях
build_ia() и
dhcpv6_ia_handle_IAs().
Хакер отправляет DHCPv6 REQUEST, в который напихано аномальное количество опций (например, 22 невалидных
IA_PD и параметр
RECONF_ACCEPT). Демон начинает формировать ответ со статусами ошибок, но забывает проверить, осталось ли место в буфере. В итоге ответ тупо пишется за пределы выделенной памяти, а переменная
buflen уходит в integer underflow (переполнение через ноль).
И это довольно фатально... если на взрослых Linux-серверах от такого спасает защита стека и рандомизация памяти, то на роутерах эти механизмы часто отключены ради экономии ресурсов. В итоге обычное переполнение превращается в гарантированное удаленное выполнение кода. Готовые питоновские скрипты с эксплойтами уже лежат в паблике.
Уязвимость закрыли в свежих релизах 24.10.8 и 25.12.5. Кстати, ветка 24.10 в сентябре этого года всё - заканчивается, так что лучше сразу накатывать 25.12. Заодно апдейт закроет еще пачку веселых багов, вроде HTTP request smuggling в веб-морде
uhttpd и утечек памяти.
Ну или если IPv6 вам физически не нужОн, то вырубайте его на интерфейсах от греха подальше. Меньше протоколов - крепче сон 💤
Типичный 🥸
Сисадмин