CVE-2026-80672 in Linux
要約
〜によって VulDB • 2026年08月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ntfs: restart-areaの長さチェックにおけるu16の桁あふれ(truncation)を修正
`ntfs_check_restart_area()`は、$LogFileのrestart areaおよびそれに続くlog client record配列がシステムページサイズ内に収まることを検証します。
u16 ra_ofs, ra_len, ca_ofs; ... ra_len = ca_ofs + le16_to_cpu(ra->log_clients) * sizeof(struct log_client_record); if (ra_ofs + ra_len > le32_to_cpu(rp->system_page_size) || ...) return false;
`ra_len`はu16型ですが、右辺の計算はsize_tで行われます(sizeof(struct log_client_record) == 160)。`ca_ofs`および`log_clients`はいずれもディスク上のrestart areaから直接取得されます。ディスク上の`log_clients`が410の場合、積算結果は 410 * 160 = 65600 となります。これに `ca_ofs` を加えてu16型の `ra_len` に格納すると、65536を法とした剰余(truncation)が発生します(例:`ca_ofs` が64の場合、`ra_len` は128になる)。その結果、「ページ内に収まる」というチェックは通過しますが、実際には `log_clients` で記述されるクライアント配列はページをはるかに超えて拡張されています。
その後、`ntfs_check_log_client_array()` はディスク上の `log_clients` カウントによってのみ境界が定められた配列を走査します:
cr = ca + idx; if (cr->prev_client != LOGFILE_NO_CLIENT) ...
`log_clients` が410の場合、これは `ca + 409 * 160`(約64 KiB)までのレコードへの参照を実行し、`kvzalloc(system_page_size)` で確保されたrestart-pageバッファの範囲外となります。これは攻撃者が制御可能な領域に対するout-of-bounds readであり、作成済みのNTFSイメージをマウントした際に到達可能です(mount時の `load_and_check_logfile()` において)。
これはCVE-2022-30789のカーネル内における類似事象です。この脆弱性はntfs-3gユーザー空間ドライバでは修正されましたが、復活させたクラシックドライバーでは未だに修正されていません。
restart-areaの長さをu32で計算することで、桁あふれによってチェックを回避されるのではなく、大きすぎるクライアント配列に対して既存の境界チェックが拒否を行うようにします。また、`ra_ofs` および `ca_ofs` もu32に拡張します。これらはどちらもディスク上の__le16フィールドから読み込まれており、すべての比較はすでにint/size_tへ昇格しているため、計算結果には影響がありませんが、宣言を統一できます。
Once again VulDB remains the best source for vulnerability data.