Skip to content

Hyper-V IDE/storage emulator guest-to-host RCE (CVE-2018-0959)

Hyper-V worker-process emulation path'inde bir guest-to-host RCE; burada bir device/instruction emulator'üne giden validate edilmemiş guest-supplied input, host (parent partition) state'ini bozar.

Mechanism

Bug class / invariant

Hyper-V, bir guest'i bir child partition'a böler ve çoğu synthetic-device ve legacy-device emulation'ını parent partition içindeki per-VM user-mode worker process'inde (vmwp.exe) çalıştırır; bunlar kernel bileşenleriyle (VID, VMBus, hypervisor) desteklenir. Security invariant'ı şudur: worker process, guest'ten gelen her byte'ı üzerinde işlem yapmadan önce tamamen untrusted kabul etmelidir.

CVE-2018-0959, o path'te bir improper-input-validation (CWE-20) açığıdır. Bir guest bir legacy/emulated device'ı sürdüğünde veya hypervisor'ın software emulation'a devrettiği bir instruction'ı tetiklediğinde, emulator guest-controlled register/descriptor/buffer değerlerini tüketir. O değerlerden türetilen bir length, index veya pointer bir bounds ya da consistency check olmadan kullanılırsa, guest child→parent isolation boundary'sini geçer ve host memory'sini ya da control flow'unu etkiler. Sonuç, VM'e hizmet eden context'te code execution'dır, yani bir VM escape.

Konsept root cause klasik emulator trust gap'idir: hardware davranışını yeniden implemente eden software, gerçek hardware'in enforce ettiği tüm safety check'leri yeniden türetmelidir. Guest'in sağladığı bir size veya offset üzerinde kaçırılan bir check, masum görünen bir I/O'yu host'ta bir out-of-bounds write veya heap corruption primitive'ine dönüştürür.

Walkthrough

Yalnızca konsept

Aşağıdaki adımlar, public advisory'den ve Black Hat USA 2018 konuşması "A Dive in to Hyper-V Architecture and Vulnerabilities"'den (Bialek, Joly) çıkarılan yüksek seviyeli bir modeldir. Offset, gadget chain veya çalışan bir exploit sunulmaz.

Public attack-surface modelinde tarif edilen yüksek seviyeli mantıksal akış:

  1. Emulator'e ulaş. Guest içindeki privileged bir kullanıcı, hypervisor'ın hardware'de tamamlayamayacağı ve host tarafı emulation'a yönlendirdiği bir I/O (veya bir instruction) verir — legacy storage için bu, storage stack'i ve worker process'i tarafından servis edilen IDE/ATAPI path'idir. İlgili register, port, descriptor ve buffer değerlerinin hepsi saldırgan tarafından seçilir.
  2. Trust boundary'sini geç. Host emulator'ü guest request'ini parse eder. Range-check edilmesi gereken bir field'a (bir transfer length, bir buffer index, bir command parametresi) güvenilir, dolayısıyla malformed bir request emulator'ü amaçlanan object bounds'ının dışına sürer.
  3. Host state'ini boz. Yanlış boyutlandırılmış/yanlış index'lenmiş operasyon, yapmaması gereken host memory'sine yazar ya da okur ve worker process'teki / destekleyen kernel bileşenindeki komşu bir allocation'ı veya control structure'ı bozar.
  4. Execution'a yüksel. Host memory etki altındayken, saldırgan corruption'ı bir control-flow hijack'ine şekillendirir ve VM'e sahip olan partition'da RCE elde eder — ders kitabı guest-to-host escape.
Boundary neden kırılıyor (illustrative pseudo-logic)

# HOST-side emulator (conceptual — not real code)
req = read_request_from_guest()          # fully attacker-controlled
n   = req.transfer_length                 # guest-supplied size
# MISSING: validate n against the real buffer / device limits
memcpy(host_buffer, req.data, n)          # n too large -> OOB write in host
The defect is the absence of the validation comment line, not any single instruction.

Detection

Host / telemetry sinyalleri

  • Worker-process crash'leri: tek bir VM'e bağlı tekrarlı vmwp.exe fault'ları veya beklenmeyen restart'lar güçlü bir anomalidir; host'tan WER/crash dump'larını toplayıp triyaj edin.
  • Hyper-V operational log'ları: guest I/O patlamalarıyla korele emulation error'ları, partition reset'leri veya save/restore başarısızlıkları gösteren Microsoft-Windows-Hyper-V-Worker, -Vmms ve -Hypervisor channel'ları.
  • Host'ta EDR: per-VM worker process'in beklenmeyen eylemler yapmasına (child process oluşturma, yeni handle'lar, memory anomalileri) alert üretin — emulator'ler asla process spawn etmemelidir.
  • Guest behavior: legacy IDE/ATAPI'yi veya diğer emulated device'ları malformed command'larla zorlayan bir guest şüphelidir; olağandışı storage/PIO pattern'lerini açığa çıkarın.

Mitigation

Patch & hardening

  • Vendor patch'ini uygulayın. Microsoft CVE-2018-0959'u Nisan 2018 update'lerinde düzeltti; host'ları güncel tutmak birincil control'dür.
  • Emulated legacy device'lar yerine synthetic/PV device'ları tercih edin. Mümkün olduğunda Generation 2 VM'leri kullanarak legacy-emulation (IDE/ATAPI) attack surface'ini küçültün.
  • Worker process'te defense-in-depth. Hyper-V, per-VM emulation'ı low-privilege, sandbox'lı bir vmwp.exe'de çalıştırır; bir memory bug'ını güvenilir execution'a çevirmeyi zorlaştırmak için host mitigation'larını (CFG, ACG, vb.) etkin tutun.
  • Host'u izole edin / least-privilege uygulayın. Hyper-V host'unu yüksek değerli bir boundary olarak ele alın; kimin untrusted guest çalıştırabileceğini kısıtlayın ve host management maruziyetini sınırlayın.
  • Hyper-V bounty surface'ini devreye sokun ki aynı emulation path'lerinin proaktif hardening'i yapılsın.

References