
# Playbook Ansible para deteção e remediação do CVE-2026-31431 (Copy Fail) - vulnerabilidade de escalonamento local de privilégios no kernel Linux
Cópia Falha Deteção e Remediação
Uma suíte de role e playbook Ansible para detectar e remediar a CVE-2026-31431 (Copy Fail), uma vulnerabilidade crítica de escalonamento de privilégios local no módulo algif_aead do kernel Linux.
🔗 GitHub: https://github.com/parmstro/cfDr
O nome cfDr é um trocadilho com "Copy Fail Doctor" - seu remédio confiável para a CVE-2026-31431.
CVE-2026-31431 (CVSS 7.8) é uma falha lógica na interface de socket AEAD do kernel Linux (AF_ALG) descoberta em 2026. A vulnerabilidade permite que qualquer usuário local sem privilégios escale privilégios para root em segundos.
algif_aead (interface criptográfica AF_ALG)Versões do Kernel: Linux kernel >= 4.10 (lançado em 2017)
Distribuições Afetadas:
Nota: Qualquer distribuição Linux com kernel 4.10 ou mais recente é potencialmente vulnerável.
Esta vulnerabilidade é particularmente perigosa porque:
Uma vez que um atacante tenha qualquer forma de acesso local (SSH, web shell, escape de contêiner, etc.), ele pode:
Enquanto aguarda patches de kernel fornecidos pelos fornecedores, várias estratégias de mitigação estão disponíveis. cfDr implementa todas elas, com recomendações inteligentes baseadas na configuração do seu sistema.
Nem todas as remediações são iguais. Aqui está o que você precisa saber:
| Método | Root Pode Ignorar? | Cobertura | Suporte Enterprise Linux |
|---|---|---|---|
| Blacklist de Módulo | ✅ Sim (via insmod) | Impede carregamento via modprobe | Todas as versões |
| Política SELinux | ❌ NÃO (camada LSM) | Apenas domínios configurados | Todas as versões (padrão) |
| systemd seccomp | ❌ NÃO (filtro de syscall) | Apenas serviços configurados | Todas as versões |
| eBPF LSM | ❌ NÃO (camada LSM) | Em todo o sistema (se configurado) | RHEL 9+, Fedora 34+ |
Recomendação padrão do cfDr: Flag 3 (Blacklist de Módulo + SELinux)
Isso fornece duas camadas de proteção independentes:``` ┌─────────────────────────────────────────────────┐ │ Layer 1: Module Blacklist │ │ • Prevents modprobe algif_aead │ │ • Persists across reboots │ │ • CAN be bypassed by malicious root (insmod) │ ├─────────────────────────────────────────────────┤ │ Layer 2: SELinux Policy │ │ • Blocks AF_ALG socket() at syscall level │ │ • Works even if module is loaded │ │ • CANNOT be bypassed from userspace │ │ • Covers user_t, unconfined_t (majority cases) │ └─────────────────────────────────────────────────┘
Result: If either layer fails, the other still protects
### Por Que a Lista Negra de Módulos Sozinha Não É Suficiente
Um atacante determinado com acesso root pode contornar a lista negra de módulos:```bash
# Module blacklist DOES NOT prevent:
insmod /lib/modules/$(uname -r)/kernel/crypto/algif_aead.ko.xz
No entanto, isto é aceitável porque:
Para proteção completa e não contornável, você precisa de:
Lista negra de módulos + pelo menos um dos seguintes:
cfDr usa flags bitwise para ativar múltiplas mitigações:
| Valor da Flag | Mitigações Ativadas | Caso de Uso |
|---|---|---|
| 1 | Apenas lista negra de módulos | Proteção mínima, sistemas sem SELinux |
| 2 | Apenas SELinux | Ambientes somente com SELinux |
| 3 | Lista negra de módulos + SELinux | PADRÃO RECOMENDADO |
| 5 | Lista negra de módulos + seccomp | Não-SELinux com endurecimento de serviços |
| 7 | Lista negra de módulos + SELinux + seccomp | Proteção aprimorada |
| 15 | Todas as mitigações | Proteção máxima (apenas RHEL 9+) |
Calcular flags: 1 (lista negra) + 2 (SELinux) + 4 (seccomp) + 8 (eBPF) = soma
Proteção SELinux:
user_t, unconfined_t, httpd_t, postgresql_t, mysqld_tuser_t e unconfined_t cobrem a grande maioria dos cenários de ataqueProteção seccomp do systemd:
httpd, nginx, postgresql, mariadb, redis, memcachedProteção eBPF LSM:
O cfDr realiza uma avaliação abrangente em múltiplas dimensões:
uname -r
- Determina se a versão do kernel >= 4.10 (intervalo vulnerável)
- Identifica a versão do kernel e a distribuição
#### 2. Verificação de Disponibilidade do Módulo```bash
modinfo algif_aead
algif_aead existe no kernellsmod | grep algif_aead
- Determina se o módulo está atualmente carregado
- **Crítico**: Módulo carregado = ativamente explorável
#### 4. Detecção Ativa de Socket```bash
lsof -U | grep AF_ALG