
Scanner automatizado e auxiliar de correção para CVE-2026-31431, que detecta hosts Linux vulneráveis via SSH, verifica versões do kernel e aplica atualizações do kernel ou mitigações temporárias em múltiplas distribuições.
Copy Fail é um scanner de segurança automatizado e auxiliar de patch para detectar e corrigir a vulnerabilidade CVE-2026-31431 (Linux Kernel algif_aead Local Privilege Escalation) na sua infraestrutura Linux.
CVE-2026-31431 é uma vulnerabilidade de Local Privilege Escalation (LPE) no módulo do kernel Linux algif_aead (Asynchronous Cipher Interface for AEAD). Essa vulnerabilidade permite que um usuário local alcance escalonamento de privilégios para o nível root.
Esta ferramenta ajuda a:
Nota: Esta ferramenta é apenas para fins de auditoria e patch interno por sysadmins. Use apenas em sistemas que você possui ou tem autorização.

algif_aead (carregado/não carregado)Upgrade automático do kernel em hosts vulneráveis via gerenciador de pacotes:
Opção: Reboot automático após o patch
algif_aead via configuração modprobe.dBanco de dados de versões de kernel já corrigidas para:
paramiko>=3.0.0 # Biblioteca SSH
rich>=13.0.0 # Interface de terminal bonita
git clone https://github.com/gagaltotal/cve-2026-31431-copy-fail.git
cd cve-2026-31431-copy-fail
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
ou instalar manualmente:
pip install paramiko>=3.0.0 rich>=13.0.0
python3 copyfail_scanner.py --help
# Escanear sub-rede com chave SSH
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH_TO_KEY>
# Escanear vários hosts específicos
python3 copyfail_scanner.py --hosts <IP1>,<IP2>,<IP3> --user <USERNAME> [--password <PASSWORD>]
# Escanear + patch automático
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --patch
# Escanear + mitigação temporária
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --mitigate
| Opção | Descrição | Exemplo |
|---|---|---|
--subnet | Sub-rede CIDR de destino (mutuamente exclusivo com --hosts) | --subnet 192.168.1.0/24 |
--hosts | Lista de IPs separados por vírgula (mutuamente exclusivo com --subnet) | --hosts 192.168.1.10,192.168.1.20 |
--user | Nome de usuário SSH (obrigatório) | --user root |
--password | Senha SSH (opcional, use se não houver chave) | --password secret123 |
--key | Caminho da chave privada SSH | --key ~/.ssh/id_rsa |
--port | Porta SSH (padrão: 22) | --port 2222 |
--threads | Número de threads paralelas (padrão: 30) | --threads 50 |
--patch | Upgrade automático do kernel em hosts vulneráveis | --patch |
--reboot | Reboot automático após o patch (use com --patch) | --patch --reboot |
--mitigate | Aplicar mitigação temporária (desativar algif_aead) | --mitigate |
--output | Exportar resultados do escaneamento para arquivo JSON | --output resultados.json |
--yes | Pular prompt de confirmação antes de patch/mitigação | --yes |
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa
Saída: Exibe tabela de resultados do escaneamento e resumo
python3 copyfail_scanner.py \
--hosts 10.0.1.5,10.0.1.6,10.0.1.7 \
--user admin \
--password my_password123
python3 copyfail_scanner.py \
--subnet 172.16.0.0/16 \
--user root \
--key ~/.ssh/id_rsa \
--mitigate
Ação: Escaneia todos os hosts e desativa o módulo algif_aead nos hosts vulneráveis (solicita confirmação)
python3 copyfail_scanner.py \
--subnet 192.168.0.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--patch
Ação: Faz upgrade do kernel, mas não reinicia automaticamente (requer reboot manual)
python3 copyfail_scanner.py \
--subnet 10.10.0.0/24 \
--user root \
--key ~/.ssh/id_rsa \
--patch \
--reboot \
--yes
Ação: Escaneia, aplica patch no kernel, reinicia automaticamente, pula confirmação
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user sysadmin \
--key ~/.ssh/id_rsa \
--output scan_results_$(date +%Y%m%d_%H%M%S).json
Saída: Tabela no terminal + resultados JSON no arquivo
python3 copyfail_scanner.py \
--subnet 10.0.0.0/25 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--port 2222 \
--threads 50
Exemplo de saída do escaneamento:
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
┃ IP ┃ Hostname ┃ Distro ┃ Kernel ┃ algif ┃ Status ┃ Action ┃ Notes ┃
┣━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━┫
┃ 192.168.1.10 ┃ web-01 ┃ Ubuntu 22.04 ┃ 6.8.0-60 ┃ LOADED ┃ ✓ SEGURO ┃ - ┃ Corrigido ┃
┃ 192.168.1.11 ┃ web-02 ┃ Ubuntu 20.04 ┃ 5.4.0-200 ┃ NOT_LDD ┃ ✗ VULNER ┃ Corrigido ┃ - ┃
┃ 192.168.1.12 ┃ db-01 ┃ RHEL 8.9 ┃ 5.14.0-560 ┃ LOADED ┃ ? DESCON ┃ - ┃ Distro ┃
┗━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┛
Resumo:
Total de hosts escaneados: 12
Acessíveis (SSH): 11
Offline: 1
VULNERÁVEIS: 2
Já corrigidos: 8
Status desconhecido: 1
hostname -funame -r){
"cve": "CVE-2026-31431",
"scan_time": "2026-05-08T15:30:45.123456",
"results": [
{
"ip": "192.168.1.10",
"ssh_reachable": true,
"auth_ok": true,
"hostname": "web-01",
"distro": "Ubuntu 22.04 LTS",
"os_id": "ubuntu",
"kernel_version": "6.8.0-60-generic",
"algif_loaded": true,
"modprobe_blocked": false,
"patched": true,
"patch_applied": false,
"mitigation_applied": false,
"retry_count": 0,
"error": ""
}
]
}
O scanner suporta detecção automática para as seguintes distribuições:
| Distribuição | Gerenciador de Pacotes | Versões de Kernel Corrigidas | Observações |
|---|---|---|---|
| Ubuntu | apt | 6.8.0-60, 5.15.0-130, 5.4.0-216 | LTS e atual |
| Debian | apt | 6.1.137, 5.10.235 | Versões estáveis |
| RHEL | dnf/yum | 5.14.0-570 | Inclui CentOS Stream |
| AlmaLinux | dnf | 5.14.0-570 | Substituição direta do RHEL |
| Rocky | dnf | 5.14.0-570 | Foco empresarial |
| Fedora | dnf | 6.14.4, 6.13.12, 6.12.25 | Última versão |
| Amazon Linux | dnf | 6.1.134, 5.10.235, 4.14.353 | Compatibilidade AWS |
| SUSE / openSUSE | zypper | 6.4.0-18, 5.14.21-150600.24 | Empresarial e comunidade |
| Arch Linux | pacman | 6.14.4 | Última versão |
Para distribuições não detectadas: Verifique a versão do kernel manualmente. Kernel >= 6.14.4 geralmente já é seguro.
Se você preferir patch manual ou o patch automático falhar, siga o guia por distribuição:
sudo apt update
sudo apt upgrade linux-image-generic kmod
sudo reboot
sudo dnf clean metadata
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo zypper update kernel-default
sudo reboot
sudo pacman -Syu linux linux-headers
sudo reboot
Se você não puder reiniciar imediatamente para o upgrade do kernel, aplique a mitigação:
# Desativar o módulo algif_aead via modprobe.d
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# Descarregar o módulo se já estiver carregado
sudo rmmod algif_aead 2>/dev/null || echo "Module not loaded"
IMPORTANTE:
CONFIG_CRYPTO_USER_API_AEAD=y, o módulo está embutido no kernel, então modprobe.d não é eficaz → o upgrade do kernel é a única soluçãoError: Porta SSH não está aberta
Solução:
nc -zv <IP> 22--port se o SSH estiver em porta personalizadaError: Autenticação SSH falhou
Solução:
chmod 600 ~/.ssh/id_rsassh -i ~/.ssh/id_rsa user@host--password se preferir autenticação por senhaExit code 1: dpkg: error processing...
Solução:
sudo visudoapt/dnf/yum sem prompt de senhaRetry: 3x | Host temporary unavailable
Solução:
--threads 10Status: ? DESCONHECIDO
Solução:
uname -r e compare com o advisoryExit code 1: Failed to lock apt database
Solução:
sudo tail -f /var/log/apt/term.logUso Interno Apenas — Esta ferramenta é apenas para fins de auditoria e gerenciamento de patch por sysadmins autorizados.
DISCLAIMER:
- Use apenas em sistemas que você possui ou tem autorização explícita para acessar
- Patch automático e reboot podem causar downtime
- Teste em ambiente de staging antes da implantação em produção
- Certifique-se de ter backups antes do patch
- O desenvolvedor não é responsável por perda de dados ou interrupção de serviço
Autor: GagalTotal
Repositório: https://github.com/gagaltotal/cve-2026-31431-copy-fail
Contato: ghostgtr666
Para bug report, solicitação de recursos ou perguntas:
Última Atualização: 8 de maio de 2026
Versão do Scanner: 1.0