Пятнадцать лет в ядре Linux: как GhostLock даёт root любому

Баг просидел в коде с 2011 года, и всё это время его никто толком не трогал. Нашла его команда Nebula Security, присвоила имя GhostLock и зарегистрировала как CVE-2026-43499. Суть проста и неприятна одновременно: любой пользователь, у которого есть обычная учётная запись на машине, может получить полный root-доступ. Никаких особых прав, никаких экзотических настроек, никакого сетевого доступа — достаточно самых обычных вызовов потоков (threading), которые доступны любой локальной программе. Уязвимость затрагивает практически все основные дистрибутивы Linux, выпускавшиеся начиная с 2011 года — то есть почти всё, что стоит на серверах, в облаках и на десктопах последние полтора десятка лет.
В тестах Nebula эксплойт срабатывал в 97% случаев. На тестовой машине атака занимала около пяти секунд — меньше, чем нужно, чтобы заварить чай. Отдельно неприятная деталь: эксплойт умеет вырываться из контейнеров, то есть container escape тоже на столе. Google через свою программу kernelCTF выплатил команде Nebula за находку 92 337 долларов. Нашли баг не руками — с помощью VEGA, собственного ИИ-инструмента Nebula для поиска уязвимостей. Пока в реальных атаках эксплуатация GhostLock не зафиксирована, но рабочий код эксплойта Nebula уже опубликовала, так что теория быстро может стать практикой.
Технически всё упирается в механизм ядра, придуманный для того, чтобы срочные задачи не блокировались из-за мелких и незначительных. В редком сценарии — когда операция блокировки (lock) заходит в тупик и вынуждена откатиться назад — процедура очистки, которая должна прибираться после того, как задача перестала ждать, срабатывает не в тот момент. В итоге стирается запись не той задачи, а ядро остаётся с «протухшим» указателем на память, которая уже освобождена и переиспользована кем-то другим. Это классический use-after-free. Оттолкнувшись от этой единственной точки входа, Nebula выстроила цепочку из нескольких шагов и довела дело до полноценного выполнения кода с правами root.
По шкале CVSS уязвимости присвоили 7.8 из 10 — это высокий уровень серьёзности, но не критический. Причина мягкой оценки простая: атакующему нужно уже находиться внутри системы под собственной учёткой. Для однопользовательского ноутбука риск невелик. Для облачного сервера с десятками арендаторов на одном железе — совсем другая история.
Патч вышел в апреле, коммит 3bfdc63936dd. Но и тут не обошлось без сюрприза: исходное исправление породило отдельный баг с падением системы, зарегистрированный как CVE-2026-53166. По состоянию на начало июля апстрим всё ещё дорабатывал финальную чистку для этой вторичной проблемы. Из этого следует практический вывод: ставить нужно не первую попавшуюся сборку с патчем, а актуальную текущую версию ядра — ранние патчи могли оказаться неполными или содержать побочные баги.
С дистрибутивами картина неровная. У Ubuntu на начало июля патч добрался до самой свежей версии и части облачных сборок ядра, а вот Ubuntu 24.04, 22.04 и 20.04 LTS — самые массовые версии в промышленной эксплуатации — на тот момент либо всё ещё уязвимы, либо патч находится в процессе. Общая рекомендация звучит скучно, но верно: проверять конкретные советы (advisories) своего дистрибутива и смотреть точные номера пропатченных пакетов, а не полагаться на предположения о том, что всё уже закрыто.
Есть два параметра сборки ядра, которые усложняют эксплуатацию, но не устраняют дыру: RANDOMIZE_KSTACK_OFFSET и STATIC_USERMODE_HELPER. Их стоит включить как временную меру, но полагаться на них как на решение не стоит — это подпорки, а не фикс.
В приоритете на патчинг стоят системы с несколькими пользователями и общим доступом — shared и multi-tenant машины, облачные серверы, контейнеры, CI-раннеры. Логика простая: злоумышленнику для этой атаки нужен именно локальный плацдарм, а такие системы как раз чаще всего дают посторонним пользователям хоть какой-то доступ внутрь.
GhostLock не одинок. В том же 2026 году всплыл Bad Epoll (CVE-2026-46242) — его называют «близким родственником» GhostLock, он тоже поднимает обычного пользователя до root и подтверждён через kernelCTF. Отличие в том, что Bad Epoll работает и на Android, что для этого класса багов встречается нечасто. Интересно, что в той же области кода модель Mythos от Anthropic была отмечена за обнаружение смежной проблемы. Ещё один пример — Copy Fail (CVE-2026-31431), который уже попал в список CISA как уязвимость, реально эксплуатируемую в атаках, а не только в лабораторных условиях. Это подтверждает, что подобные баги — не абстрактная теория для конференций, а рабочий инструмент атакующих.
Общая нить между этими находками — все они всплыли благодаря автоматизированным, ИИ-управляемым инструментам поиска уязвимостей. Затронутый код — механизм наследования приоритета для futex (futex priority inheritance) — старая и активно используемая часть ядра родом из 2011 года, которую годами всерьёз никто не перепроверял, пока за неё не взялись автоматические анализаторы кода.
Отдельного внимания заслуживает цепочка эксплойтов, которую в Nebula назвали IonStack. GhostLock играет в ней вторую половину. Первая половина — CVE-2026-10702, уязвимость в Firefox, которая позволяет выполнить код внутри браузера и вырваться из его песочницы. Дальше в дело вступает GhostLock и «довозит» полученный код до полного root-доступа. Продемонстрированная атака выглядела так: Firefox на Android, один тап по вредоносной ссылке — и полный контроль над устройством. Это хороший пример того, почему баг, требующий якобы только «локального» доступа, на деле оказывается серьёзной угрозой: в связке с уязвимостью браузера он превращается в полноценный удалённый вектор компрометации, работающий буквально по одному клику. Nebula обещает опубликовать полный технический разбор этой цепочки для Android отдельно.


Новое на сайте

Ссылка