Skip to content

RemoteFX vGPU shader guest-to-host RCE (CVE-2020-1032)

Bir Hyper-V guest'inden RemoteFX vGPU üzerinden geçirilen hazırlanmış bir shader, host'ta yetersiz validation ile işlenir ve guest-to-host remote code execution'a izin verir — Microsoft'u feature'ı kaldırmaya götüren mimari bir kusurun parçası.

Mechanism

Sınır neden kırılıyor

RemoteFX vGPU, bir Hyper-V guest'inin host'un fiziksel GPU'sunu paylaşmasına izin veriyordu. Bunu yapmak için rendering işi — shader'lar ve graphics command stream'leri dâhil — guest'ten, VM boundary'sini geçerek, nihayetinde gerçek GPU'yu süren host-side koda (RemoteFX user/kernel stack'i ve graphics driver dxgkrnl) akıyordu. O host kodu, guest tarafından yazılmış shader data'sını parse edip ona göre davranıyor, yapısına güveniyordu.

Kusur sınıfı, bir trust boundary'sinde untrusted input'u valide edememedir (CWE-20): bir guest, tasarım gereği untrusted'dır, yine de shader byte'ları privileged host bileşenleri tarafından tüketiliyordu. Özel olarak hazırlanmış bir shader, host parser'ı bir memory-unsafe state'e (out-of-bounds access / corruption) sürebilir ve host'ta code execution elde edebilir. İhlal edilen invariant şudur: host graphics stack'ine VM boundary'sini geçen her byte, kullanılmadan önce tam olarak valide edilmelidir — guest, bunun üzerinden asla host control flow'unu ya da memory layout'unu etkileyememelidir. Microsoft bu sorunları tek bir bug yerine mimari olarak nitelendirdi, bu yüzden yanıt tek bir parser'ı patch'lemek yerine feature'ı kaldırmak oldu. Bu, diğer hypervisor'ların GPU/shader path'lerinde görülen aynı guest-to-host RCE pattern'idir — amd-atidxx64-pixel-shader-type-confusion-vmware-guest-to.md, vmware-svga-3d-shader-heap-buffer-overflow.md — ve şuradaki daha geniş Hyper-V boundary sınıfı: hyper-v-input-validation-guest-to-host-rce.md.

Walkthrough

Public Microsoft advisory ve KB'den yüksek seviyeli kavramsal yeniden inşa; exploit detayı yok.

  1. Bir VM, bir RemoteFX 3D video adapter ile yapılandırılır, böylece guest'in host GPU stack'ine graphics işi (shader'lar, command stream'leri) gönderecek bir path'i olur.
  2. Guest içindeki authenticated bir user, yapısı host parser'a ulaşacak kadar geçerli ama host kodunun size'lar/type'lar/offset'ler hakkındaki varsayımlarını ihlal eden bir kötü niyetli shader hazırlar.
  3. Host RemoteFX/graphics bileşenleri (dxgkrnl dâhil) shader'ı yeterli validation olmadan işler ve bir memory-unsafe state'e girer.
  4. Corruption, Hyper-V host'unda code execution'a yönlendirilir — guest-to-host boundary'sini geçerek. CVE-2020-1032, aynı kökene sahip bir "Hyper-V RemoteFX vGPU Remote Code Execution Vulnerability" kümesinden (CVE-2020-1036, -1040, -1041, -1042, -1043) biridir.
Boundary-validation şekli (kavramsal)

Kusur tek bir satır değil, kavramsaldır: host kodu, guest'in kontrol ettiği varsayımlarla guest tarafından yazılmış shader data'sını tüketir.

guest ──(RemoteFX vGPU channel)──► host RemoteFX stack / dxgkrnl
                                   └─ parse shader, trusting sizes/types
                                      └─ crafted shader -> OOB / corruption
                                         -> code execution ON THE HOST

"A remote code execution vulnerability exists when Hyper-V RemoteFX vGPU on a host server fails to properly validate input from an authenticated user on a guest operating system." — Microsoft Security Update Guide, CVE-2020-1032

Detection

  • Host integrity / crash sinyalleri: RemoteFX 3D adapter'lı VM'ler çalıştıran bir Hyper-V host'unda host graphics stack'inde (dxgkrnl, RemoteFX bileşenleri) beklenmeyen fault'lar ya da crash'ler; WER/crash dump'ları ve kernel event log'ları üzerinden yakala.
  • Configuration inventory: VM'lerde RemoteFX 3D video adapter'larının varlığı başlı başına maruziyet göstergesidir — feature'ı hâlâ etkin olan host'ları/VM'leri enumerate et.
  • Host'ta EDR: Hyper-V parent partition'da guest graphics workload'larıyla ilişkilendirilmiş anormal child process'ler, token/privilege değişiklikleri ya da driver-level aktivite.

Mitigation

  • Feature'ı kaldır (birincil fix): Microsoft bir parser patch'i yayınlamadı; 14 Temmuz 2020 update'leri RemoteFX vGPU'yu devre dışı bırakır ve 13 Nisan 2021 update'leri onu kaldırır. Bu update'leri kur ve etkilenen VM'lerden RemoteFX 3D video adapter'larını kaldır (aksi hâlde böyle bir adapter'a sahip bir VM, update'ten sonra başlamayı başaramaz).
  • Desteklenen bir alternatif kullan: Windows Server 2016+ üzerinde GPU acceleration için RemoteFX vGPU yerine Discrete Device Assignment (DDA) kullan.
  • Boundary trust'ı minimize et: Genel bir ilke olarak, karmaşık guest tarafından yazılmış data'nın (shader'lar, command buffer'ları) host-side parser'larına, o data tam olarak valide edilmedikçe ve bileşen sandbox'lanmadıkça untrusted guest'leri açma.

References