Угрозы

Bad Epoll получил публичный PoC: Linux-уязвимость может поднять обычного пользователя до root

Маша Даровская
By Маша Даровская , IT-редактор и автор
Bad Epoll получил публичный PoC: Linux-уязвимость может поднять обычного пользователя до root
Обложка © Anonhaven

Для уязвимости Bad Epoll в ядре Linux опубликованы технические детали и proof-of-concept — демонстрационный эксплойт, показывающий практическую эксплуатацию бага. Ошибка получила номер CVE-2026-46242 и относится к локальному повышению привилегий: обычный непривилегированный процесс может получить права root на уязвимой системе. SecurityWeek пишет, что под ударом находятся Linux-десктопы, серверы и Android-устройства на затронутых версиях ядра.

Bad Epoll находится в epoll — подсистеме ядра Linux для отслеживания событий ввода-вывода. Она нужна, чтобы программа могла эффективно следить за большим количеством файловых дескрипторов, сетевых соединений и других источников событий. На ней держатся серверные приложения, браузеры, сетевые сервисы и часть Android-инфраструктуры. Поэтому epoll нельзя просто отключить как ненужный модуль.

Технически CVE-2026-46242 — это гонка выполнения с использованием уже освобождённой памяти. Два пути закрытия epoll-объектов сталкиваются между собой. Один поток освобождает внутреннюю структуру ядра, а другой всё ещё продолжает в неё писать. NVD описывает ошибку в eventpoll: ep_remove() очищал file->f_ep, но продолжал использовать объект file, пока параллельный __fput() мог уйти по другому пути освобождения и привести к записи в уже освобождённую память.

То есть, атакующий заставляет два связанных epoll-объекта закрываться почти одновременно. В редком окне ядро теряет контроль над временем жизни внутренней структуры. Дальше это превращается в повреждение памяти ядра, утечку адресов и перехват управления. В опубликованном разборе исследователь описывает цепочку до root-доступа через утечку памяти ядра и ROP-цепочку — набор коротких фрагментов уже существующего кода, которые собираются в нужное действие без записи нового кода в память ядра.

Уязвимость нашёл Jaeyoung Chung из Seoul National University Computer Security Lab. Он отправил баг в Google kernelCTF как zero-day submission — заявку на ранее неизвестную уязвимость. В его публичном репозитории Bad Epoll описан как гонка в epoll, позволяющая непривилегированному процессу стать root на Linux и потенциально на Android. Там же указано, что эксплойт демонстрировался на Google kernelCTF.

В обычных условиях окно гонки очень маленькое: в разборе говорится примерно о шести машинных инструкциях. Случайный запуск почти никогда в него не попадёт. Эксплойт расширяет это окно и повторяет попытки так, чтобы не ронять ядро. Исследователь заявляет о 99% надёжности на тестовых системах. The Hacker News также указывает, что PoC не просто вызывает сбой, а доводит цепочку до root на проверенных конфигурациях.

Bad Epoll затрагивает ядра, основанные на Linux 6.4 и новее, если в них не был перенесён исправляющий патч. В публичном разборе указано, что баг был внесён коммитом от 8 апреля 2023 года и исправлен коммитом a6dc643c6931 от 24 апреля 2026 года. Старые ветки на базе 6.1 не затронуты, потому что проблемный код появился позже.

Bad Epoll, по данным исследователя, также может быть применим к Android-устройствам на ядре 6.4+; SecurityWeek пишет, что уязвимость подтверждалась на Pixel 10 с ядром 6.6.

Ещё одна неприятная особенность — возможность запуска из песочницы браузера. В публичном описании утверждается, что Bad Epoll можно триггерить из renderer sandbox Chrome — изолированного процесса рендеринга страниц. Да, атакующему всё равно нужен первый этап, например уязвимость в браузере или другой способ выполнить код внутри песочницы. Но в связке с браузерной дырой Bad Epoll может стать вторым этапом для выхода на уровень ядра.

Публичной эксплуатации в реальных атаках на момент публикации не подтверждено. The Hacker News пишет, что уязвимость не числилась в каталоге Known Exploited Vulnerabilities CISA, а доступный рабочий код связан с kernelCTF proof-of-concept. 

Интересно, что Bad Epoll появился в том же участке кода, где ранее нашли CVE-2026-43074 — другую гонку в epoll. В разборе Chung пишет, что обе гонки пришли из одного изменения 2023 года, а исправление оказалось нетривиальным: первый патч не закрыл проблему полностью, корректный фикс попал в основную ветку только через два месяца после первичного сообщения.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.