Linux Distros のパッチ未適用の脆弱性: CVE-2026-98974

critical Nessus プラグイン ID 371499

概要

Linux/Unix ホストには、ベンダーにより修正されていないことを示す脆弱性を持つ複数のパッケージがインストールされています。

説明

Linux/Unix ホストには、ベンダーが提供するパッチが利用できない脆弱性の影響を受ける複数のパッケージがインストールされています。

- xfs:exchange-range-to-eof ファイルサイズ交換を修正します Norbert Szetei 氏は、XFS_IOC_EXCHANGE_RANGE の TO_EOF フラグにあるバグについての不完全な説明を含むパッチを投稿しました。このバグは、exchange-range が騙されて、EOF を超えて開始するブロックを共有できるようにファイルを変更させます。ファイルには EOF を超えて書き込まれたデータはなく、書き込みされたデータブロックしか共有できないため、これは決して許可されません。これが、その後に起こるすべての誤った動作の鍵となります。最終的に、私はノーバートから何が起こっているのか、つまり「>フェア」という説明をもらいました。ここに物理ブロック番号、4kブロックがあります。peer は書き換えられるファイル>であり、file1 はフラグがクリアされた状態で終了するファイル>です。> > 開始、何も共有されません:> > ピアサイズ 4096 -> [100] > file1 サイズ 12288 -> [200] [201] [202] > donor1 サイズ 4096 -> [300] > donor2 サイズ 4096 -> [400] > > 1.file1 の中間スロットへの FICLONERANGE ピアのブロック:> > ピアサイズ 4096 -> [100] > file1 サイズ 12288 -> [200] [100] [202] reflink フラグセット > ^^^^^ 両方のファイルがブロック 100 > > 2 を所有します。XFS_IOC_EXCHANGE_RANGE donor1 に対する file1、file1_offset 0、> file2_offset 8192、長さ 0、TO_EOF。1 つのブロックが交換され、>のサイズがそれと交換されます:> > file1 サイズ 4096 -> [200] [100] [300] reflink フラグセット > ^^^^^^^^^^^ はまだ所有されていますが、現在は donor1 のサイズを超えています > サイズ 12288 -> [202] > > file1 はまだ 3 つを所有しているのに、長さは 1 ブロックだと言います。マッピング解除>ものは何もありませんでした。file2_offsetはブロック 2 であるため、この交換はフラグをクリアできません。> > 3.
XFS_IOC_EXCHANGE_RANGE donor2 に対する file1、両方のオフセット 0、長さ 4096。> i_disk_sizeにより、これは 2 つの 1 ブロックのファイルがすべてを交換することになります。このため、> xmi_can_exchange_reflink_flags() が同意し、フラグがクリアされます:> > file1 サイズ 4096 -> [400] [100] [300] reflink フラグが donor2 サイズ 4096 >クリアされました -> [200] > > ブロック 100 は依然としてピアと共有されています。> > 4.pwrite(file1, 4096, 4096) であり、file1 の 2 番目のスロットであるブロック 100 です。> xfs_is_cow_inode(file1) は false であるため、CoW はありません:ピアサイズ 4096 > > -> [100] 同じブロック、ブロック 100 > >新しいコンテンツだけがここで重要です。PoCでは、現在のディレクトリのpeerと呼ばれるファイル>読み込みます。ファイルシステムには、reflink と > exchange-range が必要で、mkfs.xfs 7.x デフォルトでこれをオンにします。そう、実際にはデータブロックを正しく交換しているにもかかわらず、TO_EOFファイルサイズを台無しにしています。以下は、man ページで説明されているように、XFS_EXCHANGE_RANGE_TO_EOF の意図された動作です: 長さパラメーターを無視します。file1_offset から EOF までの file1_fd 内のすべてのバイトは file2_fd に移動し、file2 のサイズは (file2_offset+(file1_length-file1_offset)) に設定されます。その間、file2_offsetからEOFまでのfile2のすべてのバイトはfile1に移動し、file1のサイズは(file1_offset+(file2_length-file2_offset))に設定されます。つまり、ファイルデータの一部のみを交換する場合は、交換したデータに関連するファイルサイズの部分のみを交換する必要があります。残念ながら、このコードによりオンディスクファイルサイズとインコアファイルサイズが入れ替わりますが、呼び出し元がゼロ以外のオフセットで渡す場合、これは正しくありません。ファイルサイズを混乱させた結果、PoC は、参照リンクされていないシングルブロックファイルのように見えるものに対して、2 番目の交換範囲呼び出しを使用します。
ファイルサイズの設定が不適切であるため、exchange-range は 2 つのファイルの完全なコンテンツを交換していると考え、壊れたファイルの reflink フラグを消去します。これにより、破損したファイルの拡張書き込みが有効になり、EOF を過ぎたばかりの共有ブロックを書き換えられます。これは、口語的に refluxfs として知られるようになりました。ファイルサイズが正しく設定されると、第 2 の exchange-range は、フルコンテンツスワップをしているとは考えなくなり、ファイルの引数のどちらかで reflink フラグをクリアしなくなります。Norbert 氏は、このパッチの以前のバージョンにフォローアップして、i_disk_size 状態を適切に処理できていないことに関する第 2 の苦情を提出しました: > オフセットは、インコアi_sizeに対してバインドされますが、> ---truncated--- から差し引かれます(CVE-2026-98974)

Nessus は、ベンダーから報告されたパッケージの存在に依存していることに注意してください。

ソリューション

現時点で既知の解決策はありません。

参考資料

https://security-tracker.debian.org/tracker/CVE-2026-98974

プラグインの詳細

深刻度: Critical

ID: 371499

ファイル名: unpatched_CVE_2026_98974.nasl

バージョン: 1.1

タイプ: Local

エージェント: unix

ファミリー: Misc.

公開日: 2026/10/23

更新日: 2026/10/23

サポートされているセンサー: Frictionless Assessment Agent, Nessus Agent, Agentless Assessment, Tenable Cloud Security, Tenable Self-Hosted Container Security, Nessus

リスク情報

VPR

リスクファクター: Medium

スコア: 6.9

パーセンタイル: 96.41

CVSS v2

リスクファクター: High

基本値: 7.5

現状値: 6.4

ベクトル: CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P

CVSS スコアのソース: CVE-2026-98974

CVSS v3

リスクファクター: Critical

基本値: 9.8

現状値: 9

ベクトル: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

現状ベクトル: CVSS:3.0/E:U/RL:U/RC:C

脆弱性情報

CPE: cpe:/o:debian:debian_linux:13.0, p-cpe:/a:debian:debian_linux:linux

必要な KB アイテム: Host/local_checks_enabled, Host/cpu, global_settings/vendor_unpatched, Host/OS/identifier

エクスプロイトの容易さ: No known exploits are available

脆弱性公開日: 2026/10/23

参照情報

CVE: CVE-2026-98974