
Bash script to assess Linux host exposure to CVE-2026-31431, check kernel module status, apply mitigation by blocking algif_aead, and update kernel packages.
Este repositorio documenta um script Bash para verificar a exposicao a CVE-2026-31431 em hosts Linux, com foco em Ubuntu, e aplicar uma mitigacao simples baseada no bloqueio do modulo algif_aead.
O script opera em tres modos:
--check: coleta informacoes do host e classifica o status.--mitigate: cria uma regra de modprobe para bloquear o modulo vulneravel e tenta descarrega-lo.--update: executa atualizacao de pacotes de kernel via apt.CVE-2026-31431, tambem chamada publicamente de Copy Fail, e uma vulnerabilidade de escalacao local de privilegio no kernel Linux associada ao modulo algif_aead, que implementa a interface AEAD da API criptografica em userspace via AF_ALG.
Em termos praticos, o problema permite que um usuario local com baixa privilegio explore uma falha logica no caminho de tratamento de memoria desse subsistema e evolua para comprometimento de integridade do sistema. A classificacao publicada pelo kernel.org e refletida no NVD e CVSS 7.8, com vetor AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, ou seja: o ataque exige execucao local, mas tem alto impacto em confidencialidade, integridade e disponibilidade.
2017, quando uma otimizacao "in-place" foi adicionada ao algif_aead.22 de abril de 2026.Copy Fail e prova de conceito publica, ocorreu em 29 de abril de 2026.1 de abril de 2026, antes da divulgacao ampla aos usuarios finais.De acordo com os avisos tecnicos publicados, a falha explora a combinacao entre:
AF_ALG do kernelalgif_aeadsplice()O resultado pratico e a possibilidade de um processo local realizar uma escrita controlada de poucos bytes em paginas do page cache de arquivos legiveis. Isso e suficiente para transformar um acesso local restrito em escalacao para root em cenarios favoraveis.
O risco real nao esta apenas em "ser Linux vulneravel", mas em permitir que qualquer codigo local de baixa confianca use esse caminho do kernel. Em ambiente corporativo, isso costuma significar maior exposicao em:
Se um invasor ja obteve algum nivel de execucao local, mesmo sem root, essa CVE pode ser o passo seguinte para tomar o host. Na pratica, isso amplia o risco de:
algif_aeadO algif_aead faz parte da interface de criptografia do kernel para espaco de usuario (AF_ALG). Ele permite que aplicacoes usem primitivas criptograficas do kernel por sockets, em especial operacoes do tipo AEAD (Authenticated Encryption with Associated Data).
Esse modulo normalmente nao e essencial para a maior parte das cargas comuns de servidor. Segundo a orientacao publicada pela CERT-EU, desativar algif_aead como mitigacao temporaria:
dm-crypt ou LUKSkTLSIPsec/XFRMOpenSSL, GnuTLS, NSS ou SSH em uso padraoPor outro lado, a desativacao pode afetar:
afalgAF_ALG diretamenteaead, skcipher ou hash via kernel crypto APIEm outras palavras: para a maioria dos hosts corporativos, bloquear o modulo tende a ter baixo impacto. Em appliances, stacks customizadas de criptografia ou software altamente otimizado, o impacto deve ser validado antes.
Bloquear o modulo reduz a superficie de ataque imediatamente, mas tem trade-offs:
AF_ALG podem falhar ao inicializar ou perder aceleracao criptografica via kernelPor isso, em ambiente produtivo, o ideal e aplicar a mitigacao com janela controlada e validacao minima das aplicacoes criticas.
A mitigacao por blacklist e apenas temporaria. A correcao definitiva e:
Medidas adicionais recomendadas:
AF_ALG via seccomp em containers e pipelines, quando aplicavelafalg ou da crypto API do kernelO script inspeciona:
/etc/os-releasealgif_aeadmodprobe/var/run/reboot-required)pro fix CVE-2026-31431 --dry-run, quando disponivelCom base nisso, ele retorna uma classificacao como:
PATCHED_OR_NOT_AFFECTEDLIKELY_NOT_VULNERABLEMITIGATEDVULNERABLE_MODULE_LOADEDPOTENTIALLY_VULNERABLEUNKNOWNDe forma resumida:
PATCHED_OR_NOT_AFFECTED.algif_aead nao existir no kernel atual, o status tende a ser LIKELY_NOT_VULNERABLE.MITIGATED.VULNERABLE_MODULE_LOADED.POTENTIALLY_VULNERABLE.modinfomodprobelsmodawkgrephostnameunameapt-get para o modo --updatesudo quando executado sem rootpro opcionalmente, para enriquecer a analise em UbuntuSe o arquivo do script estiver, por exemplo, como check_cve_2026_31431.sh:
chmod +x check_cve_2026_31431.sh
./check_cve_2026_31431.sh --check
./check_cve_2026_31431.sh --check
Exemplo de saida:
Host: srv-app-01
OS: Ubuntu 24.04 LTS
Kernel: 6.8.0-58-generic
CVE: CVE-2026-31431
Module exists: 1
Module loaded: 0
Module blocked: 1
Ubuntu affected: yes
Fix available: yes
Reboot required: 0
Status: MITIGATED
Reason: algif_aead exists but is blocked and not loaded
./check_cve_2026_31431.sh --check --json
Exemplo:
{"host":"srv-app-01","os":"Ubuntu 24.04 LTS","kernel":"6.8.0-58-generic","cve":"CVE-2026-31431","module":"algif_aead","module_exists":1,"module_loaded":0,"module_blocked":1,"ubuntu_affected":"yes","fix_available":"yes","reboot_required":0,"status":"MITIGATED","reason":"algif_aead exists but is blocked and not loaded"}