
CVE-2026-31431 Copy Fail — Testador de LPE do kernel Linux via MCP
📖 Guia de Instalação — início rápido, configuração manual e solução de problemas
CVE-2026-31431 — A pior vulnerabilidade do Linux já descoberta. Agora controlável via MCP.
732 bytes de Python. Sem compilação. Sem condição de corrida. Sem offsets específicos por distribuição. Um único disparo, root universal em todo kernel Linux criado desde 2017.
Esta ferramenta é um servidor MCP + painel web que testa qualquer sistema Linux alcançável quanto à vulnerabilidade. Ela foi criada porque o PoC original já é trivial de usar — isto apenas adiciona uma interface, varredura de rede e rastreamento de frotas.
AVISO: Esta é uma LPE real do kernel. Use apenas em sistemas que você possui ou para os quais tem permissão explícita por escrito para testar. O uso não autorizado é crime na maioria das jurisdições.
1. Foi encontrada por uma IA em uma hora.
A plataforma Xint Code da Theori varreu o subsistema crypto/ do Linux com um
único prompt do operador. Uma hora depois, ela tinha uma LPE universal que escapou de
todos os revisores humanos, ferramentas de análise estática e fuzzers por nove anos. O bug existia
desde 2017 e exigia raciocínio entre subsistemas (proveniência do socket AF_ALG +
comportamento de escrita scratch do authencesn) — exatamente o tipo de conexão em que ferramentas
nativas de LLM se destacam. O custo da descoberta foi insignificante. As implicações para
o cenário de vulnerabilidades são existenciais.
2. O exploit tem 732 bytes de Python puro, sem dependências. Nenhum toolchain de compilação necessário. Nenhuma biblioteca para instalar. Nenhum offset específico de arquitetura. Ele funciona de forma idêntica em servidores x86_64, roteadores aarch64, dispositivos NAS ARM e qualquer outro hardware Linux rodando Python 3.10+. Você pode colá-lo em um shell web, enviá-lo via netcat ou gravá-lo de um pendrive. A barreira para armamento é efetivamente zero.
3. Não deixa rastro em disco.
O exploit corrompe apenas o page cache do kernel em memória. O binário em disco de
/usr/bin/su nunca é modificado. Toda ferramenta de integridade de arquivos que funciona comparando
checksums em disco — AIDE, Tripwire, dm-verity — não vê nada de errado. A corrupção
desaparece na reinicialização. A única maneira de detectar que um exploit foi executado é
capturá-lo em flagrante via auditd ou eBPF. Para fins forenses, o exploit é invisível.
4. Bilhões de dispositivos nunca serão corrigidos.
As principais distribuições (Ubuntu, RHEL, Debian, SUSE) lançaram patches em 72 horas.
Mas o bug do kernel está embutido em todo dispositivo Linux criado desde 2017 com
CONFIG_CRYPTO_USER_API_AEAD=y — ou seja, praticamente todos. Roteadores OpenWrt
(sem patch até 2026-05-02). Câmeras IP rodando kernels de fornecedores de 2019. Smart TVs
com ramos de firmware congelados. Bombas de infusão médica que exigem recertificação da FDA
a cada atualização. Controladores industriais com ciclos de vida de suporte de 10 anos. Dispositivos
Android são protegidos por uma restrição acidental da política SELinux — não por uma correção
do kernel — e dispositivos com root/ROMs customizadas, Fire tablets antigos e Android TV sticks
estão totalmente expostos. O número agregado não é de milhões. É de bilhões. E para a maioria
deles, a correção nunca virá.
Esta é uma ferramenta de teste e conscientização de segurança construída em torno do PoC público. Ela não faz nada que o script original de 732 bytes já não faça. O que ela acrescenta:
O exploit em si é público, trivialmente copiável e não pode ser desinventado. Esta ferramenta existe para tornar os testes rápidos e seguros para pessoas que têm autorização para testar.
git clone https://github.com/sandraschi/copy-fail-mcp
cd copy-fail-mcp
just
Isso abre um painel interativo mostrando todos os comandos disponíveis. Execute just bootstrap para instalar as dependências e depois just serve ou just dev para iniciar.
Se você não tiver o just instalado:
pip install copy-fail-mcp
copy-fail check --host 192.168.1.100
copy-fail serve --http --port 10955
User → AF_ALG socket (authencesn) → splice() target file → HMAC fails
↓
4 bytes written past AEAD boundary
↓
Into page cache of /usr/bin/su
↓
su is now corrupted in memory
↓
Run su → root shell
O bug: dois comportamentos de subsistema que eram inofensivos individualmente tornam-se letais quando combinados. O caminho de splice do AF_ALG expõe páginas do page cache como saída gravável. O authencesn escreve 4 bytes além do limite legítimo da AEAD como espaço temporário. Junte os dois e você pode corromper a representação em memória de qualquer arquivo legível com dados precisamente controlados. O exploit tem como alvo a verificação de permissão do /usr/bin/su.
MIT. O script do exploit é de Taeyang Lee / Theori / Xint Code Research Team (PoC original).
| Propriedade | Copy Fail | Dirty COW (2016) | Dirty Pipe (2022) |
|---|
| Tamanho do exploit | 732 bytes (stdlib Python) | ~200 linhas C | ~100 linhas C |
| Compilação necessária | Não — Python puro | Sim — compilar C | Sim — compilar C |
| Condição de corrida | Não — determinística | Sim — janela de corrida | Não |
| Offsets por distribuição | Nenhum — mesmo script em qualquer lugar | Nenhum | Nenhum |
| Rastro em disco | Não — apenas page cache, checksums limpos | Não | Não |
| Escape de container | Sim — page cache compartilhado | Sim | Sim |
| Versões do kernel | >= 4.14 (2017–presente) | >= 2.6.22 (2007–2018) | >= 5.8 (2020–2022) |
| Dispositivos afetados | Bilhões (ainda crescendo) | Corrigido em 2018 | Corrigido em 2022 |
| Nunca será corrigido | Bilhões de IoT/embarcados/roteadores | Maioria corrigida | Maioria corrigida |
| Encontrada por | IA (Xint Code, varredura de 1 hora) | Pesquisador humano | Pesquisador humano |
| Custo da descoberta | ~$6 em computação em nuvem | Meses de esforço humano | Meses de esforço humano |
| Ferramenta | Descrição | Entrada |
|---|
cf_scan_network | Sondar sub-rede /24 em busca de hosts SSH, identificar Linux | Direta (TCP assíncrono) |
cf_check_target | Verificar kernel, configuração AEAD, status de patch da distro | Agente SSH |
cf_run_exploit | Implantar PoC via SSH, executar, relatar root | Agente SSH |
cf_assess | Verificação + exploit em uma única etapa | Agente SSH |
cf_apply_mitigation | Blacklist de módulo ou blacklist de initcall | Agente SSH |
cf_get_exploit_script | Retornar o PoC bruto de 732 bytes como texto | Qualquer canal |
cf_exploit_local | Escrever o PoC em um caminho local para implantação manual | Shell local |