【活用ガイド】

JVNDB-2026-023778

LinuxのLinux Kernelにおける複数の脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。KVM: kvm_reset_dirty_gfn()におけるオフセットの巻き戻りを拒否します。kvm_reset_dirty_gfn()は以下の条件でgfn範囲を保護しています。 if (!memslot || (offset + __fls(mask)) >= memslot->npages)  return;しかし、offsetはu64型であり、加算が検証されていません。このチェックはu64の巻き戻りにより静かに回避可能です。エントリを保持するdirtyリングは、vcpuのfd上のKVM_DIRTY_LOG_PAGE_OFFSETでMAP_SHAREDとしてマッピングされているため、VMMはカーネルがそれらをプッシュしたタイミングとKVM_RESET_DIRTY_RINGSがそれらを消費するタイミングの間で、任意のエントリのslotおよびoffsetフィールドを書き換えることが可能です。リセット時、kvm_dirty_ring_reset()はREAD_ONCE()で値を再取得し、このチェックにそのまま渡します。flagsのハンドシェイクのみが引き継がれ、slotおよびoffsetのペイロードは信用されています。2つのエントリを作成することで、entry[i].offset = 0xffffffffffffffc1、entry[i+1].offset = 0 と設定します。kvm_dirty_ring_reset()の合成ループは以下を計算します。delta = (s64)(0 - 0xffffffffffffffc1) = 63 これは[0, BITS_PER_LONG)に収まり、entry[i+1]がビット63をセットすることで既存のマスクに折りたたまれます。続くkvm_reset_dirty_gfn()の呼び出しはoffset = 0xffffffffffffffc1および__fls(mask) = 63を参照し、u64の加算結果は0となり、境界チェックを通過します。このoffsetは変更されずにkvm_arch_mmu_enable_log_dirty_pt_masked()に伝播されます。旧MMUパス(kvm_memslots_have_rmaps() == true、つまりシャドウページング)では、シャドウルートを割り当てている、かつ書き込み追跡されたslotを持つ任意のVMがgfn_to_rmap()に到達し、slot->arch.rmap[0][]をnear-U64_MAXのgfnでインデックス指定します。これはkvm_rmap_headの境界外読み込みとなり、読み込んだポインタ先のPT_WRITABLE_MASKの条件付きクリアが行われます。この経路は/dev/kvmを保持している任意のプロセスから到達可能です。まずoffset自体を範囲チェックし、加算で巻き戻りが起きないようにする必要があります。memslot->npagesはU64_MAXより十分小さい範囲に制限されているため、offset < npagesが成立すれば、offset + __fls(mask) (ただし__fls(mask) < BITS_PER_LONG)が範囲内に収まります。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 7.8 (重要) [NVD値]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): 高
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 5.11 以上 5.15.209 未満
  • Linux Kernel 5.16 以上 6.1.175 未満
  • Linux Kernel 6.13 以上 6.18.33 未満
  • Linux Kernel 6.19 以上 7.0.10 未満
  • Linux Kernel 6.2 以上 6.6.141 未満
  • Linux Kernel 6.7 以上 6.12.91 未満
  • Linux Kernel 7.1

本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。
想定される影響

・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。
・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。
・当該ソフトウェアが完全に停止する可能性があります。
対策

ベンダ情報を参照して適切な対策を実施してください。
ベンダ情報

レッドハット
CWEによる脆弱性タイプ一覧  CWEとは?

  1. 配列インデックスの不適切な検証(CWE-129) [NVD評価]
  2. 整数オーバーフローまたはラップアラウンド(CWE-190) [その他]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-52969
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-52969
  2. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/0d419c23bb11b5c9664de777c47c1f04a235882d)
  3. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/74f1a22f7a80f03d28ad8551a2d25d563433addf)
  4. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/0eb281eb95b2d4eea4db1da5fe91023aecc97095)
  5. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/577a8d3bae0531f0e5ccfac919cd8192f920a804)
  6. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/01b71b930f15728aa8599478a7ce90c19dcd9fc2)
  7. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/b315b033a877b1ee6d827810b5d7bb4392ffcf8d)
  8. 関連文書 : KVM: Reject wrapped offset in kvm_reset_dirty_gfn() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/ecf9b3ea7847fe14f34b8c41f00de1eb95c747da)
更新履歴

  • [2026年07月16日]
      掲載