CVE-2026-72193 in Linux
要約
〜によって VulDB • 2026年08月17日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ntfs3: rt->used で RESTART_TABLE の free-chain ウォーカーを制限する
悪意のある NTFS3 ディスクイメージは、マウント時にカーネル内の無限ループを引き起こし、マルチCPU環境のホスト上で約22秒以内にマウントスレッドをハングさせ、ソフトロックアップウォッチドッグを発動させる(kernel.softlockup_panic=1 の場合パニック)。このバグは、udisks2 が NTFS シグネチャをインツリー内の ntfs3 ドライバーにルーティングするディストリビューション(Arch系およびFedora/openSUSE/RHELの展開数の増加している割合)におけるデスクトップUSB自動マウントから到達可能である。それ以外の場所では、CAP_SYS_ADMIN権限を持つ手動マウントによって到達可能となる。
check_rstbl() の2番目のウォーカーは、rt->first_free をヘッドとする free-entry 単一連結リストを反復処理するが、反復回数の上限がない:
```c for (off = ff; off;) {
if (off == RESTART_ENTRY_ALLOCATED) return false; off = le32_to_cpu(*(__le32 *)Add2Ptr(rt, off)); if (off > ts - sizeof(__le32)) return false; } ```
既存のガードは、リスト末尾(off == 0)、使用中マーカー(off == RESTART_ENTRY_ALLOCATED)、境界外アクセス(off > ts - sizeof(__le32))という3つの終了条件をカバーしている。しかし、これら3つはいずれも範囲内のサイクル(in-bounds cycle)を防ぐことはできない。
オフセットが以下の条件を満たす悪意のあるディスク上の RESTART_TABLE は: - [sizeof(struct RESTART_TABLE), ts - sizeof(__le32)] の範囲内にあること
- (off - sizeof(struct RESTART_TABLE)) % rsize == 0 を満たすこと
既存のすべてのガードを通過し、マウント時のスレッドを永遠にループさせる。具体的には、UML(User Mode Linux)で手作業で作成した2MBのNTFS3イメージを用いて再現された。このイメージではジャーナル RESTART_TABLE の first_free が 0x18 で、オフセット 0x18 にあるエントリが次のポインタとして 0x18 を格納している。インツリー内の ntfs3 ドライバーでこの偽造イメージをマウントすると、処理が永遠に返らない。
ウォーカーを rt->used で制限する。正当な free chain の各エントリは一意であり、総スロット数は ne = le16_to_cpu(rt->used) である。ne個のスロット以上を訪れる走査は構造的に不正(malformed)であるため、これを壊れた RESTART_TABLE として拒否する。
このパッチ適用後、偽造イメージのマウントは -EINVAL と log_replay の失敗メッセージを伴って終了し、mkntfsによって生成された正当なイメージは正常にマウントされる(同じUMLハーネスで検証済み)。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.