Linux FUSEのページキャッシュオーバーフローによりローカル攻撃者がroot権限を取得可能

新たに公表されたLinuxカーネルのFUSE(Filesystem in Userspace)サブシステムの脆弱性により、権限を持たないローカル攻撃者が影響を受けるシステムでroot権限を取得できる可能性があります。

CVE-2026-31694として追跡されているこの脆弱性は、FUSEのディレクトリエントリキャッシュ処理におけるページキャッシュオーバーフローに起因します。この問題はBynarioによって文書化されており、同社はLLM主導の脆弱性調査パイプラインを用いて発見・検証を行いました。

この脆弱性は、Linux 6.16-rc1以降、FUSEのreaddir応答バッファが拡大されたことで肥大化したディレクトリエントリに到達できるようになったカーネルバージョンを使用するシステムに影響します。修正パッチはすでにアップストリームに取り込まれています。

FUSEは、カーネルが低レベルなファイルシステム処理を担う一方で、ユーザー空間でファイルシステムを実装できるようにする仕組みです。FUSEデーモンは/dev/fuseを通じてカーネルと通信し、ディレクトリ列挙などの操作に対する応答を提供します。

この設計により、権限を持たないユーザーでも特定のFUSEファイルシステムをマウントできますが、同時に悪意あるFUSEサーバーがカーネルによって処理されるデータの一部を制御できてしまうことも意味します。

問題は、FUSEサーバーがFOPEN_CACHE_DIRオプションを有効にした際にディレクトリエントリをキャッシュする関数、fuse_add_dirent_to_cache()に存在します。この関数はシリアライズされたfuse_direntレコードを、通常x86_64システムでは4KiBの固定サイズのページキャッシュページにコピーします。

ディレクトリエントリのシリアライズ後のサイズは、攻撃者が制御可能なファイル名長フィールドから導出されます。FUSEはファイル名を4095バイトまでに制限しているものの、結果としてアラインメント処理されたディレクトリエントリレコードは最大4120バイトに達する可能性があります。

これは標準的な4096バイトのカーネルページサイズを24バイト超過する値です。脆弱性のあるコードは、エントリが現在のページの残り領域に収まるかどうかをチェックします。収まらない場合は新しいページに進み、書き込みオフセットをリセットします。

しかし、このコードはディレクトリエントリ自体が完全に空のページ内に収まるかどうかを検証していません。その結果、最大サイズのFUSEディレクトリエントリをコピーすると、割り当てられたページキャッシュページを最大242424バイト、攻撃者が制御可能な形で超過して書き込んでしまう可能性があります。

Bynarioによる検証によれば、有利なメモリレイアウト条件下では、このオーバーフローをローカル権限昇格へと武器化できるとされています。

報告されている概念実証(PoC)は、特権を持つ実行ファイルに属する隣接ページキャッシュデータを標的とし、実行前にキャッシュされた初期化コードを改ざんするというものです。

この攻撃が成功すると、権限を持たないユーザーがset-user-ID rootバイナリのコンテキストでコードを実行し、root権限を取得できる可能性があります。実際の悪用にはローカルアクセスと、悪意あるFUSEファイルシステムをマウントまたは操作する能力が必要です。

ページサイズが4KiBを超えるシステムは、FUSEディレクトリレコードの最大サイズが単一ページ内に収まるため、影響を受けません。

この問題の根本原因は、FUSEのディレクトリキャッシュ機能を導入した2018年のコミットにまで遡ります。しかし、2025年4月のカーネル変更でFUSEのreaddirバッファサイズが拡大されたことにより、肥大化したレコードが受理されるようになり、実質的に到達可能な脆弱性となりました。

アップストリームの修正では、直接的な検証チェックが追加されています。PAGE_SIZEを超えるディレクトリエントリはキャッシュされなくなります。管理者は、コミット51a8de6c50bf947c8f534cd73da4c8f0a13e7bedに関連する修正パッチを含むカーネルアップデートを適用する必要があります。

修正済みカーネルが導入されるまでの間、組織は可能な限り権限を持たないユーザーによるFUSEマウントを制限し、ユーザーネームスペースのポリシーを見直し、FUSEが不要なシステムではfusermount3からsetuid権限を削除することを検討すべきです。これらの対策により、ローカル権限昇格攻撃の攻撃対象領域を縮小できます。

翻訳元: https://cyberpress.org/linux-fuse-page-cache-overflow/

ソース: cyberpress.org