
# Playbook Ansible para detetar e aplicar mitigação de cmdline do kernel para CVE-2026-31431 (Copy Fail) em frotas Debian/Ubuntu/RHEL, com deteção só de leitura e aplicação idempotente.
Detecte e aplique a mitigação via linha de comando do kernel para CVE-2026-31431 ("Copy Fail") em uma frota Debian / Ubuntu / família RHEL usando Ansible.
A CVE é uma falha de escalonamento local de privilégios na interface
algif_aead AF_ALG do kernel Linux. Qualquer usuário local sem privilégios — incluindo
contas de serviço como www-data, mysql, ou processos dentro de uma aplicação web
comprometida via RCE — pode encadeá-la até root em poucas syscalls. O bug afeta todas as
principais distribuições lançadas desde 2017.
initcall_blacklist=algif_aead_init
à linha de comando do kernel — quando invocada com -e apply_mitigation=true.A lista negra via linha de comando do kernel funciona em configurações tanto embutidas
(família RHEL) quanto modulares (Debian/Ubuntu), o que o workaround frequentemente citado
modprobe blacklist algif_aead não faz.
algif_aead_init() é a função do kernel que registra o algoritmo aead AF_ALG
com o subsistema de sockets criptográficos na inicialização. O parâmetro de linha de comando
initcall_blacklist=algif_aead_init instrui o kernel a pular essa
initcall. O código vulnerável ainda está no binário do kernel, mas
socket(AF_ALG, ..., "aead") retorna ENOENT, então a primeira
syscall do exploit falha. Sem superfície alcançável, sem escalonamento de privilégios.
Quando os fornecedores lançarem kernels corrigidos e você reiniciar neles, a mitigação não será mais necessária e poderá ser removida.
# 1. Detectar (somente leitura) — gera um relatório de status por host
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. Preparar a mitigação em um único host primeiro (sem reinicialização automática)
ansible-playbook -i inventory --limit <ip-ou-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. Reinicie esse host pelo seu mecanismo habitual
# 4. Re-detecte; confirme "Mitigação ativa: sim"
# 5. Distribua para o restante da frota em lotes
O relatório de um host vulnerável tem esta aparência:
═══════════════════════════════════════════
Host: 192.168.1.42
Distro: Ubuntu 24.04
Kernel: 6.8.0-60-generic
Mitigação ativa: não
Mitigação preparada: não
═══════════════════════════════════════════
⚠️ 192.168.1.42: a mitigação da CVE-2026-31431 NÃO está ativa.
Fora do escopo desta receita. Comandos manuais:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# Família RHEL
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
O caminho de detecção é estritamente somente leitura (uname, leitura de /proc/cmdline,
leitura de /etc/default/grub, grubby --info=ALL). As sondagens usam
failed_when: false para que saídas inesperadas nunca abortem o play.
ignore_unreachable: true significa que hosts inacessíveis recebem um aviso claro
"INALCANÇÁVEL — tratar como VULNERÁVEL" em vez de falhar a execução.
O caminho de aplicação é envolvido em block/rescue para que um único host com problema
nunca interrompa o restante. A edição do grub é idempotente e condicionada a
mitigation_staged para que re-execuções sejam no-ops.
bash tests/run-checks.sh all
Etapas: lint (yamllint + ansible-lint) → syntax
(ansible-playbook --syntax-check) → dry-run (executa o playbook em
modo --check contra localhost com -c local, tanto os caminhos de detecção quanto
de aplicação). O mesmo script é invocado pela matriz do GitHub Actions em
contêineres debian:12, ubuntu:22.04, ubuntu:24.04 e almalinux:9
a cada push e pull request.
O que o dry-run não verifica:
update-grub nem dispara uma reinicialização./proc/cmdline dentro de um contêiner de CI mostra a linha de comando do host runner,
não a do contêiner, então mitigation_active na saída da CI não tem significado.
A CI prova que o playbook executa limpo; não prova que um host está
mitigado.Consulte tests/README.md para mais detalhes.
Vulnerabilidade descoberta por Taeyang Lee (Theori) e transformada em uma cadeia de exploit completa pela Xint Code Research Team, que merecem o crédito por fazer a comunidade de segurança prestar atenção. Esta receita apenas automatiza a mitigação que eles recomendaram.
Beerware. Consulte LICENSE. Em resumo: faça o que quiser com isto;
se algum dia nos encontrarmos, me pague uma cerveja.
AESTECHNO — Hugues Orgitello — empresa de design eletrônico, Montpellier, França.