
Um Ansible Playbook para mitigar a vulnerabilidade CVE-2026-31431 em sistemas operacionais baseados em RHEL e Debian.
Um playbook Ansible para aplicar e reverter a mitigação do módulo do kernel CVE-2026-31431 (AF_ALG) em sistemas Debian/Ubuntu e RHEL/Rocky/AlmaLinux.
Este playbook mitiga a CVE-2026-31431 desabilitando o módulo vulnerável do kernel algif_aead:
grubby para adicionar um argumento de bloqueio de initcall do kernel⚠️ Importante: O playbook NÃO reinicia automaticamente seus servidores. Ele exibe uma mensagem de lembrete quando uma reinicialização é necessária, permitindo que os operadores agendem reinicializações durante janelas de manutenção.
Arquivos de configuração de exemplo são fornecidos no diretório examples/:
# Copiar inventário de exemplo
cp examples/inventory/hosts.ini inventory/hosts.ini
# Copiar configuração ansible de exemplo (opcional)
cp examples/ansible.cfg ansible.cfg
Consulte examples/README.md para instruções detalhadas de personalização.
Edite inventory/hosts.ini com os detalhes dos seus servidores:
[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
Para aplicar a mitigação em todos os hosts do seu inventário:
ansible-playbook mitigation-playbook.yaml
Para aplicar a hosts ou grupos específicos:
ansible-playbook mitigation-playbook.yaml --limit webservers
Para reverter (remover) a mitigação:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
Ou use a tag rollback:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
Para remover arquivos drop-in do systemd obsoletos (se estiver migrando de uma versão anterior desta mitigação):
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."
}
| Família de SO | Reinicialização Necessária Quando | Comportamento |
|---|---|---|
| Debian/Ubuntu | O módulo estava "em uso" e não pôde ser descarregado | Somente lembrete |
| RHEL/Rocky/Alma | Grubby fez alterações nos argumentos do kernel | Somente lembrete |
O playbook foi projetado para nunca reiniciar automaticamente, dando aos operadores controle total sobre as janelas de manutenção.
| Variável | Padrão | Descrição |
|---|---|---|
rollback | false | Defina como true para reverter a mitigação |
run_systemd_cleanup | false | Defina como true para remover drop-ins do systemd obsoletos |
target_hosts | all | Limita a execução a hosts ou grupos específicos |
mitigation_serial | 25% | Tamanho do lote para execução em lote |
mitigation - Executa apenas as tarefas de aplicação da mitigaçãorollback - Executa apenas as tarefas de reversãosystemd-cleanup - Executa apenas as tarefas de limpeza do systemdExemplo:
# Executar apenas tarefas de mitigação
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# Executar apenas tarefas de reversão
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
Após executar o playbook (e reiniciar se solicitado), verifique se a mitigação está ativa:
# Verificar se o módulo está bloqueado
cat /etc/modprobe.d/disable-algif.conf
# Verificar se o módulo está carregado (não deve retornar nada)
lsmod | grep algif_aead
# Verificar se o argumento do kernel está presente
grep initcall_blacklist /proc/cmdline
# Deve exibir algo como:
# ... initcall_blacklist=algif_aead_init ...
Licença MIT - Consulte o arquivo LICENSE para detalhes
Contribuições são bem-vindas! Envie issues e pull requests.
Este playbook foi criado com inspiração nas seguintes fontes:
Este playbook é fornecido como está. Sempre teste minuciosamente em seu ambiente antes de aplicar em sistemas de produção. Os autores não são responsáveis por qualquer dano ao sistema ou indisponibilidade causados pelo uso deste playbook.