После обнаружения уязвимости CVE-2026-31431, получившей название "Copy Fail" от исследователей Xint Code, безопасность Linux столкнулась с еще одной проблемой. Эта проблема проектирования, отнюдь не являющаяся теоретической ошибкой, позволяет непривилегированному локальному пользователю предсказуемо и незаметно повысить свои привилегии и получить полный доступ суперпользователя.
Исследователи отмечают, что эта уязвимость была успешно использована в ведущих дистрибутивах, таких как Ubuntu, Amazon Linux, RHEL и SUSE, подтверждая, что любая система, работающая под управлением ядра версии ниже 4.14 и поддерживающая сокеты AF_ALG, потенциально уязвима для этой атаки.
Операции на месте и переполнение кэша страниц
Что касается уязвимости, то упоминается, что она связана с оптимизацией, введенной в 2017 году в криптографический API ядра (AF_ALG). Эта модификация была направлена на устранение ненужной буферизации путем выполнения операций аутентифицированного шифрования (AEAD) непосредственно в том же пространстве памяти, известных как операции «на месте».
Критическая проблема возникает при сочетании этой оптимизации с функцией splice(), которая передает данные между файловыми дескрипторами путем прямой передачи ссылок на кэш страниц ядра вместо физического копирования данных. При запросе расшифровки структура памяти была сконфигурирована таким образом, что целевой буфер, который должен быть временным пространством для пользователя, в итоге оказывался напрямую связан со страницами кэша, содержащими данные системного файла.
Аутентификация и запись за пределы памяти.
Основной причиной уязвимости является аномальное поведение алгоритма аутентификации. В отличие от других криптографических процедур, которые строго соблюдают границы целевых буферов, этот конкретный алгоритм использует память пользователя в качестве временного рабочего пространства (блокнота) для перестановки последовательностей байтов во время вычисления аутентификационных тегов.
В этом процессе алгоритм записывает четыре байта за пределы установленной границы области вывода. Благодаря оптимизации на месте и цепочке ссылок, созданной функцией splice(), эта, казалось бы, безобидная запись пересекает границу пользовательской памяти и попадает непосредственно на страницу кэша ядра, связанную с обрабатываемым файлом.
Эта цепочка логических ошибок предоставляет злоумышленнику возможность произвольно перезаписывать четыре байта в определенных позициях кэша страниц для любого файла, который он может прочитать. Отправляя серию тщательно рассчитанных запросов, злоумышленник может внедрить вредоносный код в версию критически важных исполняемых файлов в оперативной памяти с установленным битом suid, например, в инструмент переключения пользователей.
Поскольку все операции чтения сначала обращаются к кэшу страниц, при следующем вызове легитимной утилиты система выполнит внедренный код из памяти, мгновенно предоставляя права root без изменения физического файла на жестком диске. Еще более тревожно то, что, поскольку изоляция контейнеров использует кэш страниц базового хоста, эта уязвимость служит прямым путем для выхода за пределы виртуализированных сред, таких как кластеры Kubernetes, и компрометации основного узла.
Аварийные обновления и решения для устранения неполадок
Учитывая серьезность этой уязвимости, группы технического обслуживания выпустили экстренные обновления, окончательное решение которых заключается в отмене оптимизации на месте в файле algif_aead.c, строгом разделении списков исходной и целевой памяти, чтобы предотвратить попадание страниц кэша в пути, доступные для записи.
Эти исправления уже интегрированы в ядра версий 6.18.22, 6.19.12 и 7.0 и переносятся в ветки долгосрочной поддержки. Администраторам, которые не могут немедленно перезапустить или обновить свои серверы, рекомендуется отключить модуль ядра algif_aead, если он был скомпилирован отдельно, или существенно ограничить создание сокетов AF_ALG с помощью политик безопасности, таких как SELinux, — средства защиты, которое, например, обеспечивает безопасность современных устройств Android от этой угрозы.
Наконец, если вас интересует более подробная информация, вы можете найти ее по следующей ссылке.