
Ansible-плейбуки для аудита и устранения CVE-2026-31431 («Copy Fail»), локальной уязвимости повышения привилегий в модуле `algif_aead` ядра Linux, затрагивающей все основные дистрибутивы с 2017 года.
Повышение привилегий / повреждение памяти в ядре Linux (
algif_aead)
Плейбуки аудита и смягчения на базе Ansible — готовы к запуску в production
Copy Fail (CVE-2026-31431) — это уязвимость в модуле algif_aead ядра Linux — пользовательском интерфейсе AEAD семейства крипто-сокетов AF_ALG.
Ошибка в пути copy_*user внутри обработчика запросов AEAD позволяет локальному непривилегированному пользователю повредить память ядра или повысить привилегии, создав некорректный запрос к сокету.
| Поле | Детали |
|---|
| CVE ID | CVE-2026-31431 |
| Псевдоним | Copy Fail |
| Компонент | Ядро Linux — algif_aead (net/socket.c, crypto/algif_aead.c) |
| Вектор атаки | Локальный |
| Требуемые привилегии | Низкие (непривилегированный пользователь) |
| Воздействие | Повреждение памяти ядра / локальное повышение привилегий |
| Исправлено | Патч в апстриме ядра в процессе — проверьте вашего вендора дистрибутива |
| Дистрибутив | Затронутые версии | Статус |
|---|---|---|
| Ubuntu 22.04 / 24.04 | ядра < исправленного релиза | Патч ожидается — см. Ubuntu USN |
| Debian 12 (Bookworm) | ядра < исправленного релиза | Патч ожидается |
| RHEL / AlmaLinux / Rocky 8 и 9 | ядра < исправленного релиза | Патч ожидается |
| Amazon Linux 2 / 2023 | ядра < исправленного релиза | Патч ожидается |
| Generic upstream | algif_aead скомпилирован или авто-загружается | Уязвим, если модуль присутствует |
Система не находится в непосредственной опасности, если
algif_aeadне загружен и ни один пользовательский инструмент не загружает его по требованию (см. шаг 1 аудита).
| Подсистема | Затронута этим CVE? | Затронута смягчением? |
|---|---|---|
| dm-crypt / LUKS | Нет | Нет |
| kTLS | Нет | Нет |
| IPsec / StrongSwan | Нет | Нет |
| OpenSSL (стандартная сборка) | Нет | Нет |
| GnuTLS / NSS | Нет | Нет |
| OpenSSH | Нет | Нет |
| OpenSSL afalg engine | Возможно да | Да — проверьте перед применением |
Инструменты kcapi-enc / kcapi-dgst | Да | Да |
.
├── audit_algif_aead.yml # Шаг 1 — аудит: обнаружение подверженности на каждом хосте
├── mitigate_copyfail.yml # Шаг 2 — смягчение: выгрузка + блокировка модуля
└── README.md # Этот документ
community.general (ansible-galaxy collection install community.general)become: true (sudo) на целевых хостахlsof установлен на целевых хостах (обычно присутствует по умолчанию)inventory.ini находится в gitignore — он остаётся локальным и никогда не попадает в репозиторий.
inventory.ini.example — это закоммиченный шаблон, с которого все начинают.
# Клонирование и подготовка
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# Отредактируйте inventory.ini с вашими реальными хостами, затем выполните:
ansible-playbook -i inventory.ini audit_algif_aead.yml
Следующие пути находятся в gitignore для предотвращения утечки данных инфраструктуры:
| Путь в gitignore | Почему |
|---|---|
inventory.ini | Реальные hostname / IP |
inventories/ | Любая локальная директория инвентаря |
copyfail_reports/ | Результаты аудита содержат версии ядра, списки процессов |
.vault_pass | Файл пароля Ansible Vault |
*.retry | Артефакты повторных попыток Ansible |
Запустите плейбук аудита до любых изменений. Он собирает доказательства по каждому хосту и записывает отчёт как локально, так и на каждом целевом хосте.
ansible-playbook -i inventory.ini audit_algif_aead.yml
Отчёты сохраняются в ./copyfail_reports/<hostname>_audit.txt.
| Проверка | Команда | Вердикт |
|---|---|---|
| Версия ядра | uname -r | Информационно |
| Модуль загружен? | lsmod | grep algif_aead | Загружен = риск подверженности |
| Активные сокеты AF_ALG | lsof | grep AF_ALG | Пользователи найдены = необходимо проверить |
| OpenSSL afalg engine | openssl engine | grep afalg | Активен = проверить воздействие |
| Инструменты kcapi присутствуют | which kcapi-* | Присутствуют = потенциальные пользователи |
| Смягчение уже применено | stat /etc/modprobe.d/disable-algif.conf | Присутствует = уже смягчено |
| Условие | Рекомендуемое действие |
|---|---|
| Модуль НЕ загружен | Низкий непосредственный риск — следите за патчем ядра |
| Модуль загружен, пользователей сокетов AF_ALG нет | Безопасно применять смягчение |
| Модуль загружен и пользователи AF_ALG активны | Проверьте процессы перед применением смягчения |
| Файл смягчения уже присутствует | Смягчение было применено ранее — проверьте |
Сначала запустите аудит. Плейбук смягчения безопасно запускать идемпотентно, но аудит даёт вам цепочку доказательств.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
/etc/modprobe.d/disable-algif.conf с install algif_aead /bin/falsealgif_aead из работающего ядра (перезагрузка не требуется для первоначальной защиты)update-initramfs на Debian/Ubuntu, dracut --force на RHEL)/var/backup/copyfail_mitigation/mitigation.logПерезагрузка не требуется для удаления модуля из памяти.
Перезагрузка всё же рекомендуется для подтверждения действия блокировки и установления чистого состояния после смягчения.
После завершения плейбука проверьте на любом целевом хосте:
# Модуль НЕ должен появляться
lsmod | grep algif_aead
# Файл блокировки должен существовать и содержать строку install
cat /etc/modprobe.d/disable-algif.conf
# Ручная загрузка должна быть отклонена
sudo modprobe algif_aead # Ожидается: FATAL: Module algif_aead not found or refused
Как только ваш вендор выпустит исправленное ядро и вы его примените:
# На каждом хосте — удалите блокировку
sudo rm /etc/modprobe.d/disable-algif.conf
# Пересоберите initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# Перезагрузитесь в исправленное ядро
sudo reboot
Выпущено под лицензией MIT.
Используйте на свой страх и риск. Всегда проверяйте в staging-среде перед
применением к production-системам.
Поддерживается сообществом. Приветствуются PR и отчёты об ошибках.