28.02.2024

Уязвимость в IPv6-стеке ядра Linux, допускающая удалённое выполнение кода

Раскрыта информация об уязвимости CVE-2023-6200) в сетевом стеке ядра Linux, которая при определённых обстоятельствах позволяет злоумышленнику из локальной сети добиться выполнения своего кода через отправку специально оформленного пакета ICMPv6 с сообщением RA (Router Advertisement), предназначенным для анонсирования информации о маршрутизаторе.

Уязвимость может быть эксплуатирована только из локальной сети и проявляется в системах со включённой поддержкой IPv6 и активным sysctl-параметром «net.ipv6.conf.‹имя_сетевого_интерфейса›.accept_ra» (можно проверить командой «sysctl net.ipv6.conf|grep accept_ra»), который по умолчанию отключён в RHEL и Ubuntu для внешних сетевых интерфейсов, но включён для интерфейса loopback, что допускает атаку с той же системы.

Уязвимость вызвана состоянием гонки при обработке сборщиком мусора устаревших записей fib6_info, что может привести к обращению к уже освобождённой области памяти (use-after-free). При получении пакета ICMPv6 с сообщением об анонсе маршрутизатора (RA, Router Advertisement) сетевой стек вызывает функцию ndisc_router_discovery(), которая при наличии в RA-сообщении данных о времени жизни маршрута вызывает функцию fib6_set_expires() и заполняет структуру gc_link. Для чистки устаревших записей применяется функция fib6_clean_expires(), которая отсоединяет запись в gc_link и очищает память, используемую структурой fib6_info. При этом имеется определённый момент, когда память под структуру fib6_info уже освобождена, но ссылка на неё продолжает находится в структуре gc_link.

Уязвимость проявляется начиная с ветки 6.6 и устранена в версиях 6.6.9 и 6.7. Статус устранения уязвимости в дистрибутивах можно оценить на данных страницах: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Из дистрибутивов в которых поставляются пакеты с ядром 6.6 можно отметить Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva и Manjaro, в остальных дистрибутивах не исключено бэкпортирование изменения с ошибкой в пакеты с более старыми ветками ядра (например, в Debian упоминается, что уязвим пакет с ядром 6.5.13, в то время как проблемное изменение появилось в ветке 6.6). В качестве обходного пути защиты можно отключить IPv6 или присвоить значение 0 параметрам «net.ipv6.conf.*.accept_ra».

Источник: https://www.opennet.ru/opennews/art.shtml?num=60516 Источник.