
Prova de conceito de exploit para CVE-2026-31431 (Copy Fail), uma LPE do kernel Linux via corrupção de page-cache em algif_aead, com orientações de detecção, laboratório e mitigação.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead⚠️ USO AUTORIZADO APENAS — Este repositório é estritamente para testadores de penetração, pesquisadores de segurança e defensores operando sob autorização legal. O uso indevido é crime.
Copy Fail é uma vulnerabilidade de escalação local de privilégios (LPE) divulgada em 29 de abril de 2026, afetando praticamente todas as principais distribuições Linux que executam kernels desde 2017.
Usuário Não Privilegiado ──► AF_ALG + splice() ──► Escrita de 4 bytes no Cache de Página ──► ROOT
A vulnerabilidade decorre de uma otimização in-place defeituosa introduzida em 2017 (commit 72548b093ee3) dentro do módulo algif_aead da API de criptografia do espaço do usuário do kernel Linux (AF_ALG).
AF_ALG (API de criptografia do espaço do usuário)
└── módulo algif_aead
└── template authencesn ◄── VULNERÁVEL
└── otimização in-place (2017)
└── req->src == req->dst ◄── páginas de splice() encadeadas no scatterlist dst gravável
Passo 1: Abrir socket AF_ALG AEAD
socket(AF_ALG, SOCK_SEQPACKET, 0)
Passo 2: Enviar páginas splice() referenciando o arquivo alvo
(páginas do cache de página de um binário privilegiado, ex. /usr/bin/sudo)
Passo 3: Acionar escrita temporária de authencesn
authencesn usa o buffer dst como área de rascunho →
escreve 4 bytes controlados ALÉM da região legítima de saída
Passo 4: A entrada do cache de página para o arquivo alvo agora está corrompida
(arquivo no disco intacto — apenas a cópia em memória foi modificada)
Passo 5: Executar o binário modificado → ROOT
O cache de página do kernel Linux armazena cópias em memória de arquivos. Quando um arquivo é lido, suas páginas são armazenadas em cache. A chamada de sistema splice() pode referenciar diretamente essas páginas em cache. Ao alimentar páginas do cache de página no scatterlist do AEAD do AF_ALG, a escrita temporária do authencesn cai dentro dessas páginas em cache, efetivamente corrigindo a cópia em memória de qualquer arquivo legível — incluindo binários privilegiados como sudo, pkexec ou passwd.
A correção upstream reverte a otimização defeituosa de 2017:
# Corrigido no commit: a664bf3d603d
git show a664bf3d603d
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← Você está aqui
├── 📄 LICENSE ← Licença de Pesquisa/Educacional
├── 📄 DISCLAIMER.md ← Política de uso legal e ético
├── 📄 CHANGELOG.md ← Histórico de versões
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← Análise aprofundada: causa raiz e mecânica
│ ├── exploitation-walkthrough.md ← Metodologia passo a passo
│ ├── affected-kernels.md ← Matriz completa de versões de kernel/distro
│ ├── detection.md ← Cobertura de Defender, Tenable, Wazuh
│ └── references.md ← Todos os CVEs, blogs, avisos
│
├── 📂 exploit/
│ ├── README.md ← Uso, pré-requisitos, distros testadas
│ ├── copyfail.py ← PoC de referência (educacional)
│ ├── trigger.c ← Gatilho em C para AF_ALG + splice()
│ └── variants/
│ ├── ubuntu.py ← Variante específica para Ubuntu
│ ├── rhel.py ← Variante para RHEL/CentOS
│ └── amazon_linux.py ← Variante para Amazon Linux
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← Regra YARA para artefatos do exploit
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← Regra Sigma para SIEM/SOC
│ └── scripts/
│ ├── check_vulnerable.sh ← Verificação rápida de vulnerabilidade do kernel
│ └── detect_algif_aead.sh ← Verificar se o módulo está carregado/ativo
│
├── 📂 mitigation/
│ ├── README.md ← Visão geral da mitigação
│ ├── disable_algif_aead.sh ← Desativar o módulo de kernel afetado
│ ├── patch-notes.md ← Detalhes do patch upstream
│ └── kubernetes-hardening.md ← Hardening para K8s / contêineres
│
├── 📂 lab/
│ ├── Vagrantfile ← VM vulnerável reproduzível
│ ├── setup.sh ← Script de bootstrap do laboratório
│ └── docker/
│ └── Dockerfile ← Contêiner Ubuntu vulnerável
│
├── 📂 reports/
│ ├── pentest-report-template.md ← Modelo de relatório pronto para cliente
│ └── sample-finding.md ← Exemplo de redação de descoberta
│
└── 📂 assets/
├── demo.gif ← (Opcional) demonstração em terminal
└── diagrams/
└── page-cache-write.png ← Diagrama do fluxo do ataque
Sempre teste em um ambiente isolado e autorizado. Nunca execute exploits em sistemas de produção.
# Clonar o repositório
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# Iniciar a VM de laboratório vulnerável
cd lab/
vagrant up
# SSH para o laboratório
vagrant ssh
# Verificar versão do kernel (deve estar vulnerável)
uname -r
cd lab/docker/
# Construir imagem do contêiner vulnerável
docker build -t copyfail-lab .
# Executar com privilégios necessários para interação com o kernel
docker run --rm -it --privileged copyfail-lab /bin/bash
# Executar o script de verificação rápida
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
Saída esperada em um sistema vulnerável:
[!] Versão do kernel: 5.15.0-91-generic
[!] Módulo algif_aead: CARREGADO
[✗] O sistema parece VULNERÁVEL ao CVE-2026-31431 (Copy Fail)
[*] Ação recomendada: Aplicar atualização do kernel ou desativar algif_aead
Saída esperada em um sistema corrigido:
[✓] Versão do kernel: 6.1.132
[✓] O sistema parece CORRIGIDO contra o CVE-2026-31431 (Copy Fail)
Requer: Acesso local como usuário não privilegiado em um sistema vulnerável.
# Python 3.6+
python3 --version
# Módulos de kernel necessários presentes
lsmod | grep algif_aead
# Verificar se o binário alvo é legível
ls -la /usr/bin/sudo
cd exploit/
# Verificar nível de privilégio atual
id
# uid=1000(usuário) gid=1000(usuário) groups=1000(usuário)
# Executar o PoC Copy Fail
python3 copyfail.py
# Verificar escalação de privilégio
id
# uid=0(root) gid=0(root) groups=0(root)
1. Enumerar versão do kernel
└─► uname -r / cat /proc/version
2. Verificar se algif_aead está carregado
└─► lsmod | grep algif_aead
3. Confirmar ponto de apoio de baixo privilégio
└─► id / whoami
4. Executar o PoC Copy Fail
└─► python3 exploit/copyfail.py
5. Verificar acesso root
└─► id && cat /etc/shadow
6. Documentar evidências
└─► Captura de tela + registrar versão do kernel, distro, hash do exploit
7. Aplicar mitigação (pós-teste)
└─► sudo bash mitigation/disable_algif_aead.sh
8. Incluir no relatório de pentest
└─► Usar reports/pentest-report-template.md
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Detecta artefatos do exploit Copy Fail (CVE-2026-31431)"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
Executar varredura YARA:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Execução do Exploit Copy Fail LPE (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- Testes legítimos de API de criptografia
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# Após a atualização, reiniciar
sudo reboot
algif_aead (Interino)# Executar o script de mitigação
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
O que o script faz:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] Módulo não carregado no momento"
echo "[✓] algif_aead desativado. Reinicie para confirmar persistência."
Consulte mitigation/kubernetes-hardening.md para:
AF_ALG em políticas de segurança de podssocket(AF_ALG, ...)Um modelo de relatório para cliente pronto para uso está em reports/pentest-report-template.md.
Descoberta: Escalação Local de Privilégios via Copy Fail (CVE-2026-31431)
Severidade: ALTO (CVSS 7.8)
Host: 10.10.10.55 (ubuntu-prod-01)
Kernel: 5.15.0-91-generic
Evidências:
- Shell não privilegiado (uid=1000) escalado para root (uid=0)
- Módulo de kernel algif_aead confirmado como carregado
- Nenhum artefato em disco — apenas cache de página
Recomendação:
1. Aplicar patch do kernel do fornecedor imediatamente
2. Interino: desativar módulo algif_aead
3. Revisar nós Kubernetes e runners CI/CD
Leia antes de usar qualquer coisa neste repositório.
Este repositório é publicado exclusivamente para fins legítimos de pesquisa de segurança, testes de penetração autorizados e segurança defensiva.
O uso não autorizado deste material pode violar o Computer Fraud and Abuse Act (CFAA), a Diretiva 2013/40/EU da UE, a Lei de TI Indiana de 2000 e leis equivalentes em sua jurisdição.
Os autores não assumem nenhuma responsabilidade pelo uso indevido. Consulte DISCLAIMER.md para o aviso legal completo.
Pesquisadores de segurança são bem-vindos para contribuir:
git checkout -b feat/sua-contribuicaogit commit -m "Adicionar: regra de detecção para X"Por favor, siga as normas de divulgação responsável. Não inclua código de exploit armazenado e pronto para produção visando sistemas corrigidos.
| # | Seção | Descrição |
|---|
| 1 | O que é Copy Fail? | Resumo da vulnerabilidade |
| 2 | Análise Técnica Detalhada | Análise de causa raiz |
| 3 | Sistemas Afetados | Matriz de distribuições e kernels |
| 4 | Estrutura do Repositório | Layout de arquivos |
| 5 | Configuração de Laboratório | Reprodução segura |
| 6 | Uso do Exploit | Fluxo de pentest |
| 7 | Detecção | YARA, Sigma, scripts |
| 8 | Mitigação | Patch e hardening |
| 9 | Relatórios de Pentest | Modelos de relatório |
| 10 | Legal e Ética | Aviso legal |
| 11 | Referências | CVEs, avisos, blogs |
| Propriedade | Detalhe |
|---|
| ID CVE | CVE-2026-31431 |
| Apelido | Copy Fail |
| CVSS v3.1 | 7.8 (ALTO) |
| Vetor de Ataque | Local |
| Privilégios Necessários | Baixo (qualquer usuário não privilegiado) |
| Interação do Usuário | Nenhum |
| Descobridor | Xint Code (Theori) |
| Divulgado | 29 de abril de 2026 |
| Tamanho do Exploit | 732 bytes (PoC em Python) |
| Status do Patch | ✅ Disponível — reverta o commit a664bf3d603d |
| Ramo do Kernel | Afetado? | Versão Corrigida |
|---|
| 4.9.x (LTS) | ✅ Sim | 4.9.340+ |
| 5.4.x (LTS) | ✅ Sim | 5.4.295+ |
| 5.10.x (LTS) | ✅ Sim | 5.10.239+ |
| 5.15.x (LTS) | ✅ Sim | 5.15.185+ |
| 6.1.x (LTS) | ✅ Sim | 6.1.132+ |
| 6.6.x (LTS) | ✅ Sim | 6.6.83+ |
| 6.12.x (LTS) | ✅ Sim | 6.12.19+ |
| < 4.9 (pré-2017) | ❌ Não | N/A — otimização não presente |
| Distribuição | Versões Afetadas | Corrigido? | Aviso |
|---|
| Ubuntu | < 26.04 (todas as versões) | ✅ Corrigido | USN |
| Ubuntu 26.04 (Resolute) | ❌ Não afetado | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ Corrigido | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ Corrigido | ALAS |
| SUSE / openSUSE | Todas afetadas | ✅ Corrigido | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ Corrigido | DSA |
| CloudLinux | 8, 9 | ✅ Corrigido | Aviso |
| Ferramenta | Suporte de Detecção |
|---|
| Microsoft Defender (MDVM) | ✅ Sim |
| Tenable Nessus | ✅ Sim |
| Qualys | ✅ Sim |
| Wazuh | ✅ Via regra Sigma personalizada |
| Palo Alto Cortex XDR | ✅ Sim |
| CrowdStrike Falcon | ✅ Sim |
| Fonte | Link |
|---|
| Divulgação Original (Xint/Theori) | copy.fail |
| Artigo Técnico da Xint Code | xint.io/blog/copy-fail |
| Entrada NVD | nvd.nist.gov |
| Blog de Segurança da Microsoft | microsoft.com/security/blog |
| Aviso da Ubuntu | ubuntu.com/blog |
| Aviso da CERT-EU | cert.europa.eu |
| FAQ da Tenable | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| Aviso da CloudLinux | blog.cloudlinux.com |
| Análise da Bugcrowd | bugcrowd.com/blog |
| Patch do Kernel Linux | kernel.org — commit a664bf3d603d |