Исследователи кибербезопасности обнаружили инновационный метод эксплуатации уязвимости типа use-after-free (UAF, использование после освобождения) в ядре Linux, получившей идентификатор CVE-2024-50264. Эта уязвимость, удостоенная награды Pwnie Award 2025 в категории «Лучшее повышение привилегий», привлекает внимание специалистов due to своей сложности и воздействия на основные дистрибутивы Linux. Новая методика эксплуатации успешно обходит защитные механизмы аллокатора slab и средства противодействия состоянию гонки (race condition), что делает атаку значительно более осуществимой, чем считалось ранее.
Детали узявимости
Уязвимость CVE-2024-50264 представляет собой состояние гонки в подсистеме AF_VSOCK, присутствующее в ядрах Linux, начиная с версии 4.8. Она позволяет непривилегированному злоумышленнику инициировать сценарий использования после освобождения в объекте virtio_vsock_sock в ходе операций с сокетами. Критичность уязвимости усугубляется тем, что для её эксплуатации не требуются привилегии пространств пользователей (user namespaces). Однако до недавнего времени успешная атака считалась маловероятной из-за усилений безопасности ядра, таких как рандомизированные кэши slab и SLAB-блоки, которые нарушали примитивные техники распыления кучи (heap spraying) и атаки между кэшами (cross-cache attacks).
Прорыв в исследованиях стал возможным благодаря использованию проекта kernel-hack-drill - открытой тестовой среды для разработки эксплойтов ядра Linux. Новый метод атаки комбинирует несколько продвинутых примитивов эксплуатации. Ключевым элементом стало прерывание уязвимого системного вызова connect() с помощью «бессмертного» сигнала POSIX, что позволяет надёжно вызывать состояние гонки, не завершая процесс эксплойта. Кроме того, исследователи научились использовать поведение кэша slab для повторного захвата освобождённых объектов путём межкэшевых аллокаций, тщательно манипулируя временными параметрами, чтобы заставить ядро выделять контролируемые атакующим структуры там, где ранее находились уязвимые объекты.
Важным этапом атаки является повреждение ключевых объектов ядра, таких как msg_msg и pipe_buffer, для организации утечек информации и чтения/записи по произвольным адресам. В частности, эксплойт злоупотребляет системой очереди сообщений для чтения ядерной памяти за пределами разрешённых границ, извлекая конфиденциальные указатели, включая данные учётных записей (credentials). Как отмечают эксперты, повреждение указателя страницы четвёртого pipe_buffer открыло door для дальнейшего повреждения памяти.
Этот подход демонстрирует, что даже усиленные ядра остаются уязвимыми для креативных стратегий эксплуатации. Злоумышленники могут использовать техники «скоростного прохождения» состояний гонки (race condition speedrun), чтобы обходить парное связывание объектов и быстро достигать уязвимых состояний. Метод также адаптирует типичные тактики повышения привилегий, такие как Dirty Pipe и Dirty Pagetable, для более ограниченных сред. В результате путь эксплуатации становится более оптимизированным, что повышает риск успешных атак на современные системы.
Специалисты по безопасности рекомендуют рассматривать CVE-2024-50264 как серьёзную угрозу, требующую срочного применения исправлений и пересмотра политик усиления защиты объектов ядра. Проект kernel-hack-drill теперь предоставляет ценный инструментарий для исследователей, позволяющий разрабатывать и тестировать эксплойты, что подчёркивает необходимость непрерывной работы в области инженерной безопасности внутренних компонентов Linux.
Ссылки
- http://a13xp0p0v.github.io/2025/09/02/kernel-hack-drill-and-CVE-2024-50264.html
- https://www.cve.org/CVERecord?id=CVE-2024-50264
- https://nvd.nist.gov/vuln/detail/CVE-2024-50264
- https://git.kernel.org/stable/c/5f092a4271f6dccf88fe0d132475a17b69ef71df
- https://git.kernel.org/stable/c/fd8ae346692a56b4437d626c5460c7104980f389
- https://git.kernel.org/stable/c/eb1bdcb7dfc30b24495ee4c5533af0ed135cb5f1
- https://git.kernel.org/stable/c/2a6a4e69f255b7aed17f93995691ab4f0d3c2203
- https://git.kernel.org/stable/c/44d29897eafd0e1196453d3003a4d5e0b968eeab
- https://git.kernel.org/stable/c/b110196fec44fe966952004bd426967c2a8fd358
- https://git.kernel.org/stable/c/5f970935d09934222fdef3d0e20c648ea7a963c1
- https://git.kernel.org/stable/c/6ca575374dd9a507cdd16dfa0e78c2e9e20bd05f