В чём суть
Протокол RPL поддерживает целый ряд дистрибутивов Linux. Он разработан для маршрутизации IPv6 в беспроводных сетях с низким энергопотреблением и высокими потерями пакетов и другими ограничениями ресурсов. Однако в прошлом году исследователи обнаружили в протоколе интересную уязвимость. Она позволяет вызывать kernel panic на удаленной системе.
Для проведения атаки злоумышленнику достаточно отправить несколько специально оформленных пакетов. Поэтому уязвимость получила название route of death («маршрут смерти»).
Слабым местом оказался механизм сжатия адресов [RFC 6554]. Ядро Linux обрабатывает сетевые данные с помощью буфера sk_buff. Сам по себе он содержит огромное количество информации, но интерес представляют параметры CmprI, CmprE и segments_left. Они показывают, сколько повторяющихся октетов целевого адреса можно опустить. Если передать им значения 15, 0 и 1 соответственно, то 48-байтный вектор с адресами по какой-то причине распаковывается до величины в 528 байт. Она не влезает в выделенную память буфера. Чтобы предотвратить запись за пределы буфера, происходит паника ядра.
Чтобы взывать сбой удаленно, достаточно сконструировать этот специфический пакет — например, с помощью Scapy. Весь необходимый код можно найти в разделе proof-of-concept на сайте команды исследователей.
Как защититься
Уязвимость в RPL обнаружили ещё в начале прошлого года. О проблеме сообщили команде Zero Day Initiative, однако последовавшие патчи оказались неэффективны. Пока единственный способ защититься от атаки route of death — отключить поддержку RPL на устройстве. Хотя по умолчанию она неактивна в большинстве дистрибутивов.
Проверить статус протокола можно командой:
sysctl -a | grep -i rpl_seg_enabled
Что еще
Кроме route of death, специалисты по информационной безопасности находили и другие уязвимости в ядре Linux. Например, инженеры крупного стримингового сервиса раскрыли SACK Panic. С её помощью можно было провести DoS-атаку на системы под Linux и FreeBSD, подобрав определенную последовательность пакетов.
Прошлым летом также стало известно об уязвимости, которая находилась в ядре Linux целых восемь лет — DirtyCred. Она позволяла злоумышленникам повысить уровень прав в скомпрометированной системе и выполнять произвольный код. Слабым местом Linux в этом случае оказался механизм повторного использования памяти кучи.
По степени важности DirtyCred сравнима с другой известной уязвимостью 2022 года — Dirty Pipe. Она позволяла злоумышленникам модифицировать произвольные файлы Linux с помощью механизма pipe. Впрочем, до неё исследователи нашли ещё одну уязвимость со схожим принципом работы в 2016 году — Dirty Cow. Своё название получила из-за ошибки в прерывании копирования при записи (COW). Она также открывала несанкционированный доступ к данным и фактически позволяла злоумышленникам повышать привилегии.
Впрочем, сейчас с уязвимостями сталкивается и протокол IPv6. В прошлом году мы писали о том, как он может скомпрометировать безопасность сети. Всему виной legacy-механизм EUI-64, который отвечает за генерацию второй части адреса. Он раскрывает идентификатор аппаратного обеспечения на уровне сети, что может представлять интерес для злоумышленников.