
Exploit para CVE-2026-31431, uma falha do authencesn no kernel Linux que permite escalonamento local de privilégios e fuga de contêiner por meio de uma gravação de 4 bytes no cache de páginas.
732 Bytes para Root em Todas as Principais Distribuições Linux
CVE-2026-31431 (Copy Fail) é um bug lógico no template criptográfico authencesn do kernel Linux. Ele permite que um usuário local sem privilégios acione uma escrita determinística e controlada de 4 bytes no cache de páginas de qualquer arquivo legível do sistema.
CONFIG_CRYPTO_AUTHENC (praticamente todas as principais distros desde 2017)O bug encadeia dois comportamentos:
AF_ALG + splice: splice() transfere páginas do cache de páginas por referência para o scatterlist de um socket AF_ALG. No modo in-place de descriptografia AEAD, as páginas de tag (do cache de páginas do arquivo alvo) permanecem encadeadas ao scatterlist de saída via sg_chain().
Escrita de rascunho do authencesn: crypto_authenc_esn_decrypt() usa dst[assoclen + cryptlen] (além da tag, dentro das páginas do cache de páginas) como espaço de rascunho para a reorganização do número de sequência ESN, escrevendo 4 bytes controlados pelo atacante e nunca os restaurando.
A página corrompida nunca é marcada como suja, portanto o arquivo em disco permanece inalterado. Mas o cache de páginas em memória é o que realmente é lido — tornando a corrupção imediatamente visível em todo o sistema.
O exploit corrompe o cache de páginas de /usr/bin/su (ou qualquer binário setuid) com um pequeno payload de shellcode, 4 bytes por vez. Após todas as iterações, executar su executa o payload e concede um shell root.
python3 exp.py
gcc -o exp exp.c
./exp
| Capacidade | Detalhes |
|---|---|
| Portátil | O mesmo script funciona no Ubuntu, Amazon Linux, RHEL, SUSE e outros — sem offsets por distro |
| Minúsculo | O exploit em Python tem ~732 bytes |
| Furtivo | Ignora o caminho de escrita do VFS; a página nunca é marcada como suja; checksums em disco permanecem inalterados |
| Entre contêineres | O cache de páginas é compartilhado entre contêineres — vetor de escape de contêiner (ver Parte 2) |
Este repositório é publicado apenas para fins educacionais e de pesquisa defensiva. Não use este código em sistemas que você não possui ou para os quais não tenha permissão explícita de teste.