Уязвимость Copy Fail позволяет любому пользователю Linux получить root-доступ
29.04.2026 была обнаружена уязвимость «Copy Fail», получившая номер CVE-2026-31431. Уязвимость затрагивает все дистрибутивы Linux, собранные с 2017 по апрель 2026 года.
Уязвимость позволяет получить любому пользователю в Linux доступ к правам суперпользователя.
Подробно об уязвимости
Проблема кроется в криптографической подсистеме ядра, а именно в шаблоне authencesn и модуле algif_aead, который обеспечивает доступ к AEAD-шифрованию через сокетный интерфейс AF_ALG.
Уязвимость позволяет обычному пользователю записать всего 4 байта в page cache(кэш оперативной памяти) любого читаемого файла, не трогая сам файл на диске. Для этого используется связка из AF_ALG и системного вызова splice()— штатных механизмов Linux, доступных всем пользователям без исключений. Ошибка возникает, когда authencesn в процессе дешифрования записывает данные за границы буфера, попадая в страницы кэша, переданные через splice().
Атакующий выбирает setuid-бинарник — программу, которая при запуске автоматически получает права администратора (например, /usr/bin/su), и подменяет 4 байта в её кэшированной копии. После этого программа вместо запроса пароля выдаёт root-доступ.
Файл на диске остаётся неизменным. Системы контроля целостности (AIDE, sha256sum), сравнивающие файл с эталоном, ничего не замечают. Следов атаки практически нет: изменённая страница живёт только в оперативной памяти и исчезает после перезагрузки или очистки кэша.
Кто подвержен
Уязвимости подвержены все дистрибутивы Linux, собранные с 2017 по апрель 2026 года - согласно исследованию, один и тот же эксплойт работает на всех архитектурах без необходимости вносить специфические изменения.
Самому большому риску подвержены многопользовательские серверы, облачные сервисы, содержащие пользовательский код, контейнеры, Kubernetes и CI-раннеры - всё из-за возможности размещения пользователями собственного кода на сервере.
Определить наличие уязвимости можно с помощью python-скрипта:
python3 -c 'import socket;s=socket.socket(38,5,0);s.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));print("vulnerable");s.close()' 2>/dev/null || echo "Not vulnerable / blocked"Исправление
В операционной системе
Самое главное, что необходимо сделать - это обновить ядро с патчем из коммита a664bf3, поскольку данное исправление убирает in-place-оптимизацию в модуле algif_aead. Также крайне рекомендуется следить за обновлениями ядра на сайтах Red Hat и Ubuntu.
В качестве временного решения, до выпуска обновления ядра, модуль algif_aead можно отключить:
Выполните команды:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/nullПосле выполнения команд рекомендуется перезагрузить сервер.
Внести изменения в /etc/default/grub, добавив значение initcall_blacklist=algif_aead_init в переменную GRUB_CMDLINE_LINUX.
После этого сделайте резервную копию конфигурации GRUB и сгенерируйте новую:
cp -a /boot/grub2/grub.cfg /boot/grub2/grub.cfg_BACK
grub2-mkconfig -o /boot/grub2/grub.cfgЗатем перезагрузите сервер и проверьте, установился ли флаг для модуля:
grep initcall_blacklist /proc/cmdlineВ качестве альтернативного решения для AlmaLinux, воспользуйтесь утилитой grubby для отключения модуля, выполнив команду:
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"Затем перезагрузите сервер и проверьте, установился ли флаг для модуля:
grep initcall_blacklist /proc/cmdlineЕсли на сервере используются контейнеры, необходимо заблокировать возможность создавать AF_ALG-сокеты через seccomp. Отключения модуля не должно повлиять на частые задачи, в том числе на LUKS, IPsec и OpenSSL без afalg-движка.
Если вы пользуетесь WSL и/или WSL2, необходимо вручную установить патч и также вручную пересобрать ядро.
ispmanager 6
В ispmanager 6 в качестве временного решения можно отключить доступ к Shell всем пользователям со сбросом SSH-сессий (пользовательские сессии встроенного в панель Shell-клиента не будут сброшены!):
while IFS= read -r line; do /usr/local/mgr5/sbin/mgrctl -m ispmgr user.edit elid=$line limit_shell=off sok=ok; pkill -u $line sshd; done < <(/usr/local/mgr5/sbin/mgrctl -m ispmgr user | awk '{print $1}' | cut -c 6-)Данный скрипт не предназначен для применения на высоконагруженных серверах и панелях с большим количеством пользователей - применяйте его с осторожностью!
В таких системах работа скрипта займет много времени, а также процесс может и вовсе зависнуть.