セキュリティ研究者は、Linux カーネルの重大なゼロデイ脆弱性「Copy Fail」(CVE-2026-31431)を開示しました。これは特権のないローカルユーザーがルートアクセスを取得することを可能にします。
わずか732バイトのPythonスクリプトを使用して、攻撃者は2017年以降にリリースされた主要なLinuxディストリビューション内に存在するロジックの欠陥を悪用できます。
Copy Failは、Linuxカーネルの暗号化サブシステムで見つかったローカル権限昇格(LPE)脆弱性です。レース条件に依存しており、システムをクラッシュさせることが多いDirty Cowなどの古い悪名高いバグとは異なり、Copy Failは確定的なロジックの欠陥です。
リトライや特定のタイミングウィンドウは必要なく、異なるアーキテクチャ全体で非常に信頼性が高く、ポータブルです。
エクスプロイトは、物理ディスク上のファイルを変更するのではなく、ファイルのメモリ内ページキャッシュを変更するため、非常に隠蔽性が高いです。
カーネルのライトバック機構は破損したページをダーティとしてマークすることはなく、ディスク上のチェックサムをチェックする標準的なファイル整合性監視ツール が修正を検出できません。
エクスプロイトの動作方法
Copy Failの根本原因は、3つのカーネル機能の組み合わせ、つまりAF_ALGソケットタイプ、spliceシステムコール、および認証暗号化テンプレートにあります。
AF_ALGインターフェースは、カーネルの暗号化機能を特権のないユーザーに公開します。攻撃者がspliceコマンドを使用してファイルデータをAF_ALGソケットに転送すると、システムはそのファイルのカーネルキャッシュページを直接参照します。
2017年のカーネル最適化により、暗号化操作がインプレースで実行されることが可能になり、入力と出力の両方に同じメモリ空間が使用されました。
authencesnアルゴリズムは、この出力境界を意図せずに一時的なスクラッチパッドとして使用し、意図された制限を超えて4バイト書き込みます。
これにより、攻撃者はユーザー切り替え用のsetuid-rootバイナリなど、読み取り可能なファイルのページキャッシュに制御された4バイト上書きを実行できます。このキャッシュされた実行可能ファイルにシェルコードを注入することで、攻撃者は直ちにルート特権を取得します。
この脆弱性は、Ubuntu、Amazon Linux、Red Hat Enterprise Linux(RHEL)、およびSUSEを含む主要なLinuxディストリビューションに影響します。ページキャッシュはシステム全体で共有されるため、この欠陥は単一マシン上のローカル権限昇格に限定されません。
また、コンテナエスケーププリミティブとしても機能します。つまり、攻撃者はコンテナ境界を越えてKubernetesノード全体を侵害する可能性があります。
このバグはカーネルバージョン4.14で導入され、TheooriとXint Codeの研究者によるAI支援レビューによって発見されるまで、ほぼ10年間検出されないままでした。
Linuxカーネル開発者は、バージョン6.18.22、6.19.12、および7.0でCVE-2026-31431に対処するためのパッチをリリースしました。
修正は単に欠陥のあるインプレース操作メカニズムを削除し、ソースと宛先のメモリマッピングが分離されている、より安全なアウトオブプレース処理に戻します。システム管理者は直ちにカーネルを更新する必要があります。
パッチが直ちに可能でない場合、ユーザーは脆弱なモジュールをブロックすることで一時的な緩和策を適用できます。
これは、modprobe設定ディレクトリ内で/bin/falseにルーティングするためのalgif_aeadのインストールルールを追加し、その後、実行中のシステムからアクティブなalgif_aeadモジュールを削除することで行われます。
翻訳元: https://gbhackers.com/linux-kernel-0-day-copy-fail-grants-root-access-major-distros/