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:
- Nested virtualization etkinleştirilmiş hedef L0 (örn. KVM) altında bir L1 harness VM boot et.
- 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. - Field'ları mutate eder ve operation'ı gönderir (
VMWRITEsonraVMLAUNCHya da bir hypercall), L0'ın emulation/merge'ini tek kullanımlık bir L2'ye sürerek. - 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