KVM nested EPT/NPT TLB-flush state confusion (Hyper-V hypercall)¶
KVM'in Hyper-V "slow" TLB-flush hypercall path'inin, dar nested-EPT/NPT MMU state'i yerine generic nested-guest mode'u test ettiği bir nested-MMU logic bug'ı (CVE-2026-46131); böylece bir paravirtual flush, second-level translation'ı invalidate etmeyi atlayıp stale guest-physical mapping'leri canlı bırakabilir.
Mechanism¶
Note
nested EPT (Intel) veya nested NPT (AMD) ile nested virtualization altında address translation iki seviyelidir: bir guest-virtual address önce L1'in guest page table'ları üzerinden, sonra da L1'in L2 için tanımladığı second-level translation (EPT12/NPT) üzerinden çözülür ki bunu da L0 shadow'lar. Guest OS, Hyper-V PV TLB-flush hypercall ile bir TLB flush istediğinde KVM doğru translation cache'lerini invalidate etmek zorundadır — ve hangi cache'lerin flush edilmesi gerektiği, vCPU'nun sadece "guest mode'da" olup olmadığına değil, şu an aktif bir nested EPT/NPT MMU olup olmadığına bağlıdır.
CVE-2026-46131 bir state-confusion bug'ı: slow Hyper-V flush hypercall handler'ı, davranışını özellikle nEPT/nNPT için kontrol etmek yerine genel nested-guest mode'a göre belirliyordu. Fix, koşulu daraltıyor ("check for nEPT/nNPT in slow flush hypercalls"). Kırılan invariant, isolation boundary boyunca translation coherence'tır: stale second-level mapping'leri düşürmesi gereken bir flush yanlış scope'lanabilir, böylece bir L2 guest stale memory translation'larını kullanmaya devam edebilir — artık map'li olmaması gereken guest-physical page'leri okuyup yazabilir, yani bir confidentiality/integrity ihlali.
Walkthrough¶
Primer kaynak upstream kernel commit'i ve MSRC advisory'sidir (commit başlığı "KVM: x86: check for nEPT/nNPT in slow flush hypercalls"); CVE-to-commit eşlemesi bu primer kaynaklardan teyit edilmeli, aggregator domain'lere (ör. windowsnews.ai) co-equal güvenilmemeli. Kavramsal path:
- Host, nested virtualization ile KVM çalıştırır; bir L1 guest, Hyper-V enlightenment'larını (bkz. enlightened VMCS) ve PV TLB-flush hypercall'unu kullanır ve L2 guest'i için nested EPT/NPT aktiftir.
- Invalidate edilmesi gereken bir translation (ör. L1 bir L2 GPA'yı remap ettikten sonra) Hyper-V slow TLB-flush hypercall'unu tetikler.
- Handler nEPT/nNPT state yerine generic nested mode'u kontrol ettiğinden, second-level (EPT/NPT) translation gerektiği gibi flush edilmez.
- L2 stale mapping'e erişmeye devam eder — flush'un unmap etmesi gereken page erişilebilir kalır.
Warning
Bu bir logic bug'ı, memory-corruption overflow değil; exploit değeri stale-translation erişimidir ve bu timing/scheduling'e bağlıdır. Her türlü reproduction'ı kavramsal tut — tam tetikleme KVM versiyonuna ve Hyper-V enlightenment negotiation'a bağlıdır.
Detection¶
- Kernel'in Hyper-V TLB-flush hypercall handler'ını audit et: düzeltilmiş kod
slow-flush'ı yalnızca
is_guest_mode()yerine nEPT/nNPT MMU state'ine bağlar. - Davranışsal belirti: bir L2'nin, L1-initiated remap + PV flush sonrası unmap edilmiş olması gereken memory içeriğini gözlemlemesi.
- Çalışan kernel'in CVE-2026-46131 fix'ini içerdiğini doğrula.
Mitigation¶
- Patch'lenmiş kernel'i uygula (CVE-2026-46131): flush'u doğru biçimde nested-EPT/NPT MMU'ya scope'la.
- Patch'leme gecikiyorsa, nested virtualization'ı devre dışı bırakmak bug'ın bağlı olduğu nEPT/nNPT path'ini ortadan kaldırır.
- Nested virtualization'ı ve Hyper-V enlightenment'larını yalnızca trusted guest'lerle sınırla.
References¶
- MSRC Security Update Guide — CVE-2026-46131 ("KVM: x86: check for nEPT/nNPT in slow flush hypercalls"). https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-46131
- OffSeq Threat Radar — "KVM: x86: check for nEPT/nNPT in slow flush hypercalls" (CVE-2026-46131, NVD/MITRE referansları). https://radar.offseq.com/threat/kvm-x86-check-for-neptnnpt-in-slow-flush-hypercall-874fa9d8
- "CVE-2026-46131: Fixing Linux KVM Nested EPT/NPT Hyper-V TLB Flush State Bug" (aggregator/secondary). https://windowsnews.ai/article/cve-2026-46131-fixing-linux-kvm-nested-eptnpt-hyper-v-tlb-flush-state-bug.420643