
Shell scanner for CVE-2026-31431 "Copy Fail" — uma escalada local de privilégios via corrupção do cache de páginas do kernel Linux (algif_aead/AF_ALG). Verifica a versão do kernel, o status do patch, o estado do módulo, a exposição setuid e as mitigações. Suporta Debian 11–13 e Ubuntu 20.04–25.10. Pronto para CI/CD (códigos de saída + saída JSON).
Scanner baseado em shell para CVE-2026-31431 "Copy Fail", uma vulnerabilidade de escalonamento local de privilégios no subsistema criptográfico do kernel Linux (algif_aead / interface AF_ALG). Um usuário local sem privilégios pode escrever 4 bytes no cache de páginas em memória de um binário setuid (por exemplo, /usr/bin/su) e obter um shell root — sem tocar no arquivo em disco.
a664bf3d603d| Distribuição | Versão | Versão corrigida |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | correção mainline (≥ 6.15) |
| Genérica | qualquer | verificação de intervalo mainline (4.14 – 6.14 vulnerável) |
Derivados do Ubuntu baseados nas versões acima (Pop!_OS, Linux Mint, Elementary OS, etc.) também são detectados via ID_LIKE em /etc/os-release.
# Verificação básica
bash cve-2026-31431-detect.sh
# Sem saída colorida (arquivos de log, CI)
bash cve-2026-31431-detect.sh --no-colour
# Saída JSON (legível por máquina, para pipelines)
bash cve-2026-31431-detect.sh --json
# Modo silencioso — apenas imprime o resumo
bash cve-2026-31431-detect.sh --quiet
# Combinar opções
bash cve-2026-31431-detect.sh --json --quiet
Não é necessário root. Nenhum pacote a instalar além de um shell padrão (bash ≥ 4.3) e, opcionalmente, python3 para o teste ao vivo do socket AF_ALG.
| Código | Significado |
|---|---|
0 | Nenhuma condição vulnerável encontrada |
1 | Uma ou mais condições vulneráveis encontradas |
2 | Erro do script / não foi possível concluir as verificações |
Projetado para uso em pipelines DevSecOps — encaminhe a saída JSON para seu SIEM, sistema de tickets ou painel de conformidade.
O script imprime resultados em dois idiomas:
Ambas as seções são impressas em stdout após os resultados de cada verificação.
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
sudo apt update && sudo apt full-upgrade && sudo reboot
# Após reiniciar: uname -v → deve mostrar >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# Após reiniciar: cat /proc/version_signature
Só é eficaz quando CONFIG_CRYPTO_USER_API_AEAD=m (compilado como módulo). Não tem efeito se a opção estiver compilada no kernel (=y).
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
Isso não afeta SSH, dm-crypt/LUKS, OpenSSL, GnuTLS, NSS, servidores web ou criptografia de disco.
MIT
| # | Verificação | Método |
|---|
| 1 | Versão do kernel | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | Presença de patch | Versão de build do Debian, versão do pacote Ubuntu, prefixo de commit em /proc/version |
| 3 | Módulo algif_aead | /proc/modules, blacklist do modprobe.d, .ko em disco |
| 4 | Socket AF_ALG | Tentativa ao vivo de socket(AF_ALG, …) via Python 3 |
| 5 | Binários setuid | Binários setuid-root comuns como alvos de escrita |
| 6 | Mitigações | Status de AppArmor, SELinux, seccomp |
| 7 | Configuração do kernel | CONFIG_CRYPTO_AUTHENC, CONFIG_CRYPTO_USER_API_AEAD |
| 8 | Namespaces de usuário | unprivileged_userns_clone, max_user_namespaces |
| 9 | Hugepages transparentes | Configuração de THP e efeito na exploração |
| 10 | Ambiente | Detecção de Docker / Kubernetes / WSL, aviso de root |