[#] Bad Epoll: в Linux и Android нашли уязвимость для получения root-доступа
robot(spnet, 1) — All
2026-07-08 10:44:04


В ядре Linux раскрыта уязвимость Bad Epoll, зарегистрированная как [ CVE-2026-46242 ]( https://nvd.nist.gov/vuln/detail/CVE-2026-46242 ) . Она позволяет обычному локальному пользователю без специальных прав повысить привилегии до root. По данным автора исследования Джэёна Чона, проблема затрагивает не только Linux-десктопы и серверы, но и часть Android-устройств на новых версиях ядра — это отдельно подчёркивается в [ описании Bad Epoll ]( https://github.com/J-jaeyoung/bad-epoll ) .

Ошибка находится в подсистеме epoll — стандартном механизме Linux для отслеживания множества файловых дескрипторов, сетевых соединений и событий ввода-вывода. Такие механизмы активно используют серверы, браузеры и сетевые сервисы, поэтому просто отключить epoll нельзя. В [ техническом разборе ]( https://github.com/J-jaeyoung/security-research/blob/submit-cve-2026-46242/pocs/linux/kernelctf/CVE-2026-46242_lts_cos/docs/vulnerability.md ) уязвимость описана как гонка, приводящая к use-after-free: при одновременном закрытии связанных epoll-объектов один поток освобождает внутренние структуры, а другой продолжает к ним обращаться.

Если точнее, проблема проявляется при ситуации, когда один epoll-дескриптор следит за другим, а оба дескриптора закрываются параллельно. После вызова __ep_remove() поле file->f_ep временно обнуляется, и конкурирующий __fput() может решить, что дополнительная очистка уже не нужна. В результате объект struct eventpoll или связанный с ним struct file освобождается слишком рано, но код продолжает работать с указателями на уже освобождённую память. Именно это и даёт атакующему примитив для повреждения памяти ядра.

Для атаки не нужны дополнительные capabilities и не требуются user namespaces — достаточно наличия CONFIG_EPOLL, что делает проблему особенно неприятной для обычных Linux-систем. Согласно [ первичному отчёту исследователя ]( https://github.com/J-jaeyoung/security-research/blob/submit-cve-2026-46242/pocs/linux/kernelctf/CVE-2026-46242_lts_cos/docs/vulnerability.md ) , баг был внесён в ядро коммитом [ 58c9b016e128 ]( https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58c9b016e128 ) в 2023 году, а исправлен коммитом [ a6dc643c693 ]( https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a6dc643c693 ) .

Несмотря на очень узкое окно гонки, исследователь подготовил рабочий эксплойт для Google kernelCTF. В [ описании эксплуатации ]( https://github.com/J-jaeyoung/security-research/blob/submit-cve-2026-46242/pocs/linux/kernelctf/CVE-2026-46242_lts_cos/docs/exploit.md ) показано, как ошибка превращается в 8-байтную запись в освобождённую структуру, затем в утечку памяти ядра через /proc/self/fdinfo, перехват file->f_op->poll и ROP-цепочку для получения root. Для цели lts-6.12.67 заявлена надёжность около 99%, для COS — около 98%; Android-эксплойт, по словам автора, ещё находится в работе.

Под ударом находятся ядра, основанные на ветке 6.4 и новее, если в них не перенесено исправление. Старые Android-устройства на ядрах 6.1, включая Pixel 8 и похожие модели, автор [ считает неуязвимыми ]( https://github.com/J-jaeyoung/bad-epoll ) . Пользователям и администраторам остаётся единственный нормальный вариант защиты — установить обновление ядра от своего дистрибутива или вендора устройства.

https://www.linux.org.ru/news/security/18335032