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ış):
- Guest, attacker-controlled data ile bir legacy IDE controller I/O port'una write'lar verir (public örnek
0x1f0gibi bir IDE port'una birOUTkullanır) — örn. bir guest kernel driver'dan teslim edilir. - 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. - 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.
- 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)
- 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.exebinary'lerinin patch'lenmiş build'i yansıttığını doğrulayın. - Worker-process integrity:
vmwp.execrash'lerini veya exception'larını, özellikle olağandışı low-level IDE/ATAPI I/O yapan belirli bir guest ile korele biçimde izleyin. Per-VMvmwp.execrash'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.exestabilitesini ve guest I/O davranışını yukarıdaki gibi izleyin.