02.07.2022

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

В Netfilter, подсистеме ядра Linux, используемой для фильтрации и модификации сетевых пакетов, выявлена уязвимость (CVE-2022-25636), позволяющая выполнить код на уровне ядра. Заявлено о подготовке примера эксплоита, позволяющего локальному пользователю поднять свои привилегии в Ubuntu 21.10 c отключённым механизмом защиты KASLR. Проблема проявляется начиная с ядра 5.4. Исправление пока доступно в виде патча (корректирующие выпуски ядра не сформированы). Проследить за публикаций обновления пакетов в дистрибутивах можно на данных страницах: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Уязвимость вызвана ошибкой вычисления размера массива flow->rule->action.entries в функции nft_fwd_dup_netdev_offload (определена в файле net/netfilter/nf_dup_netdev.c), которая может привести к записи контролируемых атакующим данных в область памяти за границей выделенного буфера. Ошибка проявляется при настройке правил «dup» и «fwd» в цепочках, для которых применяется аппаратное ускорение обработки пакетов (offload). Так как переполнение возникает на этапе до создания правила пакетного фильтра и проверки поддержки offload, уязвимость также применима и для сетевых устройств, не поддерживающих аппаратное ускорение, таких как loopback-интерфейс.

Отмечается, что проблема достаточно проста в эксплуатации, так как выходящие за пределы буфера значения могут перезаписать указатель на структуру net_device, а данные о перезаписанном значении возвращаются в пространство пользователя, что позволяет узнать необходимые для совершения атаки адреса в памяти. Для эксплуатации уязвимости требуется создание определённых правил в nftables, что возможно только при наличии привилегий CAP_NET_ADMIN, которые могут быть получены непривилегированным пользователем в отдельном сетевом пространстве имён (network namespaces). Уязвимость также может быть использована для атак на системы контейнерной изоляции.

Источник.