AMD ATIDXX64 pixel shader type confusion VMware guest-to-host (CVE-2019-5183)¶
Özel hazırlanmış bir pixel shader, AMD Radeon DirectX 11 user-mode driver'ında (
atidxx64.dll) bir type confusion tetikler; VMware guest'in 3D çağrılarını host'takivmware-vmx.exeiçinde bu driver'a forward ettiği için, bu bir guest-to-host code-execution primitive'ine dönüşür.
Mechanism¶
Sınır neden kırılıyor
VMware Workstation guest'e sanal bir 3D GPU sunar. Guest'in
Direct3D 11 / pixel-shader işi VM içinde render edilmez — guest'in
dışına forward edilir ve host'un gerçek graphics driver'ı olan,
host vmware-vmx.exe process'i içine yüklenen atidxx64.dll tarafından
işlenir. Register/loop-condition operasyonları hatalı işlenen bozuk bir
pixel shader (ps_4_0), driver'ın bir C++ vtable'ının sınırlarını
aşmasına yol açar — bir object'in virtual dispatch'i geçerli vtable'ın
ötesini okur, dolayısıyla fetch ettiği "function pointer" aslında komşu
string/data olur (CWE-843, type confusion). Attacker'ın etkilediği object
içerikleriyle o indirect call attacker-controlled data üzerine düşer →
host process içinde code execution. İhlal edilen invariant:
guest-authored GPU shader'lar untrusted input'tur, ama privileged host
driver kodu tarafından parse edilirler — yani o driver'daki bir
memory-safety bug'ı bir VM-escape demektir (CVSS Scope:Changed, 9.0).
Walkthrough¶
Talos advisory'sinden yeniden kurgulanmış kavramsal yol; açıklayıcı amaçlı, silahlandırılmış bir chain değil.
-
Vulnerable bir AMD Radeon driver'ı olan bir host üzerinde, 3D acceleration etkin bir VMware guest içinde kötü amaçlı bir app çalıştır.
-
D3D11 üzerinden (
CreatePixelShader+ bir draw call) register/loop operasyonları out-of-bounds vtable erişimini sürmek için bozulmuş, özel hazırlanmış birps_4_0pixel shader gönder. -
Guest shader, host
vmware-vmx.exeiçindekiatidxx64.dll'e forward edilip compile/process edilir; type confusion, out-of-bounds bir vtable slot üzerinden dispatch eder.
Talos crash kanıtı
Advisory, hata veren indirect call'u call qword ptr [rax+200h] olarak
gösterir; burada çözümlenen target geçerli bir code pointer değil, ASCII
data'dır (örn. baytlar 6564616853343675, "u64ShaderId") — bozuk/aşırı
okunmuş bir vtable slot'un tipik işareti.
Web'den de erişilebilir
Talos, aynı driver yolunun uzak bir web sitesinden WebGL üzerinden teorik olarak erişilebilir olduğunu not eder; WebGL de shader compilation'ı aynı şekilde driver üzerinden sürer.
Detection¶
- Host tarafı: Target'ı data'ya işaret eden bir indirect call üzerinde
access violation ile gelen
vmware-vmx.execrash'i; WinDbg,atidxx64.dlliçindeki bozuk vtable dispatch'ini gösterir. - Davranışsal: Compilation'ı başarısız olan veya renderer'ı crash eden bozuk/fuzzer benzeri pixel shader'lar gönderen bir guest anormaldir.
Mitigation¶
- Driver'ı patch'le: AMD bunu Radeon Software Adrenalin 2020 (driver 20.1.1, Jan 2020) ile düzeltti — Talos sorunun orada gittiğini doğruladı. Host AMD Radeon driver'ını 20.1.1+'a güncelle ve VMware Workstation'ı patch'le (15.5.1 ile doğrulandı).
- Yüzeyi daralt: Gerekmediği yerlerde guest 3D acceleration'ı devre dışı bırak.