
Эксплойт для повышения привилегий в ядре Linux, эксплуатирующий CVE-2026-46242 (race-condition use-after-free в epoll), с 99% надёжным получением root на настольных компьютерах, серверах и Android-устройствах.

Непривилегированный процесс повышает привилегии до root в Google kernelCTF.
Bad Epoll (CVE-2026-46242) — это use-after-free, вызванный состоянием гонки, в подсистеме epoll ядра Linux. Этот баг позволяет непривилегированному процессу получить права root не только на Linux-десктопах и серверах, но и на устройствах Android.
Bad Epoll был обнаружен и проэксплуатирован Jaeyoung Chung в качестве 0-day заявки в Google kernelCTF, где за эксплойт для ядра Linux выплачивается вознаграждение от $71,337+. Заявка Bad Epoll получила вознаграждение в размере $92,337.
[!NOTE] ИИ Anthropic, Mythos, нашёл другой баг состояния гонки в том же коде epoll, но пропустил Bad Epoll.
Редкий баг, способный дать root на Android. Большинство багов повышения привилегий в Linux вообще не могут дать root на Android. Copy Fail и его варианты, например, требуют модулей, которые Android никогда не загружает. Из примерно 130 уязвимостей, проэксплуатированных в Google kernelCTF, только около десяти являются кандидатами на получение root на Android. Bad Epoll — одна из них.
Нет «выключателя». Copy Fail и его варианты можно нейтрализовать, выгрузив их уязвимые модули, но у epoll такой возможности нет. Это ключевая функция ядра, на которую полагаются операционная система, сетевые службы и браузеры. Единственный способ исправить это — применить патч.
Крошечное окно гонки, но атака надёжна на 99%. Окно гонки этого бага составляет всего около шести инструкций, и обычная попытка почти никогда в него не попадает. Эксплойт расширяет это окно и запускает цикл повторных попыток, который никогда не приводит к краху ядра. В результате получается эксплойт с надёжностью 99%, как описано в разделе обзор атаки ниже.
Один коммит 2023 года внёс в код epoll две отдельные состояния гонки, при том что весь код составляет всего около 2 500 строк. Оба оказались критическими багами, способными привести к повышению привилегий.
Первый был найден Mythos от Anthropic и зарегистрирован как CVE-2026-43074, с подробностями в публичном отчёте Anthropic, ANT-2026-CM0TCREP. Этот результат впечатляет сам по себе, поскольку баги состояния гонки в ядре известны своей сложностью для обнаружения. Он продемонстрировал способность передовой ИИ-модели находить баги состояния гонки. Независимый исследователь позже отправил 1-day эксплойт для него в kernelCTF.
Другая гонка — это Bad Epoll, которую Mythos пропустил. Учитывая, что Mythos нашёл первый баг в этом небольшом участке кода epoll, вероятно, он исследовал ту же область с достаточной глубиной. Мы не можем точно знать, почему он пропустил Bad Epoll, но два фактора, вероятно, сделали его трудным для обнаружения.
Окно гонки крошечное. Оно составляет всего около шести инструкций, поэтому точное чередование потоков трудно представить даже при взгляде на уязвимый код.
Было мало свидетельств во время выполнения. После исправления CVE-2026-43074 use-after-free в Bad Epoll обычно не вызывает KASAN — основной детектор ошибок памяти в ядре. Без этого сигнала у Mythos, возможно, не было достаточной уверенности, чтобы сообщить об этом как о реальном баге.
Bad Epoll было трудно и исправить. Первый патч мейнтейнеров не полностью устранил проблему, и корректный патч появился только через два месяца после первого сообщения о баге. Это долгий срок для ядра, которое обычно решает вопросы безопасности срочно.
В целом, Bad Epoll показывает, насколько сложны состояния гонки на каждом этапе. Их трудно найти даже для передовой модели, трудно исправить правильно и, как показывает следующий раздел, трудно надёжно проэксплуатировать. Это также указывает на направление исследований уязвимостей, которое остаётся достойным изучения в присутствии передовых ИИ-моделей: раскрытие реального влияния на безопасность за узкими временными условиями и слабыми свидетельствами.
[!NOTE] Независимые исследователи Qi Tang и Junxi Qian также сообщили о CVE-2026-43074 команде ядра Linux 30 марта 2026 года, в тот же день, что и Anthropic. Их имена были непреднамеренно пропущены в списке благодарностей за upstream-исправление. Спасибо Guidong Han за указание на эти независимые отчёты. Позже эти три исследователя обнаружили ещё один use-after-free, вызванный состоянием гонки, в epoll.
Вот высокоуровневый обзор атаки для любопытных.
Два связанных объекта epoll. Одновременное закрытие обоих запускает гонку.
Два пути закрытия в epoll выполняются одновременно и сталкиваются. Один освобождает объект, пока другой всё ещё записывает в него, — это и есть use-after-free (UAF).
Окно гонки и то, как эксплойт его использует.
Эксплойт использует четыре объекта epoll, сгруппированных в две пары. Одна пара запускает гонку, а другая становится жертвой. Оттуда эксплойт превращает 8-байтовую запись UAF в UAF на файловом объекте и использует cross-cache-атаку для полного контроля содержимого файла.
Превращение бага в произвольное чтение памяти ядра через /proc/self/fdinfo.
С этим контролем эксплойт получает произвольное чтение памяти ядра через /proc/self/fdinfo. Наконец, он перехватывает поток управления и выполняет ROP-цепочку для получения root-шелла.