Обнаружена критическая уязвимость Bad Epoll в ядре Linux, позволяющая получить root на Android

linux

Исследователь безопасности Жаён Чанг из программы Google kernelCTF обнаружил и продемонстрировал эксплуатацию новой уязвимости ядра Linux, получившей идентификатор CVE-2026-46242 и неофициальное название Bad Epoll. Проблема представляет собой состояние гонки, приводящее к use-after-free (UAF - обращение к уже освобождённой области памяти) в подсистеме epoll, отвечающей за уведомления о событиях ввода-вывода. Уязвимость позволяет не привилегированному пользователю повысить свои права до root не только на настольных и серверных системах Linux, но и на устройствах под управлением Android.

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

Bad Epoll была представлена как эксплойт нулевого дня в рамках соревнования kernelCTF, где за действующую атаку на ядро выплачивается вознаграждение от 71 337 долларов. Как сообщается в техническом описании, уязвимость была внесена в код в апреле 2023 года коммитом 58c9b016e128. Она возникает, когда два экземпляра epoll закрываются одновременно: один поток освобождает структуру данных, а второй продолжает работать с ней, вызывая use-after-free. Хотя окно гонки крайне узкое - всего около шести машинных инструкций, исследователь разработал методику, расширяющую это окно и позволяющую повторять атаку без сбоя ядра. В контролируемых условиях вероятность успешной эксплуатации достигает 99%.

Технически атака использует несколько объектов epoll, объединённых в парные конфигурации, чтобы инициировать и контролировать гонку. После достижения контролируемой записи UAF злоумышленник преобразует примитив в более мощную атаку cross-cache, нацеленную на файловые объекты ядра. Это даёт возможность произвольного чтения памяти ядра через интерфейсы наподобие /proc/self/fdinfo, после чего выполняется перехват управления через цепочку ROP (возвратно-ориентированное программирование). Результат - полное выполнение кода в пространстве ядра и получение root-оболочки, причём из полностью не привилегированного контекста.

Особую тревогу вызывает применимость уязвимости к Android. Исторически лишь небольшая часть уязвимостей ядра Linux оказывалась пригодной для рутирования устройств на Android из-за платформенных ограничений. Bad Epoll входит в редкий класс ошибок, способных обойти эти ограничения. Раннее тестирование показывает, что уязвимы устройства с ядром версии 6.6 и новее, например, модели Pixel последних поколений. Эксплойт для Android находится в разработке. Устройства на базе ядра 6.1 (например, Pixel 8) не затрагиваются, так как уязвимый код был добавлен в версии 6.4.

Кроме того, Bad Epoll может быть запущена из изолированной среды рендеринга браузера Chrome. Большинство других уязвимостей ядра блокируются песочницей, поэтому комбинация с эксплойтом браузера может привести к полному выходу из песочницы и получению контроля над ядром - сценарий, ранее продемонстрированный Project Zero в атаке "From Chrome renderer code exec to kernel with MSG_OOB".

Интересно, что в том же участке кода epoll ранее была обнаружена другая уязвимость - CVE-2026-43074, найденная системой искусственного интеллекта Mythos от Anthropic. Однако Mythos не выявил Bad Epoll, несмотря на то, что исследовал тот же код. Причины, вероятно, в крайне узком окне гонки и отсутствии надёжных индикаторов: после исправления первой ошибки Bad Epoll не вызывает срабатывания детектора памяти KASAN, что затрудняет автоматическое обнаружение.

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

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

Уязвимость затрагивает ядра Linux версий 6.4 и новее, если они не получили исправление. Пользователям Android стоит дождаться обновлений прошивки от производителей устройств, работающих на ядре 6.6 и выше. Эксплойт для Pixel 10 (ядро 6.6) на данный момент подтверждает срабатывание UAF, полный эксплойт в разработке.

Bad Epoll продолжает серию "плохих" уязвимостей для рутирования Android - Bad Binder, Bad IO_uring, Bad Spin. Случай демонстрирует, что даже передовые системы ИИ пока не способны гарантированно находить состояния гонки с минимальными индикаторами, а ручной анализ остаётся востребованным.

Ссылки

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