Исследователь нашёл и исправил уязвимость CVE-2026-31695 в ядре Linux. Ошибка почти пять лет жила в драйвере virt_wifi: он создаёт виртуальный Wi-Fi интерфейс поверх обычного сетевого. Исследователь опубликовал рабочий эксплойт для стандартной установки Fedora 44 Server на x86_64 с ядром 6.19.10-300.fc44. Локальный пользователь без привилегий получает полный контроль над системой.
Как устроена гонка
Уязвимость вызывает состояние гонки между двумя netlink-сообщениями. Первое удаляет родительский интерфейс veth1, второе меняет настройки дочернего virt_wifi0. При удалении ядро освобождает память veth1, хотя виртуальный Wi-Fi интерфейс всё ещё хранит указатель на неё в поле dev.parent.
Дальше обработчик ethtool обращается к этому полю. Функция ethnl_ops_begin вызывает pm_runtime_get_sync для родительского устройства ещё до проверки состояния интерфейса. Указатель ведёт на освобождённую память - получается использование памяти после освобождения, CWE-416.
Сама по себе уязвимость выглядит как нарушение устойчивости с узким окном гонки. Попов показал, что окно можно расширить. Он запускает 512 потоков с командой ETHTOOL_MSG_FEATURES_SET. Часть из них выстраивается в очередь на блокировку, и один поток неизбежно успевает добраться до освобождённой памяти.
Эксплуатация идёт через подделку структуры device. Исследователь заполняет освободившуюся память данными сетевых буферов, которые отправляет через сокет. Подставная структура проходит проверки внутри pm_runtime_get_sync и доводит выполнение до функции обратного вызова. Та перехватывает управление и переписывает modprobe_path - путь, по которому ядро ищет программу автозагрузки модулей. На Fedora дополнительно пришлось отключить SELinux: политика не давала запустить скрипт.
Что меняет патч
Разработчики убрали вызов SET_NETDEV_DEV в драйвере virt_wifi. Виртуальный интерфейс больше не ссылается на нижележащее устройство, и освобождение родителя перестаёт быть опасным. Исправление вошло в основную ветку ядра, затем его перенесли в стабильные ветки.
Исправленные версии: 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22 и 6.19.12. Amazon Linux 2023 закрывает уязвимость обновлениями ALAS2023-2026-1681 и ALAS2023-2026-1746, Amazon Linux 2 в записи указан как незатронутый.
Насколько это опасно на практике
Оценки расходятся. Amazon Linux ставит уровень Important и CVSS 7.8, Red Hat - Low, при этом CNA присвоил 7.8. До публикации исследования база AppSecure не показывала известных публичных эксплойтов: EPSS 0.01 процента, записи в CISA KEV нет. Теперь рабочий код для получения root существует для массового дистрибутива, и на низкие оценки опираться не стоит.
Атака требует закрепления в системе. Нужен низкопривилегированный доступ: оболочка, скомпрометированная сервисная учётка, код в общем окружении. Кроме того, эксплойт опирается на пользовательские пространства имён. Без них локальный пользователь не создаст нужные сетевые интерфейсы. Многопользовательские серверы, CI-раннеры, общий хостинг и хосты контейнеров входят в группу наибольшего риска.
Сведений об эксплуатации CVE-2026-31695 в реальных атаках нет. При этом ядровые уязвимости с локальным повышением привилегий давно идут в связках. CVE-2024-50264 в vsock тоже относится к использованию памяти после освобождения и получил CVSS 7.8. CVE-2021-26708 в AF_VSOCK описан как набор гонок при неверной блокировке до версии 5.10.13.
Кому обновляться первым
Проверьте работающее ядро и наличие драйвера. На хостах, где virt_wifi не нужен, автор советует заблокировать модуль. Это его рекомендация, а не официальная обходная мера вендора. Замена ядра или обратный перенос исправления остаются основным решением.
Дополнительно снижает риск отключение автозагрузки модулей ядра. Без неё не сработает подмена modprobe_path, на которой держится эксплойт. Опция init_on_free затирает освобождённую память. Однако в экспериментах Попова она превращала тихое обращение к освобождённой памяти в предупреждение ядра, а гонку выиграть всё равно удавалось. Надёжнее всего такие цепочки ломают механизмы контроля целостности потока управления.