
PoC em Rust para uma vulnerabilidade de escalonamento local de privilégios no kernel Linux, explorando a Crypto API e o splice para sobrescrever o cache de páginas e modificar o UID em /etc/passwd para obter acesso root.
Este projeto é uma Prova de Conceito (PoC) implementada em Rust para uma vulnerabilidade de escalonamento local de privilégios (LPE) (simulando CVE-2026-31431). Ele demonstra como manipular o cache de páginas do kernel Linux explorando a Crypto API.[cite: 1, 2]
[!CAUTION] Este código é apenas para fins educacionais e de pesquisa ética em segurança. O uso não autorizado desta ferramenta contra sistemas sem consentimento prévio explícito é ilegal. O autor não assume nenhuma responsabilidade por uso indevido ou danos causados por este programa.
A ferramenta explora uma vulnerabilidade relacionada à interface AF_ALG (interface criptográfica do kernel) e à chamada de sistema splice.[cite: 2] Ela permite que um usuário sem privilégios sobrescreva 4 bytes do cache de páginas de um arquivo somente leitura—especificamente visando o campo UID em /etc/passwd para alterá-lo temporariamente para 0000 (root).[cite: 1, 2]
main.rs para encontrar o deslocamento exato do arquivo onde está o UID do usuário atual dentro de /etc/passwd.[cite: 1, 2]AF_ALG com o algoritmo authencesn(hmac(sha256),cbc(aes)).[cite: 2]setsockopt e usar splice, ele redireciona os dados do arquivo através do pipeline criptográfico.[cite: 2]0000).[cite: 2]--shell for fornecida, ele executa su <user>, que é bem-sucedido porque o sistema agora vê o UID do usuário como 0 no /etc/passwd em cache.[cite: 1]POSIX_FADV_DONTNEED para restaurar a integridade do sistema.[cite: 1]libc e nix (com os recursos fs, socket, zerocopy e user).[cite: 3]cargo build --release
Testar a correção do cache de páginas sem abrir um shell:
./target/release/cve-2026-31431
Tentar escalar para um shell root:
./target/release/cve-2026-31431 --shell
main.rs: Orquestra o ataque, lida com os argumentos da CLI e executa o comando final do shell.[cite: 1]modules.rs: Contém a lógica central da exploração, incluindo a manipulação do socket AF_ALG e a busca do deslocamento do UID.[cite: 2]Cargo.toml: Define os metadados do projeto e as dependências de crates externas.[cite: 3]main.rs, modules.rs, Cargo.toml[cite: 1, 2, 3]socket, bind, sendmsg, splice, posix_fadvise.[cite: 1, 2]