Устранение CVE-2026-31431 (системы на Linux)
CVE-2026-31431 «Copy Fail» — локальное повышение привилегий в ядре Linux. Как понять, затронут ли ваш сервер, и как закрыть уязвимость.
Как закрыть CVE-2026-31431 («Copy Fail») на серверах Linux
- 1Проверить, затронут ли серверuname -r, затем поискать CVE-2026-31431 в списке изменений ядра.
- 2Поставить пропатченное ядроПредпочтительно всегда, когда дистрибутив его выпустил.
- 3Либо применить обходной приёмПолностью отключает уязвимый интерфейс algif_aead. Эффективность полная.
- 4ПерезагрузитьсяНи один из путей не вступает в силу до перезапуска сервера.
- 5Проверить после перезагрузкиУбедиться, что параметр загрузки активен либо что работает пропатченное ядро.
Что такое Copy Fail
CVE-2026-31431 с прозвищем «Copy Fail» — уязвимость локального повышения привилегий в ядре Linux высокой степени опасности (CVSS 7.8). Ей подвержены практически все основные дистрибутивы Linux, вышедшие с 2017 года.
Проблема живёт в криптографическом интерфейсе ядра algif_aead. Связав вызов сокета AF_ALG со splice(), непривилегированный локальный пользователь может выполнить контролируемую запись четырёх байт в страничный кэш любого читаемого файла — включая setuid-root бинарники вроде /usr/bin/su. Рабочий эксплойт на Python объёмом 732 байта опубликован и стабильно срабатывает в разных дистрибутивах, без гонок и привязки ко времени.
Затронут ли мой сервер
Если у вас любой дистрибутив Linux с ядром, выпущенным между 2017 годом и патчем (апрель 2026), — да. Сюда входят:
- CentOS 7, CentOS Stream 8/9/10
- RHEL 7/8/9/10, AlmaLinux, Rocky Linux, CloudLinux
- Ubuntu 18.04, 20.04, 22.04, 24.04 (Ubuntu 26.04 и новее не затронуты)
- Debian 10, 11, 12
Уязвимость требует локального выполнения кода — сама по себе удалённо она не эксплуатируется. Но на виртуальном хостинге, в многопользовательских средах, контейнерах и CI это критический риск: любой пользователь с доступом к оболочке, в том числе через взломанный сайт, может подняться до root.
Быстрая проверка
Выполните на любом сервере Linux:
uname -r
grep -E 'authencesn|algif_aead' /proc/crypto
Если в списке изменений ядра ещё нет упоминания CVE-2026-31431, сервер уязвим и ему нужно либо пропатченное ядро, либо обходной приём ниже.
Как чинить
Есть два варианта:
- Поставить пропатченное ядро из репозитория дистрибутива и перезагрузиться (предпочтительно, когда оно доступно).
- Применить обходной приём ниже: он полностью отключает уязвимый интерфейс
algif_aead. Эффективность полная, требуется только перезагрузка.
Обходной приём никак не влияет на dm-crypt/LUKS, kTLS, IPsec, OpenSSL, GnuTLS, NSS и SSH. Затронуты только приложения, которые явно используют пользовательский криптоинтерфейс AF_ALG для операций AEAD, — на обычных серверах это редкость.
Обходной приём для систем на RPM (CentOS / RHEL / AlmaLinux / Rocky Linux / CloudLinux)
Применимо к: CentOS 7, CentOS Stream 8/9/10, RHEL 7/8/9/10, AlmaLinux 8/9/10, Rocky Linux 8/9/10, CloudLinux 7/8/9/10.
Шаг 1 — добавьте параметр загрузки ядра
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
Шаг 2 — убедитесь, что параметр установлен
sudo grubby --info=DEFAULT | grep args
В выводе должно быть initcall_blacklist=algif_aead_init.
Шаг 3 — перезагрузите сервер
sudo reboot
Шаг 4 — проверьте после перезагрузки, что приём действует
cat /proc/cmdline | grep initcall_blacklist
grep -E 'authencesn|algif_aead|af_alg' /proc/crypto
dmesg | grep -i 'blacklisting initcall'
Ожидаемый результат:
- Первая команда должна показать параметр.
- Вторая команда должна вернуть пустой вывод.
- Третья должна показать
blacklisting initcall algif_aead_init.
Если все три проверки прошли, приём действует полностью.
Обходной приём для систем на Debian / Ubuntu
Применимо к: Debian 10/11/12, Ubuntu 18.04, 20.04, 22.04, 24.04.
Шаг 1 — создайте чёрный список modprobe
sudo tee /etc/modprobe.d/disable-algif-aead.conf > /dev/null <<'EOF'
install algif_aead /bin/false
blacklist algif_aead
EOF
Шаг 2 — сделайте резервную копию конфигурации GRUB
sudo cp /etc/default/grub /etc/default/grub.backup-copyfail
Шаг 3 — добавьте параметр загрузки ядра
sudo sed -i 's|^GRUB_CMDLINE_LINUX="\(.*\)"|GRUB_CMDLINE_LINUX="\1 initcall_blacklist=algif_aead_init"|' /etc/default/grub
Шаг 4 — убедитесь, что параметр добавлен
grep GRUB_CMDLINE_LINUX /etc/default/grub
В выводе должно быть initcall_blacklist=algif_aead_init.
Шаг 5 — пересоберите конфигурацию GRUB
sudo update-grub
Если update-grub недоступен (минимальный Debian), используйте:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Шаг 6 — обновите initramfs
sudo update-initramfs -u
Шаг 7 — перезагрузите сервер
sudo reboot
Шаг 8 — проверьте после перезагрузки, что приём действует
cat /proc/cmdline | grep initcall_blacklist
lsmod | grep algif_aead
grep -E 'authencesn|algif_aead|af_alg' /proc/crypto
dmesg | grep -i 'blacklisting initcall'
Ожидаемый результат:
- Первая команда должна показать параметр.
- Вторая и третья должны вернуть пустой вывод.
- Четвёртая должна показать
blacklisting initcall algif_aead_init.
Как снять обходной приём после установки пропатченного ядра
Когда дистрибутив выпустит ядро с официальным исправлением CVE-2026-31431, поставьте его и снимите обходной приём. Спешить некуда — приём может оставаться сколь угодно долго без вреда.
Для систем на RPM
sudo dnf update kernel
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
(В CentOS 7 вместо dnf используйте yum.)
Для систем на Debian/Ubuntu
sudo apt update && sudo apt upgrade
sudo rm /etc/modprobe.d/disable-algif-aead.conf
sudo sed -i 's| initcall_blacklist=algif_aead_init||' /etc/default/grub
sudo update-grub
sudo update-initramfs -u
sudo reboot
Убедитесь, что работает пропатченное ядро
uname -r
Сравните с официальной версией пропатченного ядра вашего дистрибутива. Для AlmaLinux 9 это 5.14.0-611.49.2.el9_7 или новее, для AlmaLinux 8 — 4.18.0-553.121.1.el8_10 или новее. По остальным дистрибутивам смотрите официальные страницы с бюллетенями безопасности.
Источники
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- Технический разбор Theori: https://xint.io/blog/copy-fail-linux-distributions
- Страница проекта: https://copy.fail/
- Бюллетень Red Hat: https://access.redhat.com/security/cve/CVE-2026-31431
- Бюллетень Ubuntu: https://ubuntu.com/security/CVE-2026-31431
- Трекер Debian: https://security-tracker.debian.org/tracker/CVE-2026-31431
- Объявление AlmaLinux: https://almalinux.org/blog/2026-05-01-cve-2026-31431-copy-fail/
Если нужна помощь с применением обходного приёма на вашем сервере, откройте тикет в поддержку.