Linux Kernel FUSE Vulnerability Lets Attackers Gain Root Privileges
2026/07/10 CyberSecurityNews — Linux Kernel の FUSE サブシステムに存在する、脆弱性 CVE-2026-31694 を悪用するローカル攻撃者は、自身が制御するディレクトリ・エントリを用いてページ・キャッシュをオーバーフローさせ、root 権限を取得する可能性がある。この脆弱性は、Kernel が FUSE の readdir 結果をキャッシュする際に使用するコードパスに影響を及ぼす。FUSE は、ユーザー空間のファイル・システムが “/dev/fuse” を介して Kernel と通信するための仕組みであり、将来の読み取りを高速化するために、Kernel がディレクトリ・エントリをキャッシュする場合がある。

Bynario の分析によると、Kernel がサーバが制御するファイル名の長さから、ディレクトリ・エントリのサイズを計算する fuse_add_dirent_to_cache() 関数に、この脆弱性は存在する。具体的には、エントリ自体が 1 ページを超えるかどうかを事前に確認せずに、単一のキャッシュ・ページへコピーしてしまうというバグがある。
この脆弱性を悪用する FUSE サーバが、4 KiB ページ・システムにおいて、シリアライズ後のサイズが 4120 バイトとなるディレクトリ・エントリを返すことで、1 ページの容量が 24 バイト超過するという問題が引き起こされる。
その一方で、Kernel がオフセットを “0” にリセットした状態でレコードをコピーすると、余分なバイトが隣接するメモリ・ページへあふれ出し、単なるメモリ破損だけではなく、破損したデータの書き込み先に応じて、深刻な影響が生じる可能性がある。
脆弱性 CVE-2026-31694 の悪用
報告された検証では、このオーバーフローを悪用するかたちで、”/usr/bin/su” などの SUID バイナリからキャッシュされたバイトを改竄し、実行コードの先頭を setuid(0) および setgid(0) を呼び出す短いペイロードへ置き換えた後であっても、通常どおりの処理が継続することが確認されている。
これらの権限変更システム・コールを、root 所有のプログラム内で成功させる攻撃者は、通常の認証チェックをバイパスして root シェルを起動できる。
このローカル攻撃の前提として、攻撃者にとって FUSE ファイル・システムをマウント/実行する能力が必要となるが、非特権ユーザー・ネームスペースまたは fusermount3 を介して、この能力が付与される場合がある。
Bynario によると、この問題は大容量の readdir バッファを備えた新しい Kernel で悪用可能であり、4 KiB のメモリ・ページを使用するシステムのみに影響を及ぼす。ただし、4 KiB よりもページ・サイズが大きなシステムは、このオーバーフローの影響を受けない。
修正方法は単純であり、キャッシュする前に単一ページに収まらないディレクトリ・エントリを拒否することで対処できる。それに加えて、管理者は FUSE の使用を制限し、不要な場合は fusermount3 から setuid ビットを削除し、必要に応じて非特権ユーザー・ネームスペースを制限することで、この脆弱性によるリスクを低減できる。
訳者後書:脆弱性 CVE-2026-31694 は、 Kernel の FUSE サブシステムにおける、ディレクトリ・エントリのサイズ・チェックの不備に起因します。この欠陥を突く悪意のサーバが、1 ページの容量を超える大きなデータを返した際に、事前の確認がないままキャッシュ・ページへコピーされるため、隣接するメモリ領域へデータがあふれ出してしまいます。このメモリ破損により、SUID バイナリのデータが書き換えられ、結果としてローカルの攻撃者に root 権限を奪取される危険性があります。ページサイズが 4 KiB のシステムにおいて、サイズ計算の不備と境界チェックの欠如が重なったことが深刻な問題に繋がっています。ご利用のチームは、ご注意ください。よろしければ、Linux kernel での検索結果も、ご参照ください。
You must be logged in to post a comment.