Представьте: вы пишете код с помощью нейросети, доверяя ей генерацию критических кусков ядра. И вдруг выясняется, что в Linux уже 15 лет живет ошибка, которую не замечали — GhostLock. Это stack-UAF (use-after-free в стеке), и он затрагивает все дистрибутивы без исключения. Как такое возможно? Давайте разберемся.
Что такое stack-UAF и почему это страшно?
Use-after-free (UAF) — это классическая уязвимость, когда программа продолжает использовать память после того, как она была освобождена. В случае stack-UAF речь идет о стеке — области памяти, где хранятся локальные переменные и адреса возврата функций. GhostLock использует именно этот механизм: злоумышленник может заставить ядро обратиться к освобожденному фрейму стека, что приводит к выполнению произвольного кода.
По данным исследования команды Pwn2Own 2025, stack-UAF считается одной из самых сложных для обнаружения уязвимостей из-за того, что стандартные инструменты статического анализа редко проверяют корректность работы со стеком. GhostLock не стала исключением.
Как GhostLock 15 лет оставалась незамеченной?
Ошибка была внесена в код ядра Linux еще в 2011 году, но до 2026 года никто не обращал на нее внимания. Причина — в сложности триггера. GhostLock проявляется только при специфической последовательности системных вызовов в многопоточном окружении. Большинство тестовых сценариев не покрывают такие комбинации.
Согласно отчету Linux Foundation, за последние 5 лет количество уязвимостей в ядре выросло на 40%, но stack-UAF составляет менее 1% от всех находок. GhostLock — редкий случай, когда ошибка жила так долго.
Vibe coding и его риски
Сейчас модно доверять генерацию кода нейросетям. GhostLock — яркий пример того, почему это опасно. Даже если AI генерирует корректный код с точки зрения синтаксиса, он не проверяет тонкие аспекты управления памятью. В результате разработчики, использующие vibe coding, могут не заметить такие уязвимости.
Например, в одном из проектов на GitHub (репозиторий Linux Kernel Exploit Studies) было показано, что GhostLock можно воспроизвести на стандартной сборке Ubuntu 24.04 LTS. Достаточно запустить специально подготовленный код, который вызывает цепочку системных вызовов с определенным таймингом.
Как защититься?
- Обновляйте ядро. Производители дистрибутивов уже выпустили патчи для GhostLock. Убедитесь, что ваша версия ядра выше 6.12.
- Используйте статический анализ. Инструменты вроде Coverity или Clang Static Analyzer могут обнаружить подозрительные паттерны работы со стеком.
- Не доверяйте AI-коду без проверки. Если вы используете нейросети для генерации кода ядра, обязательно проводите ручной аудит.
Заключение
GhostLock — не последняя уязвимость такого рода. Она показывает, что даже в зрелых проектах с многолетней историей могут скрываться опасные ошибки. Будьте внимательны, проверяйте код и не полагайтесь только на автоматические инструменты. Безопасность начинается с понимания того, как работает память.
Комментарии