
An Ansible Playbook для устранения уязвимости CVE-2026-31431 на ОС на базе RHEL и Debian.
Плейбук Ansible для применения и отката mitigation уязвимости CVE-2026-31431 (AF_ALG) в модуле ядра на системах Debian/Ubuntu и RHEL/Rocky/AlmaLinux.
Этот плейбук устраняет CVE-2026-31431, отключая уязвимый модуль ядра algif_aead:
grubby для добавления аргумента initcall blacklist в ядро⚠️ Важно: Плейбук НЕ перезагружает серверы автоматически. Он выводит напоминание, когда требуется перезагрузка, позволяя операторам планировать её в окна технического обслуживания.
Примеры конфигурационных файлов находятся в каталоге examples/:
# Скопируйте пример inventory
cp examples/inventory/hosts.ini inventory/hosts.ini
# Скопируйте пример конфигурации ansible (необязательно)
cp examples/ansible.cfg ansible.cfg
См. examples/README.md для подробных инструкций по настройке.
Отредактируйте inventory/hosts.ini, указав данные ваших серверов:
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
ansible all -m ping
ansible-playbook mitigation-playbook.yaml
Для применения mitigation ко всем хостам из inventory:
ansible-playbook mitigation-playbook.yaml
Для применения к конкретным хостам или группам:
ansible-playbook mitigation-playbook.yaml --limit webservers
Для отката (удаления) mitigation:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
Или используйте тег rollback:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
Для удаления устаревших drop-in файлов systemd (при миграции со старой версии этого mitigation):
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
| Семейство ОС | Перезагрузка требуется, когда | Поведение |
|---|---|---|
| Debian/Ubuntu | Модуль был "в использовании" и не мог быть выгружен | Только напоминание |
| RHEL/Rocky/Alma | Grubby внёс изменения в аргументы ядра | Только напоминание |
Плейбук разработан так, чтобы никогда не перезагружать систему автоматически, предоставляя операторам полный контроль над окнами технического обслуживания.
| Переменная | По умолчанию | Описание |
|---|---|---|
rollback | false | Установите true для отката mitigation |
run_systemd_cleanup | false | Установите true для удаления устаревших drop-in файлов systemd |
target_hosts | all | Ограничение выполнения конкретными хостами или группами |
mitigation_serial | 25% | Размер пакета для последовательного выполнения |
mitigation — Выполнить только задачи применения mitigationrollback — Выполнить только задачи откатаsystemd-cleanup — Выполнить только задачи очистки systemdПример:
# Выполнить только задачи mitigation
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# Выполнить только задачи отката
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
После запуска плейбука (и перезагрузки, если она была запрошена) проверьте, что mitigation активен:
# Проверьте, что модуль в blacklist
cat /etc/modprobe.d/disable-algif.conf
# Проверьте, что модуль не загружен (должен вернуть пусто)
lsmod | grep algif_aead
# Проверьте наличие аргумента ядра
grep initcall_blacklist /proc/cmdline
# Должен вывести что-то вроде:
# ... initcall_blacklist=algif_aead_init ...
Лицензия MIT — см. файл LICENSE
Вклад приветствуется! Пожалуйста, отправляйте issues и pull requests.
Этот плейбук создан на основе следующих источников:
Этот плейбук предоставляется как есть. Всегда тщательно тестируйте его в вашей среде перед применением на production-системах. Авторы не несут ответственности за любой ущерб системе или простои, вызванные использованием этого плейбука.