
Arquivado, movido para codesource/cve-check. Script de shell para detectar a exposição e as mitigações da CVE-2026-31431 (Copy Fail) em sistemas Linux: verificação do kernel, estado do módulo, parâmetros de boot, acessibilidade do AF_ALG e status de patch da distribuição.
[!IMPORTANT] Este repositório está arquivado. A verificação Copy Fail agora reside em cve-check, juntamente com outras verificações de vulnerabilidades e um modo opcional
--fixque aplica a remediação. Consulte checks/CVE-2026-31431 para esta verificação.curl -fsSL https://raw.githubusercontent.com/codesource/cve-check/main/cve-check.sh | sudo bash -s -- CVE-2026-31431O
check_copyfail.shabaixo ainda funciona, mas já não é atualizado.
Scripts de shell para detetar vulnerabilidades do kernel Linux, verificar o estado das mitigações e orientar a remediação — concebidos para serem executados localmente ou em frotas através de SSH, Ansible ou pssh.
Copy Fail é uma vulnerabilidade de escalada de privilégios local (LPE) de gravidade elevada no módulo criptográfico algif_aead do kernel Linux. Uma falha lógica introduzida em 2017 permite que qualquer utilizador local sem privilégios escreva 4 bytes controlados na page cache de qualquer ficheiro legível — o suficiente para sobrescrever um binário setuid e obter root. Existe uma prova de conceito funcional em Python de 732 bytes, publicamente disponível.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (Elevada) |
| Divulgada | 29 de abril de 2026 |
| Afetados | Kernels Linux 4.13 – 6.x (2017–2026) |
| Distribuições | Ubuntu, RHEL, SUSE, Debian, Amazon Linux e a maioria das restantes |
| Explorável remotamente | Não — requer acesso local |
| Correção disponível | Parcial — consulte os avisos da sua distribuição |
| Verificação | Requer root? |
|---|---|
| Versão do kernel — se está no intervalo afetado (≥ 4.13) | Não |
Módulo algif_aead — carregado, presente no disco ou na lista negra | Não |
Parâmetros de arranque — presença de initcall_blacklist=algif_aead_init | Não |
| Acessibilidade do socket AF_ALG — se o caminho de exploração está aberto | Não |
| Estado do SELinux | Não |
| Estado do AppArmor | Sim — apenas saída parcial sem root |
| Estado da correção da distribuição — CVE listada no changelog do kernel | Não |
Não é necessário root para executar o script — todas as verificações exceto o estado do AppArmor funcionam como utilizador normal. Recomenda-se executar com
sudopara obter resultados completos, e é a opção mais segura quando se faz pipe a partir decurl.
O script foi concebido para funcionar em todas as principais distribuições Linux:
| Família de distribuição | Verificação do gestor de pacotes | Caminho dos módulos |
|---|---|---|
| Debian, Ubuntu | dpkg + changelog do kernel | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + link do aviso | /usr/lib/modules/ |
| Fedora | rpm + fallback /usr/lib/modules/ | /usr/lib/modules/ |
Requer
bash— o script utiliza sintaxe específica do bash e não será executado emsh,ashoudash. No Alpine Linux (que utiliza busybox ash por predefinição), instale primeiro o bash:apk add bash
Sem root — a maioria das verificações funciona:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
Com root — resultados completos, incluindo o status do AppArmor:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
Dica: Fixe um SHA de commit específico em produção para que o script não mude sob você:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # without root
sudo bash check_copyfail.sh # full results
Loop SSH
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
SSH Paralelo
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
Aplique estas medidas por ordem de preferência:
1. Corrija o seu kernel (melhor solução)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. Adicionar o módulo à lista de bloqueio (imediato, persistente)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. Descarregue o módulo agora (imediato, não persistente entre reinicializações)
sudo rmmod algif_aead
4. Parâmetro de inicialização do kernel (alternativa à lista de bloqueio)
Adicione initcall_blacklist=algif_aead_init à sua configuração do GRUB e reinicie.