Skip to content

Nested-virtualization fuzzing via harness VMs

L0 hypervisor'ın nested-virtualization interface'ini, bu amaçla inşa edilmiş bir L1 "harness VM" içinden fuzz'lama — VMX/SVM operation'larını, hypercall'ları ve VMCS state'ini bunlara dokunamayan unprivileged bir guest yerine fiilen erişilebilir oldukları yerden üretip mutate etme (NecoFuzz yaklaşımı).

Mechanism

Note

Nested-virt interface'i — VMXON/VMPTRLD, VMREAD/VMWRITE, VMLAUNCH/VMRESUME/VMRUN, INVEPT ve ilişkili VMCS/VMCB field uzayı — yalnızca bir hypervisor olarak çalışan kod tarafından çalıştırılır. Normal unprivileged bir guest process bu instruction'ları gönderemez, dolayısıyla geleneksel guest tarafı fuzzer'lar onları işleyen L0 emulation handler'larına asla ulaşmaz. Nested-virt bug sınıfı tam da o kodda yaşar (validation boşlukları, double-fetch'ler, VMCS field offset'lerinde OOB — bkz. L2-to-L1 escape).

Harness-VM fikri: bütün işi fuzzer olmak olan, instrumente edilmiş bir L1 guest çalıştırmak. L1 içinden nested-virt opcode'larına doğal erişimi vardır ve VMCS12/VMCB12 field'larını, control bitmap'lerini, EPT pointer'larını ve hypercall'ları mutate edilmiş input'larla sürebilir, sonra L0'ın merge ve exit-handling yollarını tetiklemek için tek kullanımlık bir L2'ye VMLAUNCH eder. Test altındaki invariant, L0'ın herhangi bir L1-supplied control state için güvenli kalması gerektiğidir; harness, L0'ın varsaydığı well-formedness'i sistematik biçimde ihlal ederek memory-safety ve logic bug'larını yüzeye çıkarır. Mutasyonu yönlendirmek için coverage ve crash sinyalleri toplanır.

Walkthrough

Public reference: NecoFuzz (EuroSys '26). Kavramsal kurulum:

  1. Nested virtualization etkinleştirilmiş hedef L0 (örn. KVM) altında bir L1 harness VM boot et.
  2. L1 içinde fuzzer VMX/SVM state'i kurar — VMCS12/VMCB12 field'ları, MSR/IO bitmap'leri, ept_pointer, control field'ları — geçerli template'lerden seed alarak.
  3. Field'ları mutate eder ve operation'ı gönderir (VMWRITE sonra VMLAUNCH ya da bir hypercall), L0'ın emulation/merge'ini tek kullanımlık bir L2'ye sürerek.
  4. L0'dan gelen coverage feedback'i ileri mutasyonu yönlendirir; L0'daki crash/hang'ler aday güvenlik açıkları olarak triage edilir.

Beklenen gözlemlenebilir: fuzzer, sıradan bir guest'ten erişilemeyen derin L0 nested-virt code path'lerine ulaşır ve gerçek bug'lara karşılık gelen crash'leri raporlar (NecoFuzz, production nested-virt implementation'larında bug/CVE bulduğunu raporlar).

Warning

Yalnızca test etmeye yetkili olduğun hypervisor'ları fuzz'la; nested-virt fuzzing host'u crash edebilir. Bu savunma amaçlı bir keşif tekniğidir — bir L2-to-L1 escape'in silahlandıracağı aynı bug'ları bulur.

Detection

  • İzlenen bir host'ta, harness güdümlü fuzzing kötü biçimlendirilmiş VMX/SVM operation'larının seli ve tek bir L1'den gelen sık L0 emulation fault'ları olarak kendini gösterir — iyi huylu bir nested hypervisor'a kıyasla bariz bir anomali.

Mitigation

  • Tekniği savunma için saldırgan biçimde kullan: validation/double-fetch/OOB bug'larını release'ten önce yakalamak için nested-virt fuzzing'i hypervisor CI'ına entegre et.
  • L0 emulation'ını sıkılaştır: validate-once VMCS kopyaları, sıkı field-offset sınırları, merge path'lerini fuzz'la.

References

  • "NecoFuzz: Effective Fuzzing of Nested Virtualization via Fuzz-Harness Virtual Machines" (EuroSys '26). https://arxiv.org/pdf/2512.08858