
Exploit em C para CVE-2026-31431 (Falha de Cópia) visando a vulnerabilidade de splice AF_ALG do Linux. Inclui teste de detecção e escalada de privilégios via manipulação do cache de página do /usr/bin/su para obter shell root.
CVE-2026-31431 (Copy Fail) PoC em C, alinhado logicamente ao exploit Python original theori-io/copy-fail-CVE-2026-31431.
Apenas para pesquisa de segurança autorizada e ambientes experimentais. Proibido usar em sistemas não autorizados.
No Linux AF_ALG, authencesn(hmac(sha256),cbc(aes)) no caminho splice + AEAD pode escrever 4 bytes do AAD no cache de páginas do arquivo de destino (o conteúdo do disco permanece inalterado).
O comportamento do exploit neste repositório é consistente com o original:
/usr/bin/susu, que carrega o su falso do cache de páginas adulterado, geralmente obtendo um shell root sem senhacopy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Gera:
| Produto | Descrição |
|---|---|
bin/copy-fail-test | Detecção de vulnerabilidade (arquivo sentinela temporário, não modifica arquivos do sistema) |
bin/copy-fail-exploit | Escalação de privilégios (modifica o cache de páginas de /usr/bin/su e depois exec su) |
Após compilar em um sistema de versão mais recente, se aparecer GLIBC_2.34 / GLIBC_2.38 not found, execute na máquina de compilação:
make static
Copie bin/copy-fail-test e bin/copy-fail-exploit para a máquina alvo e execute. Também é possível executar make no código-fonte na máquina alvo (linkagem dinâmica, tamanho menor).
./bin/copy-fail-test
echo $?
| Código de Saída | Significado |
|---|---|
| 0 | Nenhuma característica de vulnerabilidade exibida / pré-condições não atendidas |
| 2 | Característica de vulnerabilidade presente |
| 1 | Erro durante o teste |
./bin/copy-fail-exploit
id
Nenhuma saída é o comportamento esperado; se bem-sucedido, entra em um shell root. Em caso de falha, echo $? geralmente retorna 1.
AF_ALGbind do algoritmo authencesn(hmac(sha256),cbc(aes))/usr/bin/susplice pode escrever no socket AF_ALGSe o detector informar cannot be instantiated (No such file or directory):
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Algumas distribuições desabilitam algif_aead via modprobe (como a mitigação do Ubuntu USN), é necessário reabilitá-lo em uma máquina experimental com root antes de testar.
Após o teste de escalação (no shell root), pode descartar a poluição do cache de páginas:
echo 3 > /proc/sys/vm/drop_caches
Ou reinicie a máquina virtual.