Skip to content

L2-to-L1 escape (nested KVM guest escape)

İki kat nested bir guest'ten (L2) guest hypervisor'a (L1) kaçmak; bunun için L1'in nested-virtualization emulation'ındaki bir bug suistimal edilir — L1'in (L0 altında çalışırken) kendi L2 guest'i adına yaptığı VMREAD/VMWRITE/VMCS12 handling.

Mechanism

Note

nested virtualization'da seviyeler L0 (gerçek host), L1 (guest hypervisor) ve L2'dir (L1'in guest'i). L1 gerçek hardware VMX state'ine dokunamaz, dolayısıyla L2 VMX instruction'larını çalıştırdığında, L1 bunları software'de, L1'in kendi kernel memory'sinde allocate ettiği bir vmcs12 yapısına karşı emulate eder (VMCS shadowing / VMCS12 modeli). L0 yalnızca L1'in emulation'ının çalışmasını sağlar; L1'in emulation'ının iç correctness'ini denetlemez.

Bu da L1'in nested-virt emulation handler'larını (handle_vmread, handle_vmwrite, VMCS field copy logic, nested EPT setup) L2-controlled input'un privileged bir parser'ı haline getirir. Oradaki bir memory-safety bug'ı — kontrol edilmemiş bir VMCS field offset'i, vmcs12 allocation'ına göre bir OOB read/write, bir type/length confusion'ı — L2'ye L1'in kernel heap'ine bir read/write primitive'i verir. Kırılan invariant şudur: L2 yalnızca L1'in kendisi için kurduğu sanal makineyi görmeli; oysa L2 L1 kernel memory'sine ulaşır. L1'deki bir OOB R/W'den saldırgan bir L1 kernel function pointer'ı (örneğin bir workqueue callback) bulup hijack ederek L1 olarak kod çalıştırır.

Walkthrough

Public reference: corCTF 2024 "Trojan Turtles" (primitive'i gösteren, kasıtlı backdoor'lanmış bir KVM; bug class'ı gerçek nested-VMX emulation kusurlarına genelleşir). Writeup'tan soyutlanmış kavramsal yol:

  1. L2'de, L1'in emulation handler'larının çalışması için nested VMX state'ini initialize et:
    vmxon ; vmptrld   # cause L1 to emulate against its vmcs12
    
  2. Vulnerable handler'ı saldırgan-seçimli input'larla sür. Trojan Turtles demosunda trigger, debug register'larında taşınan bir magic value artı bir saldırgan offset'idir:
    dr0 = 0x1337babe        # arm the OOB path
    dr1 = offset            # index relative to the vmcs12 allocation
    vmread/vmwrite ...      # L1 reads/writes *(((u64*)vmcs12)+offset)
    
    Gerçek bir CVE'de aynı etki, yerleştirilmiş bir backdoor yerine validate edilmemiş bir VMCS field encoding/offset'inden gelir.
  3. Oluşan OOB read'i L1 kernel pointer'larını leak etmek için kullan, ardından OOB write ile bir L1 function pointer'ı overwrite et (writeup kvm->arch.kvmclock_update_work.work.func'ı hedefler).
  4. L1 o callback'i invoke ettiğinde, control L1 privilege'ında saldırgan koduna transfer olur — L2'den L1'e escape.

Warning

Yalnızca test etmeye yetkili olduğun sistemlere karşı kullan. Bu, kavramsal primitive'i tanımlar (nested-virt emulation'da OOB -> L1 codeexec); drop-in bir exploit değildir ve spesifik L1 kernel'ine ve bug'a bağlıdır.

Doğrulama durumu

Unverified: bu kayıt bir generalized bug class'ını tarif eder; tek somut public referans kasıtlı backdoor'lanmış bir PoC'dir (corCTF Trojan Turtles), bu pattern'e bire bir oturan spesifik bir public KVM nested-VMX VMCS-OOB CVE'si doğrulanmadı.

Detection

  • L1 tarafı: her L2-supplied VMCS field encoding/offset'ini kullanmadan önce validate et; vmcs12 page'inin dışını indeksleyen bir vmread/vmwrite emulation'ı belirtidir.
  • Host/L0: L1'in KVM emulation'ında crash tetikleyen nested guest'ler, ya da L2 VMX aktivitesiyle ilintili L1 kernel oops'ları.

Mitigation

  • L1'in kernel'ini patch'li tut: nested-VMX/SVM emulation OOB ve double-fetch fix'leri (bkz. nested_svm_vmrun host MSR control).
  • VMCS field offset'lerini katı şekilde bounds-check et ve guest VMCS state'ini validate edilmiş bir buffer'a bir kez kopyala.
  • Gerekmediği yerde nested virtualization'ı devre dışı bırakarak attack surface'i tamamen kaldır.

References

  • Will's Root — "corCTF 2024 - Trojan Turtles: A KVM Escape Exploit from the L2 Guest to the L1 Hypervisor." https://www.willsroot.io/2024/08/trojan-turtles.html
  • "The Turtles Project: Design and Implementation of Nested Virtualization" (OSDI 2010). https://www.cs.utexas.edu/~witchel/380L/papers/benyehuda10osdi-turtles.pdf