Создан эксплойт для уязвимости CVE-2026-23111 в ядре Linux, позволяющий повысить привилегии до root

linux

Группа исследователей, готовившихся к соревнованию Pwn2Own Berlin 2026, опубликовала рабочий эксплойт для уязвимости CVE-2026-23111 в подсистеме nf_tables ядра Linux. Уязвимость была устранена в февральских обновлениях, однако доказательство концепции демонстрирует, что её эксплуатация возможна на актуальных на момент написания дистрибутивах Debian 12/13 и Ubuntu 22.04/24.04. Для атаки требуется только локальный доступ и права непривилегированного пользователя. В случае успеха злоумышленник может получить полный контроль над системой - права root.

Уязвимость CVE-2026-23111

Проблема вызвана ошибкой в функции "nft_map_catchall_activate()", отвечающей за восстановление элементов карт при откате транзакций в nf_tables. Из-за инвертированной проверки активности элемента (логическая ошибка с одним восклицательным знаком в условии) код фактически пропускает неактивные элементы и обрабатывает активные, что противоположно требуемому поведению. Результат - при определённой последовательности команд ядро не восстанавливает счётчик ссылок на цепочку ("chain->use") после отката операции удаления карты. Это позволяет локальному пользователю многократно уменьшать счётчик, довести его до нуля, удалить цепочку и продолжить использовать объекты, указывающие на уже освобождённую память (use-after-free).

Исследователи воспроизвели этот сценарий и построили полную цепочку эксплуатации. Сначала через утечку указателя на "single_open" из структуры "seq_operations" они получают базовый адрес ядра. Затем, используя подмену поля "name" в освобождённой структуре "nft_chain", организуют произвольное чтение и определяют адрес области "msg_msg-2k". Наконец, подготавливают фиктивные структуры данных, размещённые в сообщениях очередей System V, и при выполнении проверки цепочки "nft_chain_validate" заставляют ядро вызвать подменённый указатель на функцию проверки, что приводит к запуску ROP-цепи. В результате код, исполняемый в пространстве ядра, модифицирует глобальный путь "modprobe_path" и отключает SELinux, после чего любой триггер "modprobe" запускает произвольный скрипт с правами root.

В описании эксплойта авторы подчёркивают, что для атаки необходимо наличие возможности создавать пространства имён идентификаторов пользователей ("user namespace"), которая обычно включена в большинстве дистрибутивов Linux. Они также обращают внимание на то, что баг вызван удалением единственного символа - восклицательного знака - в патче, что является наглядным примером того, как минимальная опечатка в коде может привести к серьёзным последствиям для безопасности.

Уязвимость затрагивает версии ядра, которые не содержат февральского исправления (коммит "f41c5d151078c5348271ffaf8e7410d96f2d82f8"). Патч распространяется на ветки "stable" дистрибутивов Debian (через DSA-6141-1, DSA-6163-1, DLA-4499-1), Ubuntu и Red Hat. Администраторам рекомендуется как можно скорее установить обновлённые пакеты ядра из официальных репозиториев. Для Debian Bookworm и Trixie исправления уже доступны. В качестве временной защитной меры можно отключить поддержку "user namespaces" (параметр ядра "user.max_user_namespaces=0"), если это не нарушает работу контейнеров или других зависимых служб.

Публикация рабочего эксплойта существенно повышает вероятность практических атак на системы, где обновления задерживаются. Для сред с длительным циклом согласования исправлений, таких как корпоративные серверы и встраиваемые устройства, это один из тех случаев, когда применять патч нужно незамедлительно, не дожидаясь очередного планового окна обновлений.

Ссылки

Комментарии: 0