
Reproduzi o LPE sem arquivo CVE‑2026‑31431 (“Falha de Cópia”) no Kali Linux, depois construí detecções auditd, Sigma e YARA para capturar esse exploit furtivo de kernel que não deixa vestígios em disco.
Este repositório documenta a reprodução de ponta a ponta, a engenharia de detecção e a resposta a incidentes para CVE-2026-31431 ("Copy Fail"), uma vulnerabilidade crítica de escalonamento de privilégios local no kernel Linux que afeta os kernels 4.14 até 7.0-rc.
Copy Fail é uma falha lógica, não uma corrupção de memória. Ela é determinística, afeta praticamente todas as distribuições Linux lançadas desde 2017 e é completamente fileless—o monitoramento tradicional de integridade de arquivos (AIDE, Tripwire) não consegue vê-la. Uma prova de conceito funcional cabe em apenas 732 bytes de Python.
| Componente | Detalhes |
|---|---|
| Hipervisor | VirtualBox |
| VM Alvo | Kali Linux 2026.1 |
| Kernel | 6.18.12+kali-amd64 |
| PoC do Exploit | theori-io/copy-fail-CVE-2026-31431 |
| Detecção | auditd, Sigma, YARA |
O laboratório começa confirmando que o alvo está executando um kernel vulnerável.
Detalhes da versão e do kernel do Kali Linux 2026.1.
Saída de uname -r mostrando o kernel vulnerável 6.18.12+kali-amd64.
O exploit requer o módulo do kernel algif_aead e o template criptográfico authencesn.
Módulo Carregado
lsmod e modinfo confirmam que algif_aead está disponível; /proc/crypto mostra o template vulnerável authencesn.
O PoC usa os.splice, que requer Python 3.10+. Verificamos o interpretador.
Versão do Python Python 3.12 está instalado e pronto.
Antes de executar o exploit completo, um verificador seguro confirma que o sistema está vulnerável.
O verificador reporta "potencialmente vulnerável", abrindo caminho para a exploração.
Uma conta testuser sem privilégios é criada para simular um atacante sem direitos especiais.
id mostra UID 1001, confirmando acesso não-root.
O PoC oficial da Theori é clonado e executado a partir da conta sem privilégios.
Repositório do exploit clonado com sucesso.
Execução do Exploit
O exploit em Python sobrescreve o page cache e detona o binário corrompido /usr/bin/su.
As saídas de whoami e id comprovam o escalonamento completo para root.
O exploit corrompe apenas o page cache em memória. O /usr/bin/su em disco mantém seu checksum original.
Correspondência SHA256
O sha256sum corresponde ao hash do pacote original mesmo após a exploração, confirmando que não houve modificação em disco.
Copy Fail não pode ser detectado pelo monitoramento de integridade de arquivos. Em vez disso, focamos nas primitivas em nível de chamadas de sistema que ele utiliza.
Implantamos regras personalizadas do auditd que disparam em:
AF_ALG (família 38)splice()
Todas as regras personalizadas estão ativas, verificadas com auditctl -l.
Após executar o exploit uma segunda vez, vemos alertas para exatamente as chamadas de sistema utilizadas:
ausearch mostra um evento de criação de socket AF_ALG a partir do processo testuser.
ausearch mostra um evento splice() do mesmo PID, uma forte correlação.
Uma regra Sigma traduz os achados do auditd para um formato de SIEM neutro em relação ao fornecedor.
Regra YAML Sigma que detecta criação de socket AF_ALG e chamadas splice().
Uma regra YARA ajuda a identificar código do exploit Copy Fail em disco.
Regra YARA que corresponde à string authencesn, constantes de socket e referências a splice() encontradas nos PoCs.
Um relatório completo de resposta a incidentes está disponível em reports/incident-copy-fail.md. Ele inclui:
Mitigação imediata (sem necessidade de reinicialização):
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
| Camada | O que Ela Vê | Status |
|---|
| auditd | Socket AF_ALG + chamadas de sistema splice | ✅ Implantado |
| Sigma | Padrões de chamadas de sistema via SIEM | ✅ Regra pronta |
| YARA | Código PoC em disco | ✅ Regra pronta |
| FIM (AIDE/Tripwire) | Alterações de arquivos | ❌ Cego – nenhuma escrita em disco ocorre |