
CVE-2026-31431 のエクスプロイト。Linux カーネルの authencesn 脆弱性を利用し、ページキャッシュ操作を介してローカル権限昇格により root 権限を取得します。
「Copy Fail」は、Linuxカーネルのauthencesn暗号テンプレートにおける重大なロジック脆弱性です。これにより、特権を持たないローカルユーザーが、システム上の任意の読み取り可能なファイルのページキャッシュに対して、決定的かつ制御された4バイト書き込みを引き起こすことができます。setuidバイナリ(/usr/bin/suなど)を標的とすることで、攻撃者はメモリ内の実行キャッシュを編集し、**Root(UID 0)**への権限昇格を達成できます。
「Dirty Cow」や「Dirty Pipe」のような古い脆弱性とは異なり、Copy Failはレースコンディション、リトライ、クラッシュしやすいタイミングウィンドウを必要としない単純なロジック欠陥です。ディスク上のファイルを完全に変更せずにメモリ内のページキャッシュのみを変更するため、移植性が高く、ステルス性にも優れており、標準的なファイル整合性監視ツールを回避します。
この脆弱性は、3つの異なるカーネルコンポーネントの交点に存在します。
splice()システムコール: splice()システムコールは、コピーせずにファイルディスクリプタとパイプ間でデータを転送し、ページキャッシュページを参照渡しします。ユーザーがファイル(/usr/bin/suなど)をAF_ALGソケットにスプライスすると、ソケットの入力scatterlistは、そのファイルのカーネルキャッシュページへの直接参照を保持します。authencesnスクラッチ書き込み: authencesnアルゴリズム(IPsec拡張シーケンス番号に使用)は、バイトの再配置を必要とします。これを行うために、シーケンス番号の4バイトを「スクラッチスペース」として出力バッファに一時的に書き込みます。ただし、正当な出力境界を超えて書き込みます。2017年のインプレース最適化により、出力scatterlistにはsplice()によって渡された読み取り専用のページキャッシュページが含まれます。authencesnが出力境界を超えて書き込むと、ターゲットファイルのキャッシュされたカーネルメモリ内の4バイトを直接上書きします。
攻撃者は以下の手順でこの脆弱性を悪用できます。
AF_ALGソケットを開き、authencesn(hmac(sha256),cbc(aes))にバインドします。sendmsg()を送信します。splice()を使用してターゲットファイル(/usr/bin/su)をソケットにパイプします。オフセットと長さによって、ページキャッシュ内のどこに4バイトが書き込まれるかが正確に定義されます。recv()を呼び出すと復号操作がトリガーされ、範囲外のスクラッチ書き込みがターゲットファイルのページキャッシュに直接実行されます。execve("/usr/bin/su"))を実行します。カーネルは、注入された悪意のあるシェルコードを含む改ざんされたページキャッシュバージョンを実行し、rootアクセスを許可します。カーネルのパッチ適用や再起動が直ちに不可能な場合は、関連するすべてのaf_algモジュールをブラックリストに登録し、メモリからアンロードすることで、この脆弱性を緩和できます。
これらのモジュールをブロックするには、以下のコマンドを実行します。
# 1. 現在ロードされている場合は、モジュールをメモリからアンロードします
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. モジュールをブラックリストに追加します
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. af_algモジュールが完全にロードされないようにします
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. 変更を完全に有効にするためにシステムを再起動します
sudo reboot
Linuxカーネルセキュリティチームは、この脆弱性をパッチしました(コミット: a664bf3d603d)。このパッチは、AF_ALG AEAD操作をアウトオブプレースモデルに戻し、ソースとデスティネーションのscatterlistを分離します。これにより、ページキャッシュページが書き込み可能なデスティネーションscatterlistに公開されるのを防ぎます。
必要な対応: ディストリビューションのカーネルを、ベンダー(Ubuntu、Amazon Linux、RHEL、SUSEなど)が提供する最新バージョンに更新し、システムを再起動してください。