
CVE-2026-31431の概念実証エクスプロイト。algif_aeadモジュールにおけるLinuxカーネルのローカル権限昇格の脆弱性で、非特権ユーザーがページキャッシュへの4バイト書き込みを通じてroot権限を取得できるようにするものです。
このリポジトリには、CVE-2026-31431 の概念実証(PoC)エクスプロイトが含まれています。これは、任意の非特権ローカルユーザーが root アクセスを取得できる、深刻度の高い Linux カーネルのローカル権限昇格の脆弱性です。「Copy Fail」と呼ばれるこの欠陥は algif_aead モジュールに存在し、AF_ALG ソケットインターフェースと splice() システムコールを組み合わせることで、setuid バイナリである /usr/bin/su などの読み取り可能な任意のファイルのページキャッシュに対して、制御された 4 バイトの書き込みを実行できます。
この脆弱性は、2017 年以降にリリースされたほぼすべての Linux カーネルに影響を及ぼし、主要なディストリビューション(Ubuntu、Debian、RHEL、SUSE、Amazon Linux など)すべてが対象となります。2026 年 4 月 29 日に公開されました。修正はアップストリーム(コミット a664bf3d603d)にコミットされていますが、多くのベンダーはまだパッチ適用済みカーネルのリリースを進めている最中です。修正済みカーネルが利用可能になるまでは、一時的な緩和策として algif_aead カーネルモジュールを無効化することを強く推奨します。
⚠ 重要: この資料は、教育目的および許可されたセキュリティ研究の目的のみで提供されています。所有していないシステムや、明示的な許可のないシステムに対して使用しないでください。
このリポジトリには、異なる観点からエクスプロイトを実証する 2 つの PoC 実装が含まれています。
copy-fail-poc-short.py — 最小限、オリジナルに近い元々公開された Python エクスプロイトに非常に近い凝縮版です。単一文字の変数名を使用し、コメントや定数を省略しているため、非常にコンパクト(732 バイト)です。このバリアントは以下のことを行います:
/usr/bin/su と生の AF_ALG AEAD ソケットを開きます。os.splice を使用して、ターゲットファイルから対応する 4 バイトのチャンクをゼロコピーで転送します。/usr/bin/su を実行して root シェルを取得します。copy-fail-poc.py — 完全にリファクタリングされた包括版Python のベストプラクティスに従って完全に書き直され、十分にドキュメント化されたバージョンです。このバリアントは以下のことを行います:
send_data_over_crypto_socket())を使用してコアロジックを分離します。このバージョンは、脆弱性を深く理解したい方や、さらなる研究のためにコードを適応させたい方に最適です。
大まかに言うと、このエクスプロイトは以下のことを行います:
setuid バイナリ(/usr/bin/su)を開きます。AF_ALG AEAD ソケットを作成し、ロジックの欠陥をトリガーするために必要なパラメータで設定します。splice() メカニズムを利用します。algif_aead モジュールの欠陥により、カーネルは攻撃者が制御する 4 バイトのデータをターゲットバイナリのページキャッシュに誤って書き込みます。/usr/bin/su のメモリ内ページキャッシュを変更することで、バイナリを実行時に効果的にパッチし、非特権ユーザーが root シェルを返すパッチ適用済みバージョンを実行できるようにします。このエクスプロイトは非常に信頼性が高く(成功率 100%)、レースウィンドウやカーネルごとのオフセットを必要としません。
a664bf3d603d(git.kernel.org)