
# Playbooks Ansible para auditar e mitigar a CVE-2026-31431 ("Copy Fail"), uma vulnerabilidade de escalonamento local de privilégios no módulo `algif_aead` do kernel Linux que afeta todas as principais distribuições desde 2017.
Escalonamento de privilégios / corrupção de memória no
algif_aeaddo kernel Linux
Playbooks de auditoria e mitigação baseados em Ansible — prontos para uso em produção
Copy Fail (CVE-2026-31431) é uma vulnerabilidade no módulo algif_aead
do kernel Linux — a interface AEAD voltada para o espaço do usuário da
família de sockets criptográficos AF_ALG.
Uma falha no caminho copy_*user do kernel dentro do manipulador de
requisições AEAD permite que um usuário local sem privilégios corrompa a
memória do kernel ou escale privilégios ao criar uma requisição de socket malformada.
| Campo | Detalhe |
|---|
| ID CVE | CVE-2026-31431 |
| Apelido | Copy Fail |
| Componente | Kernel Linux — algif_aead (net/socket.c, crypto/algif_aead.c) |
| Vetor de ataque | Local |
| Privilégios necessários | Baixos (usuário sem privilégios) |
| Impacto | Corrupção de memória do kernel / escalonamento local de privilégios |
| Corrigido | Patch do kernel upstream em andamento — verifique o fornecedor da sua distribuição |
| Distribuição | Versões afetadas | Status |
|---|---|---|
| Ubuntu 22.04 / 24.04 | kernels < versão corrigida | Patch pendente — veja o USN da Ubuntu |
| Debian 12 (Bookworm) | kernels < versão corrigida | Patch pendente |
| RHEL / AlmaLinux / Rocky 8 e 9 | kernels < versão corrigida | Patch pendente |
| Amazon Linux 2 / 2023 | kernels < versão corrigida | Patch pendente |
| Upstream genérico | algif_aead compilado ou carregado automaticamente | Vulnerável se o módulo estiver presente |
Um sistema não está em risco imediato se
algif_aeadnão estiver carregado e nenhuma ferramenta de espaço do usuário o carregar sob demanda (veja a Etapa 1 da auditoria).
| Subsistema | Afetado por este CVE? | Afetado pela mitigação? |
|---|---|---|
| dm-crypt / LUKS | Não | Não |
| kTLS | Não | Não |
| IPsec / StrongSwan | Não | Não |
| OpenSSL (build padrão) | Não | Não |
| GnuTLS / NSS | Não | Não |
| OpenSSH | Não | Não |
| OpenSSL engine afalg | Potencialmente sim | Sim — revise antes de aplicar |
Ferramentas kcapi-enc / kcapi-dgst | Sim | Sim |
.
├── audit_algif_aead.yml # Etapa 1 — auditoria: detectar exposição por host
├── mitigate_copyfail.yml # Etapa 2 — mitigação: descarregar + colocar na lista negra o módulo
└── README.md # Este documento
community.general (ansible-galaxy collection install community.general)become: true (sudo) nos hosts de destinolsof instalado nos alvos (geralmente presente por padrão)inventory.ini está no gitignore — ele permanece local e nunca chega ao repositório.
inventory.ini.example é o modelo versionado a partir do qual todos começam.
# Clonar e preparar
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
# Edite inventory.ini com seus hosts reais e então execute:
ansible-playbook -i inventory.ini audit_algif_aead.yml
Os seguintes caminhos estão no gitignore para evitar vazamento de dados de infraestrutura:
| Caminho no gitignore | Por quê |
|---|---|
inventory.ini | Nomes de host / IPs reais |
inventories/ | Qualquer diretório de inventário local |
copyfail_reports/ | A saída da auditoria contém versões de kernel, listas de processos |
.vault_pass | Arquivo de senha do Ansible Vault |
*.retry | Artefatos de retry do Ansible |
Execute o playbook de auditoria antes de tocar em qualquer coisa. Ele coleta evidências por host e grava um relatório tanto localmente quanto em cada alvo.
ansible-playbook -i inventory.ini audit_algif_aead.yml
Os relatórios são baixados para ./copyfail_reports/<hostname>_audit.txt.
| Verificação | Comando | Veredito |
|---|---|---|
| Versão do kernel | uname -r | Informativo |
| Módulo carregado? | lsmod | grep algif_aead | Carregado = risco de exposição |
| Sockets AF_ALG ativos | lsof | grep AF_ALG | Usuários encontrados = revisão obrigatória |
| Engine afalg do OpenSSL | openssl engine | grep afalg | Ativo = revisar impacto |
| Ferramentas kcapi presentes | which kcapi-* | Presentes = usuários potenciais |
| Mitigação já aplicada | stat /etc/modprobe.d/disable-algif.conf | Presente = já mitigado |
| Condição | Ação recomendada |
|---|---|
| Módulo NÃO carregado | Risco imediato baixo — monitore o patch do kernel |
| Módulo carregado, sem usuários de socket AF_ALG | Seguro aplicar a mitigação |
| Módulo carregado e usuários AF_ALG ativos | Revise os processos antes de aplicar a mitigação |
| Arquivo de mitigação já presente | A mitigação foi aplicada anteriormente — verifique |
Execute a auditoria primeiro. O playbook de mitigação é seguro para executar de forma idempotente, mas a auditoria fornece a trilha de evidências.
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 com install algif_aead /bin/falsealgif_aead do kernel em execução (sem necessidade de reinicialização para proteção inicial)update-initramfs no Debian/Ubuntu, dracut --force no RHEL)/var/backup/copyfail_mitigation/mitigation.logNenhuma reinicialização é necessária para remover o módulo da memória.
Uma reinicialização ainda é recomendada para confirmar que a lista negra entra em vigor e para estabelecer um estado pós-mitigação limpo.
Após a conclusão do playbook, verifique em qualquer host de destino:
# O módulo NÃO deve aparecer
lsmod | grep algif_aead
# O arquivo de lista negra deve existir e conter a linha de instalação
cat /etc/modprobe.d/disable-algif.conf
# O carregamento manual deve ser rejeitado
sudo modprobe algif_aead # Esperado: FATAL: Module algif_aead not found or refused
Quando o fornecedor lançar um kernel corrigido e você o tiver aplicado:
# Em cada host — remova a lista negra
sudo rm /etc/modprobe.d/disable-algif.conf
# Reconstrua o initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# Reinicialize no kernel corrigido
sudo reboot
Lançado sob a Licença MIT.
Use por sua conta e risco. Sempre valide em um ambiente de homologação antes
de aplicar em sistemas de produção.
Mantido pela comunidade. PRs e relatos de problemas são bem-vindos.