VMware shader translator multiple OOB reads (CVE-2019-5517)¶
3D shader translator'daki birden fazla out-of-bounds read, authenticated bir guest'in bilgi sızdırmasına ya da bir guest-VM DoS tetiklemesine izin verir.
Mechanism¶
The invariant that is crossed
Shader translator, guest tarafından sağlanan shader bytecode'unu host GPU stack'inin kullanabileceği bir forma dönüştürür. Korunan boundary guest → host confidentiality / availability'dir. CVE-2019-5517, o translator'da bir out-of-bounds read kümesidir: birçok parsing routine'i guest-kontrollü size'ları/index'leri yeterli bounds checking olmadan kullanır, böylece hazırlanmış shader'lar input buffer'ları aşarak okur. Path'e bağlı olarak bu veri sızdırır (information disclosure) ya da fault verir (denial of service). Ortak kök, attacker-kontrollü shader descriptor'ları üzerinde spatial bound'ları dayatmadaki tekrarlayan başarısızlıklardır.
3D graphics etkin bir VM gerektirir; etki, information disclosure ya da attacker'ın kendi VM'inin DoS'udur.
Walkthrough¶
High-level, VMSA-2019-0005 / VMSA-2019-0006'dan:
- 3D graphics etkinken, guest translator'daki ayrı OOB-read code path'lerine isabet etmek için hazırlanmış shader'lar submit eder.
- Her path amaçlanan buffer'ının dışını okur: bazıları komşu belleği guest'e geri döndürür (leak), diğerleri unmapped belleğe ulaşır (crash → DoS).
- Attacker leak primitive'ini information disclosure için kullanır ya da sadece bir DoS zorlar.
Detection¶
- Belirli bir guest'le korele
vmware.logshader/3D translation error'ları vevmxcrash'leri. - Guest GPU/driver log'larında alışılmadık hacimde shader-compilation failure'ları.
- Tekrarlayan
vmware-vmxfault'ları için host process-stability izlemesi.
Mitigation¶
- ESXi, Workstation, Fusion için VMSA-2019-0005 / VMSA-2019-0006 güncellemelerini uygulayın.
- Workaround: 3D-acceleration özelliğini devre dışı bırakın (ESXi'de default-off, Workstation/Fusion'da default-on).
- Güvenilmeyen guest'ler için 3D acceleration etkinleştirmekten kaçının.