
CVE-2026-31431 のエクスプロイト。Linux カーネルの authencesn バグを利用し、4 バイトのページキャッシュ書き込みによるローカル権限昇格とコンテナエスケープを可能にします。
主要Linuxディストリビューションで732バイトでroot権限を取得
CVE-2026-31431 (Copy Fail) は、Linuxカーネルのauthencesn暗号テンプレートにおける論理バグです。権限のないローカルユーザーが、システム上の任意の読み取り可能なファイルのページキャッシュに対して、決定的かつ制御された4バイト書き込みを引き起こすことができます。
CONFIG_CRYPTO_AUTHENCを有効にしたLinuxカーネル(2017年以降の実質すべての主要ディストリビューション)このバグは2つの動作を連鎖させます:
AF_ALG + splice: splice()はページキャッシュページを参照によってAF_ALGソケットのscatterlistに転送します。AEAD復号のインプレースモードでは、タグページ(対象ファイルのページキャッシュ由来)はsg_chain()を介して出力scatterlistに連結されたままになります。
authencesnスクラッチ書き込み: crypto_authenc_esn_decrypt()はdst[assoclen + cryptlen](タグを超えた位置、ページキャッシュページ内)をESNシーケンス番号再配置のスクラッチ領域として使用し、攻撃者が制御する4バイトを書き込んで復元しません。
破損したページはダーティとしてマークされることはありません。そのため、ディスク上のファイルは変更されません。しかし、メモリ内のページキャッシュが実際に読み取られるものです — そのため、破損はシステム全体に即座に表示されます。
このエクスプロイトは、/usr/bin/su(または任意のsetuidバイナリ)のページキャッシュを、小さなシェルコードペイロードで一度に4バイトずつ破損させます。すべての反復が完了すると、suを実行するとペイロードが実行され、rootシェルに落ちます。
python3 exp.py
gcc -o exp exp.c
./exp
| 機能 | 詳細 |
|---|---|
| 移植性 | 同じスクリプトがUbuntu、Amazon Linux、RHEL、SUSEなどで動作 — ディストリビューションごとのオフセット不要 |
| 小型 | Pythonエクスプロイトは約732バイト |
| ステルス性 | VFS書き込みパスをバイパス。ページはダーティとしてマークされず、ディスク上のチェックサムは変更されない |
| コンテナ間 | ページキャッシュはコンテナ間で共有 — コンテナエスケープベクター(パート2参照) |
このリポジトリは教育および防御研究目的のみで公開されています。所有していないシステム、または明示的なテスト許可がないシステムでこのコードを使用しないでください。