Уязвимость GhostLock в ядре Linux, существовавшая 15 лет, позволяет повысить привилегии и покинуть контейнер

linux

Исследователи из компании Nebula Security обнаружили критическую уязвимость в ядре Linux, получившую название GhostLock (CVE-2026-43499). Проблема присутствует в коде начиная с версии ядра 2.6.39, выпущенной в 2011 году, и оставалась незамеченной на протяжении пятнадцати лет. Разработчики выпустили патч в апреле 2026 года. Уязвимость позволяет надёжно повышать привилегии в системе и выполнять побег из контейнера практически во всех дистрибутивах Linux.

Уязвимость GhostLock (CVE-2026-43499)

GhostLock относится к классу use-after-free (использование после освобождения) и возникает в подсистеме rtmutex - механизме реального времени для мьютексов (примитивов синхронизации). Конкретная ошибка находится в функции remove_waiter() в файле kernel/locking/rtmutex.c. При операциях с futex (быстрый механизм блокировок в пользовательском пространстве) ядро некорректно очищает поле pi_blocked_on у неверной задачи. В результате остаётся висящий указатель на структуру rt_mutex_waiter, выделенную на стеке. После возврата управления в пользовательское пространство эта область памяти становится недействительной, но указатель сохраняется.

Для эксплуатации злоумышленнику требуется организовать взаимодействие трёх потоков и трёх переменных futex, создав цикл зависимости, который вынуждает ядро перейти на путь отката -EDEADLK. Во время этого отката remove_waiter() вызывается для чужого потока, что и приводит к появлению ссылок на освобождённую стековую память. После установки висящего указателя атакующий запускает код, который его разыменовывает, превращая ошибку в мощный примитив эксплуатации.

Исследователи продемонстрировали, что этот примитив позволяет записывать произвольные данные в почти любые области памяти ядра. Для этого освобождённая стековая область переиспользуется через системные вызовы, например prctl(PR_SET_MM_MAP). Злоумышленник подменяет содержимое висящей структуры rt_mutex_waiter собственными данными. В результате появляется возможность изменять структуры ядра, в том числе красно-чёрные деревья, используемые в очередях ожидания мьютексов. Это даёт контролируемую запись указателей.

Цепочка эксплойта включает несколько продвинутых техник для надёжного срабатывания. Среди них - обход рандомизации адресного пространства ядра (KASLR) с помощью атак на тайминг предвыборки кеша, использование областей памяти CPU Entry Area для предсказуемого размещения данных ядра, а также эксплуатация таблиц указателей на функции, например inet6_protos. Перезаписывая обработчик протокола UDP для IPv6, атакующий перенаправляет выполнение кода и получает полный контроль над ядром.

На финальном этапе применяется техника DirtyMode, при которой одна запись в ядре изменяет биты доступа чувствительных записей sysctl, в частности /proc/sys/kernel/core_pattern. Это позволяет выполнять произвольные бинарные файлы с правами root, завершая цепочку повышения привилегий. Сообщается, что надёжность эксплойта достигает 97%. Атака была успешно продемонстрирована в среде kernelCTF от Google, за что исследователи получили вознаграждение более 92 тысяч долларов.

GhostLock затрагивает все системы Linux с версиями ядра от 2.6.39 до 7.1 включительно, если не установлен патч. Важно, что уязвимость не требует повышенных привилегий или изолированных пространств имён, что значительно расширяет поверхность атаки. Особенно уязвимы контейнерные среды, так как проблема позволяет преодолеть изоляцию контейнера и получить доступ к хостовой системе.

Разработчики выпустили исправление, корректирующее логику в remove_waiter(): теперь обновляется правильная структура задачи (waiter->task), а не выполняющегося в данный момент потока. Дополнительные меры защиты включают включение параметра RANDOMIZE_KSTACK_OFFSET, усложняющего предсказание переиспользования стека, и ограничение пользовательских помощников через STATIC_USERMODE_HELPER. Однако эти меры выполняют роль защиты в глубину и не отменяют необходимость немедленной установки патча.

Командам по информационной безопасности настоятельно рекомендуется обновить ядро до последней исправленной версии без задержек. Учитывая широкую распространённость затронутых систем и высокую вероятность эксплуатации, GhostLock является одной из наиболее значимых уязвимостей ядра Linux, раскрытых за последние годы. Особую угрозу она представляет для облачной инфраструктуры, контейнерной безопасности и сред совместного хостинга. Ситуация в очередной раз подтверждает, что даже долгоживущие ошибки в фундаментальных компонентах операционных систем могут оставаться незамеченными, а их последствия требуют оперативных действий со стороны всего сообщества.

Ссылки

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