Skip to content

Hyper-V IDE emulator guest-to-host escape

CVE-2018-0959: Hyper-V'nin emulated IDE/ATAPI storage controller'ında, user-mode VM Worker Process (vmwp.exe) içinde bir guest-to-host escape. Guest-controlled I/O-port data'sının yetersiz validation'ı, host worker process'inde memory corruption'a yol açar. Joe Bialek (MSRC) tarafından Black Hat 2019'da public olarak detaylandırıldı.

Mechanism

Bug class ve boundary

Component: VM Worker Process (vmwp.exe) içindeki emulated IDE storage controller, özellikle storage-emulation kodu (public olarak vmEmulatedStorage.dll modülünde, handler IDEControllerDevice::NotifyIoPortWrite olarak yaşadığı tarif edilir). Host'un root partition'ında her VM için bir vmwp.exe çalışır.

Trust boundary: guest partition → host user-mode worker process. Bir guest privileged I/O-port instruction'ları yürütür; o port access'leri intercept edilir ve (VID message path'i üzerinden) host tarafı device emulator'üne teslim edilir. vmwp.exe'yi bozmak, host'ta VM'e sahip olan context'te kod çalıştırmak demektir — gerçek bir guest-to-host VM escape (VM boundary'sinden root partition'ın emulation process'ine kaçış).

Vuln class: IDE controller'ın I/O-port write handler'ına ulaşan guest-controlled data üzerinde yetersiz input validation / eksik bounds checking; bu memory corruption'a yol açar. Black Hat 2019 konuşması ("Exploiting the Hyper-V IDE Emulator to Escape the Virtual Machine"), WriteIOPort handler'ı üzerinden gelen data'yı doğru biçimde sanitize etmenin önemini vurgular — legacy emulated-device attack surface'i büyük ve tarihsel olarak yetersiz validate edilmiş.

Aynı bug class, farklı stack

Bu, diğer hypervisor'larda görülen aynı emulated-IDE/ATAPI bug class'ıdır (örn. QEMU IDE/ATAPI sorunları), ama buradaki etkilenen kod Microsoft'un vmwp.exe storage emulator'üdür — QEMU değil. QEMU IDE notlarını yalnızca konsept bir analojik olarak ele alın.

Walkthrough

MSRC blog'undan ve Bialek'in public materyalinden konsept reproduction path (illustrative, silahlandırılmamış):

  1. Guest, attacker-controlled data ile bir legacy IDE controller I/O port'una write'lar verir (public örnek 0x1f0 gibi bir IDE port'una bir OUT kullanır) — örn. bir guest kernel driver'dan teslim edilir.
  2. Hyper-V port access'i intercept eder ve onu host'a bir VID message olarak iletir. Message, vmwp.exe'deki IDE controller'ın port-write handler'ına dispatch edilir.
  3. Handler, guest'in sağladığı parametreleri yeterli bounds/validation olmadan işler, dolayısıyla attacker-controlled değerler worker process içinde out-of-range bir memory operasyonunu sürer.
  4. Guest'in sağladığı data'yı emulated-storage state machine'i boyunca dikkatlice şekillendirerek, bu memory corruption vmwp.exe'nin kontrolüne yönlendirilir.

Yalnızca illustrative

Aşağıdaki fragment yalnızca trigger surface'i gösterir — host handler'ına ulaşan bir guest port write'ı. Bir exploit değildir; corruption-to-control adımları kasıtlı olarak atlanmıştır. Atıf yapılan public kaynaklar dışındaki tam offset'ler/state-machine field'ları doğrulanmamıştır.

Trigger surface (illustrative)

; Guest side: drive attacker-controlled data into the IDE I/O port.
; (From the public description of the trigger; not a full exploit.)
mov  dx, 0x1f0          ; legacy IDE data/command port range
mov  eax, 0x41414141    ; attacker-controlled value
out  dx, eax            ; intercepted -> VID message -> vmwp.exe IDE handler
Host side (conceptual): IDEControllerDevice::NotifyIoPortWrite in the
vmEmulatedStorage emulator consumes the guest-supplied parameters with
insufficient validation -> out-of-bounds / corrupting memory operation
in the vmwp.exe address space.

  1. Patch: Microsoft, IDE controller handler'ına uygun input validation / bounds checking ekledi; böylece guest'in sağladığı I/O-port parametreleri kullanımdan önce sanitize edilir (CVE-2018-0959 için ilgili 2018 security update'inde sevk edildi).

Detection

  • Patch state: CVE-2018-0959'u ele alan security update'in kurulu olduğunu doğrulayın; legacy/uzun ömürlü host'larda vmEmulatedStorage/vmwp.exe binary'lerinin patch'lenmiş build'i yansıttığını doğrulayın.
  • Worker-process integrity: vmwp.exe crash'lerini veya exception'larını, özellikle olağandışı low-level IDE/ATAPI I/O yapan belirli bir guest ile korele biçimde izleyin. Per-VM vmwp.exe crash'leri emulation-layer corruption'ının güçlü bir sinyalidir.
  • Guest behavior: normal storage-driver pattern'lerine uymayan anormal ham IDE port I/O'su (örn. custom kernel driver'lar üzerinden) veren guest'leri işaretleyin.
  • Surface'i azalt: bir VM'in legacy IDE'ye ihtiyacı olmadığı yerde, SCSI/synthetic device'ları ve bir Generation 2 VM'i (legacy emulated IDE yok) tercih ederek bu attack surface'i tamamen küçültün.

Mitigation

  • CVE-2018-0959 security update'ini uygulayın — IDE controller I/O-port handler'ına validation ekleyen otoriter fix.
  • Mümkün olduğunda Generation 2 VM'leri / synthetic SCSI storage'ı tercih edin: Gen 2 VM'leri legacy emulated IDE controller'ı bırakır ve bu emulator'ü attack surface'inden kaldırır. Gen 1 VM'leri için emulated IDE/ATAPI path'ini legacy attack surface olarak ele alın.
  • Defense-in-depth: guest'leri varsayılan olarak untrusted tutun; multi-tenant host'ları izole edin; vmwp.exe stabilitesini ve guest I/O davranışını yukarıdaki gibi izleyin.

References