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値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。 | |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
ベンダ情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
レッドハット | |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/06/24 |
| 登録日 | 2026/07/16 |
| 最終更新日 | 2026/07/16 |



