VMware SVGA uninitialized stack memory Pwn2Own (CVE-2017-4903)¶
SVGA device'ında uninitialized bir stack structure kullanımı stale stack verisini leak eder/ona dayanır ve bir guest'in host üzerinde kod çalıştırmasına izin verebilir.
Mechanism¶
İhlal edilen invariant
SVGA device emulation, host stack'inde structure'lar declare eder ve onları kullanmadan önce tamamen initialize etmesi beklenir. Korunan sınır guest → host confidentiality / code execution'dır. CVE-2017-4903 bir uninitialized-stack-memory bug'ıdır: SVGA yolundaki bir stack structure kısmen uninitialized bırakılır, dolayısıyla önceki stack frame'lerinin bıraktığı stale değerleri taşır. O stale değerler (pointer'lar, length'ler) sonra device logic'ini yönlendirir. Stack'te daha önce ne olduğunu şekillendirebilen bir saldırgan "artakalan" içeriği kontrol eder ve uninitialized read'i, Pwn2Own zincirinde host code execution'a ulaşan bir information leak ve/veya bir corruption primitive'ine çevirir. İhlal edilen invariant, guest'in kontrol ettiği akıştan etkilenen host stack verisinin initialization safety'sidir.
Pwn2Own 2017'de (CanSecWest) 360 Security tarafından gösterildi; VMSA-2017-0006'da düzeltildi. ZDI bu sınıfı "VMware Exploitation through Uninitialized Buffers"ta belgeledi.
Walkthrough¶
VMSA-2017-0006 ve ZDI'nin public analizinden, yüksek seviyeden:
- Guest önce host stack'inde saldırgan lehine değerler bırakan operation'lar sürer.
- Sonraki bir SVGA call, tamamen initialize edilmemiş bir structure kullanır ve o stale değerleri tüketir.
- Ortaya çıkan leak/corruption (public zincirde) host code execution'a escalate edilir.
../primitive/use-of-uninitialized-variable.md'e bak; exploit ayrıntıları
atlanmıştır.
Detection¶
- SVGA kodunda
vmware-vmxfault'ları içinvmware.log/ host crash dump'ları. - Device emulation'ında uninitialized read'leri işaretleyen compiler/ instrumentation build'leri (örn. stack-init sanitizer'ları).
- SVGA operation'larının ardından anormal VMX-process davranışını işaretleyen EDR.
Mitigation¶
- VMSA-2017-0006'yı uygula (ESXi 5.5/6.0/6.5 patch'leri, Workstation 12.5.5, Fusion 8.5.6).
- Compiler seviyesi savunmalar: otomatik stack-variable initialization
(
-ftrivial-auto-var-init, InitAll) stale-data kök nedenini ortadan kaldırır. - Untrusted guest'lere 3D/SVGA maruziyetini minimize et.