
CVE-2026-31431の概念実証エクスプロイト。LinuxカーネルのAF_ALGメモリ破壊の脆弱性です。spliceを使用してページキャッシュ内の/usr/bin/suをパッチし、パスワードなしでのroot権限昇格を可能にします。
CopyFail は、Linux カーネル Crypto API(AF_ALG)のメモリ破壊の脆弱性を標的とした CVE-2026-31431 の概念実証エクスプロイトです。このエクスプロイトは splice システムコールを利用して /usr/bin/su バイナリのページキャッシュを不正にパッチし、パスワードなしでの root への権限昇格を可能にします。
この脆弱性は、splice を介した AF_ALG ソケットと他のファイルディスクリプタ間のゼロコピーデータ転送を処理する際の Linux カーネルの実装に存在します。aead 実装における不適切な同期または境界チェックにより、暗号エンジンによって処理されたデータがソースファイルのページキャッシュに書き戻される可能性があります。
AF_ALG ソケットを初期化し、sendmsg を使用して悪意のあるペイロードをソケットの内部バッファにキューイングします。splice を呼び出して /usr/bin/su バイナリから AF_ALG ソケットへデータを転送することで、脆弱性によりソケットのバッファ内容がメモリ内のバイナリのページキャッシュを上書きします。su の認証ロジックを、root シェルを起動する最小限の ELF ペイロードに置き換えます。ページキャッシュが変更されるため、その後の su の実行では元のバイナリの代わりに攻撃者のコードが実行されます。RawSyscall を使用した純粋な Go 実装。AF_ALG/splice の相互作用によるカーネルのファイルキャッシュの直接操作。fmt や os パッケージなし)で最適化されたバイナリサイズ。現在のアーキテクチャ用にエクスプロイトをコンパイルします:
go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
コンパイルしたバイナリを実行します:
./CopyFail
実行が成功すると、su バイナリがメモリ内でパッチされ実行され、root シェルが付与されます。
以下のデモは、標準的な Kali Linux インストール環境でエクスプロイトをコンパイルして実行する様子を示しています。
# 1. 現在の非特権ユーザーを確認
kali@kali:~$ whoami
kali
# 2. エクスプロイトをコンパイル
kali@kali:~$ go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
# 3. CopyFail エクスプロイトを実行
kali@kali:~$ ./CopyFail
[+] AF_ALG メモリ破壊をトリガー中...
[+] ページキャッシュ内の /usr/bin/su をパッチ中...
[+] パッチ済みバイナリを実行中...
# 4. 成功: root シェルに昇格
root@kali:/home/kali# id
uid=0(root) gid=0(root) groups=0(root)
root@kali:/home/kali# whoami
root
この脆弱性を緩和するには、以下の手順が推奨されます:
af_alg および関連モジュールを無効化します:
modprobe -r af_alg
auditd など)を使用して、機密性の高いシステムバイナリを標的とした不審な splice 呼び出しを監視します。⚠️ 警告: このツールは認可されたセキュリティ研究および教育目的のみを対象としています。ページキャッシュのパッチは不安定な操作であり、システムの不安定化を引き起こす可能性があります。作者は誤用に対する責任を負いません。
CVE-2026-31431(「Copy Fail」)は、Theori の研究チームによって発見・公開されました。
このプロジェクトは MIT LICENSE の下でライセンスされています。