セキュリティ

Linuxで一般ユーザーがroot権限を取得できる脆弱性「Copy Fail」が発見される、2017年以降の多数のディストリビューションに影響


AIを使ってコードを解析するサービス「Xint Code」を提供するXintが、Linuxカーネルの暗号化関連機能において、一般ユーザーからroot権限を取得できるローカル権限昇格の脆弱(ぜいじゃく)性「Copy Fail」を見つけたと発表しました。

Copy Fail — CVE-2026-31431
https://copy.fail/


Copy Fail: 732 Bytes to Root on Every Major Linux Distribution. - Xint
https://xint.io/blog/copy-fail-linux-distributions


Copy FailのCVE番号はCVE-2026-31431で、Xintによると2017年以降に出荷された主要Linuxディストリビューションの多くが影響を受ける可能性があるとのこと。Linuxカーネル側のCVE管理主体であるkernel.orgは、Copy FailのCVSS v3.1基本値を7.8の「HIGH」と評価しています。

Copy Failが危険視されている理由は、攻撃成立にカーネルごとの細かい調整やタイミング競争が不要とされている点です。一般的な権限昇格の脆弱性には、一瞬の処理順序のずれを突く必要があるものもありますが、XintはCopy Failについて、競合状態に依存せず、決まった処理の流れに沿って発火する論理バグだと説明しています。実際、Xintの解説ではPython 3.10以降の標準ライブラリだけを使う短い実証コードにより、Ubuntu、Amazon Linux、RHEL、SUSEでrootシェルを取得できたとされています。


一方、CVSS評価がHIGHにとどまった理由として、Copy Failはインターネット越しにサーバーへ直接侵入できるリモートコード実行の脆弱性ではないことが挙げられます。攻撃者は対象システム上で一般ユーザーとしてコードを実行する必要があり、問題になりやすい環境として、複数ユーザーが同じLinuxカーネルを共有する開発サーバー、ビルドサーバー、CIランナー、Kubernetesクラスタ、ユーザーがコードを持ち込めるSaaSやサンドボックス環境などがあるとのこと。

Copy Failが発生した原因は、Linuxカーネルの暗号化機能をユーザー空間から利用する「AF_ALG」、ファイルの内容をコピーせずに受け渡す「splice()」、ファイル内容をメモリ上に保持する「ページキャッシュ」、認証付き暗号(AEAD)のラッパーである「authencesn」の処理が組み合わさったことにあると述べられています。

通常、ファイルを改ざんするにはファイルシステムの書き込み経路を通る必要があります。しかしCopy Failではディスク上のファイルではなく、メモリ上のページキャッシュに対して制御された4バイトの書き込みが発生します。ディスク上のファイルそのものは変化しないため、ファイルのチェックサムを比較しても改ざんの検出は難しいですが、一方で「read()」「mmap()」「execve()」などの処理ではメモリ上のページキャッシュが使われることがあり、ページキャッシュ上の内容が書き換えられると書き換えられた内容が読み込みや実行に使われてしまいます。


代表的な攻撃例として説明されているのは、一般ユーザーが実行してもプログラム側がroot権限で動くように設定された実行ファイルである「setuid root」属性を持つ/usr/bin/suのようなバイナリのページキャッシュを書き換え、ディスク上のファイルを変更しないまま、実行時だけroot権限で任意のコードを動かすというものです。

Copy Failが発生した技術的な原因は、LinuxカーネルでAEADを扱うalgif_aead.cに対し2017年に導入されたin-place最適化にあるとのこと。in-place最適化は入力用と出力用の領域を別々に用意せず、同じ領域を使って処理する方式で、この変更により、AF_ALGのAEAD処理では入力元と出力先が同じscatterlistで管理されるようになりました。その結果、splice()由来のページキャッシュが、書き込み可能な出力側scatterlistの末尾へ連結される状態が生まれました。


直接の引き金になったのは、authencesnというAEADラッパーです。authencesnは内部処理の途中で、呼び出し元の出力バッファを作業用領域として使いますが、authencesnは自分が所有している正規のメモリ範囲を4バイト超えて勝手に使用していました。従来は問題になっていませんでしたが、in-place最適化によって出力バッファであるscatterlistの末尾にページキャッシュが付いたことで、4バイトのオーバー分がページキャッシュを書き換える事態になりました。

Copy Failはコンテナ環境でも深刻です。ページキャッシュはホスト全体で共有されるため、コンテナ内のプロセスからホスト上のページキャッシュに影響を与える可能性があります。XintはCopy Failを、単なるローカル権限昇格ではなく「コンテナエスケープの原始的な構成要素であり、Kubernetesノード侵害につながるベクトル」と説明しました。

Copy Failへの対策は「ディストリビューションが提供する修正済みカーネルへ更新すること」とのこと。修正されたカーネルでは、AF_ALG AEADの処理について入力と出力を別々のscatterlistで扱うout-of-placeの形へ戻されています。Xintは、修正済みカーネルへの更新を最優先の対策として挙げており、すぐに更新できない場合の暫定対策として、algif_aeadモジュールの無効化やseccompによるAF_ALGソケット作成のブロックを推奨しています。

この記事のタイトルとURLをコピーする

・関連記事
月間ダウンロード数100万回超のオープンソースパッケージが脆弱性を悪用されマルウェア混入版を配布しユーザー認証情報を盗む - GIGAZINE

OpenAIのo3モデルでLinuxカーネルのゼロデイ脆弱性を発見した方法とは - GIGAZINE

AIバグ発見システム「Sashiko」がGoogle社員によって開発される、日本の「刺し子」に由来する名前でLinuxカーネルの未発見バグを次々に検出 - GIGAZINE

一部の組織に限定公開されている「Claude Mythos Preview」へのアクセス権が不正ユーザーの手に渡っているとの報道 - GIGAZINE

AIの普及でOSSプロジェクトへの低品質なコード提出が増加、Ghostty開発者による「貢献者の信頼度を管理するシステム」も登場 - GIGAZINE

in セキュリティ, Posted by log1d_ts

You can read the machine translated English article A vulnerability known as 'Copy Fail' has….