
Port Go do PoC Copy Fail para CVE-2026-31431, uma falha do authencesn do kernel Linux que permite uma escrita de 4 bytes no cache de páginas via AF_ALG e splice. Inclui pipeline de build multi-arquitetura e documentação técnica detalhada.
Este repositório fornece um port em Go do PoC público do Copy Fail e um pipeline de build reproduzível para binários Linux de múltiplas arquiteturas.
Copy Fail (CVE-2026-31431) é uma falha lógica no kernel Linux em authencesn que permite uma escrita determinística de 4 bytes em dados de page cache referenciados através de AF_ALG + splice().
Use este projeto apenas em ambientes onde você está explicitamente autorizado a testar. Não execute este PoC contra sistemas que você não possui ou para os quais não tem permissão por escrito para avaliar.
Se você quiser testar imediatamente sem compilar a partir do código-fonte, baixe um binário de release e execute-o:
wget https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases/download/v1.0.1/copy-fail-cve-2026-31431_linux_amd64
chmod +x copy-fail-cve-2026-31431_linux_amd64
./copy-fail-cve-2026-31431_linux_amd64
Para outras arquiteturas, baixe o artefato correspondente na página de Releases do GitHub:
Compilar todos os alvos Linux:
make clean build-linux
Compilar e gerar checksums:
make clean checksums
Binários de saída em dist/:
copy-fail-cve-2026-31431_linux_amd64copy-fail-cve-2026-31431_linux_arm64copy-fail-cve-2026-31431_linux_386copy-fail-cve-2026-31431_linux_armv7SHA256SUMSExecução padrão:
./copy-fail-cve-2026-31431_linux_amd64
Usar um caminho de alvo personalizado:
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
Desabilitar a execução de su após a execução:
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
Imprimir metadados de build:
./copy-fail-cve-2026-31431_linux_amd64 -version
Se a execução falhar no offset 0 com um erro semelhante a:
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
o kernel provavelmente rejeitou o caminho AEAD in-place vulnerável (por exemplo, porque o host está corrigido para CVE-2026-31431 ou algif_aead está mitigado/desabilitado).
Verificações rápidas:
uname -r
grep -E "algif_aead|authencesn" /proc/modules
Em sistemas remediados, espera-se que este PoC falhe.
De acordo com a divulgação pública, o caminho vulnerável permite que um usuário local sem privilégios influencie uma primitiva de escrita de 4 bytes no conteúdo de page cache de arquivos legíveis sob condições específicas.
A propriedade operacional importante é que a cópia em memória do page cache pode divergir dos bytes em disco durante a execução, o que pode tornar a análise de impacto não trivial para equipes que dependem apenas de verificações de integridade em nível de disco.
Copy Fail é notável porque foi relatado como:
Em alto nível, o problema está na interseção de três mecânicas:
AF_ALG.splice().authencesn.No design vulnerável, segmentos com suporte de page cache podem ser vinculados a uma forma de requisição que posteriormente recebe escritas durante o processamento do algoritmo, violando uma suposição chave de que apenas regiões de destino pretendidas são modificadas.
No caminho documentado, authencesn usa operações de scratch no lado do destino em torno da manipulação do layout ESN e realiza uma escrita em um offset além do contrato esperado de saída de descriptografia.
Quando combinado com a configuração AEAD in-place e referências encadeadas de scatterlist, essa escrita pode atingir memória com suporte de page cache para regiões selecionadas pelo atacante.
A divulgação descreve uma evolução de múltiplos commits:
authencesn originou-se em histórico de integração anterior.AF_ALG introduziu acessibilidade a partir do espaço do usuário com interação splice().algif_aead combinou o fluxo de origem e destino de uma forma que tornou essa interseção explorável.A lição chave é o risco composicional: mudanças individualmente razoáveis podem se tornar inseguras em combinação.
O write-up público e o PoC descrevem esta sequência:
AF_ALG para authencesn(hmac(sha256),cbc(aes)).splice() para rotear dados de arquivo com suporte de page cache através do caminho de requisição.A implementação em Go deste repositório espelha a lógica do PoC público para pesquisa e validação em ambientes autorizados.
A correção relatada reverte a operação AEAD in-place vulnerável em algif_aead para o comportamento out-of-place.
Conceitualmente:
AF_ALG onde operacionalmente viável).Com base no write-up público:
| Data | Evento |
|---|---|
| 2026-03-23 | Relatório enviado à equipe de segurança do kernel Linux |
| 2026-03-24 | Confirmação inicial |
| 2026-03-25 | Discussão/revisão do patch |
| 2026-04-01 | Correção commitada ao mainline |
| 2026-04-22 | CVE-2026-31431 atribuído |
| 2026-04-29 | Divulgação pública |
A pesquisa publicada credita análise de subsistema assistida por IA e guiada por humanos, focada em caminhos de código criptográfico acessíveis a partir do espaço do usuário e proveniência de scatterlist/página sob splice().
main.go: Port do PoC em Go.Makefile: alvos de build Linux multi arquitetura determinísticos..github/workflows/build.yml: fluxo de trabalho de build CI e artefatos de release.Arquivo de fluxo de trabalho: .github/workflows/build.yml
Gatilhos:
mainv*workflow_dispatch manualComportamento:
make clean checksums.v*.Fluxo de release sugerido:
git tag v1.0.0
git push origin v1.0.0
| Distribuição | Versão do Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |