В мире информационной безопасности произошло событие, которое заставило администраторов по всему миру срочно обновлять серверы. Исследователи из компаний Theori и Xint Code обнаружили критическую уязвимость нулевого дня (zero-day) в ядре Linux, получившую идентификатор CVE-2026-31431 и неофициальное название "Copy Fail". Этот дефект позволяет неавторизованным локальным пользователям получить полный доступ к системе с правами суперпользователя.
Уязвимость CVE-2026-31431
Copy Fail относится к категории уязвимостей локального повышения привилегий (local privilege escalation, LPE). В отличие от нашумевшей в своё время уязвимости Dirty Cow, которая основывалась на состояниях гонки и часто приводила к краху системы, Copy Fail представляет собой детерминированную логическую ошибку. Это означает, что эксплуатация не требует повторных попыток или особых временных окон. Достаточно выполнить всего один скрипт. Злоумышленнику нужен скрипт на Python размером всего 732 байта - и система оказывается скомпрометированной.
Особую опасность уязвимости придаёт её незаметность. Дело в том, что эксплойт изменяет кеш страниц в оперативной памяти, а не сам файл на физическом диске. Механизм обратной записи ядра никогда не помечает повреждённую страницу как "грязную". Поэтому стандартные средства контроля целостности, проверяющие контрольные суммы на диске, просто не замечают подмены. Атака происходит тихо и без следов на носителе.
Техническая подоплёка
Корень проблемы кроется в комбинации трёх механизмов ядра: сокетов типа AF_ALG, системного вызова splice и криптографического шаблона аутентификации с шифрованием. Интерфейс AF_ALG предоставляет обычным пользователям доступ к криптографическим функциям ядра. Когда злоумышленник с помощью команды splice передаёт данные файла в сокет AF_ALG, система напрямую ссылается на кешированные страницы этого файла.
В 2017 году разработчики ядра внедрили оптимизацию, позволяющую выполнять криптографические операции "на месте", то есть использовать одну и ту же область памяти для ввода и вывода. И вот тут в дело вступает алгоритм authencesn - он непреднамеренно использует границу выходных данных как временную рабочую область, записывая четыре байта за установленный предел. Такая четырёхбайтовая перезапись даёт атакующему возможность модифицировать кеш любого читаемого файла. Достаточно подобрать файл setuid-двоичного кода, отвечающего за смену пользователя, и внедрить туда шелл-код. Повышение привилегий до root происходит мгновенно.
Масштаб поражения
Уязвимость затрагивает все основные дистрибутивы Linux, выпущенные начиная с 2017 года: Ubuntu, Amazon Linux, Red Hat Enterprise Linux и SUSE. Поскольку кеш страниц является общесистемным ресурсом, проблема выходит далеко за рамки локального повышения привилегий на отдельной машине. Copy Fail служит ещё и примитивом для побега из контейнера. Иными словами, атакующий может выйти за границы одного контейнера и скомпрометировать весь узел Kubernetes.
Баг был внедрён в ядро версии 4.14 и оставался незамеченным почти десять лет. Обнаружить его удалось только с помощью анализа с использованием искусственного интеллекта, проведённого специалистами Theori и Xint Code.
Что делать
Разработчики ядра Linux уже выпустили патчи, закрывающие CVE-2026-31431. Исправление доступно в версиях 6.18.22, 6.19.12 и 7.0. Фикс заключается в удалении ошибочного механизма работы "на месте". Разработчики вернулись к более безопасному подходу - раздельной обработке, когда области памяти для источника и получателя хранятся отдельно.
Системным администраторам следует немедленно обновить ядро на всех серверах. Если немедленное обновление невозможно, существует временная мера защиты. Необходимо заблокировать уязвимый модуль с помощью установки правила установки для algif_aead, направив его на /bin/false в каталоге конфигурации modprobe. После этого следует удалить активный модуль algif_aead из работающей системы.
Впрочем, временная блокировка лишь отсрочка. Учитывая, что для эксплуатации достаточно одного скрипта, а система не оставляет следов на диске, затягивать с установкой патча нельзя. Copy Fail - напоминание о том, что даже проверенные временем механизмы ядра могут таить опасность, особенно когда оптимизация кода обгоняет соображения безопасности.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-31431
- https://git.kernel.org/stable/c/fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8
- https://git.kernel.org/stable/c/ce42ee423e58dffa5ec03524054c9d8bfd4f6237
- https://git.kernel.org/stable/c/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5