Skip to content

VMware SVGA 3D shader heap buffer overflow

VMware'in SVGA3D shader-processing yolundaki bir guest-to-host heap buffer overflow: declare edilen boyutları/indeksleri host allocation'ını aşan hatalı biçimli shader bytecode'u vmware-vmx heap'ini bozar. Aynı shader-processing attack surface'inde tekrar eden bug sınıfı (örn. CVE-2017-4924 ve CVE-2024-22268), ki bu CVE'lerin aynı root cause'u paylaşıp paylaşmadığı kaynaklardan doğrulanmamıştır.

Mechanism

Note

Bir guest SVGA3D command'ları üzerinden shader bytecode gönderdiğinde, host shader translator'ı guest bytecode'unun içindeki alanlardan boyutlandırılmış heap buffer'ları allocate eder (constant-buffer length'leri, instruction/token sayıları, register indeksleri). Invariant, parser'ın yazma öncesinde her boyutu/indeksi gerçek allocation'a karşı validate etmesi gerektiğidir. Shader-heap-overflow sınıfı bunu kırar: dcl_immediateConstantBuffer / VGPU10_OPCODE_CUSTOMDATA gibi bir declaration, host'un rezerve ettiği buffer'dan daha büyük bir length taşır, dolayısıyla copy kontrollü byte'ları komşu host heap chunk'larına yazar — bir guest → host out-of-bounds write. SVGA II modern shader exploitation içindeki stack-array durumundan farklı olarak, bu kayıt özellikle heap-overflow primitive'ine odaklanır.

Walkthrough

Public, patch'lenmiş materyal (Comsecuris SVGA shader write-up'ı; CVE-2017-4924 için VMSA-2017-0015; yeniden ortaya çıkış VMSA-2024-0010 / CVE-2024-22268). Konsept yolu:

  1. Bir guest 3D app'inden, SVGA3D FIFO üzerinden shader bytecode emit et.
  2. Bir immediate-constant-buffer / custom-data length'ini host translator'ın bunun için allocate ettiğinden daha büyük ayarla.
  3. Host, guest'in sağladığı shader verisini heap chunk'ının ötesine kopyalar.
  4. Heap grooming bir hedef object'i chunk'tan sonra konumlandırır ki overflow host code execution'a doğru kullanışlı bir corruption (pointer/length alanı) versin.

Gözlemlenebilir: hatalı biçimli shader submission'ında vmware-vmx crash'i.

Warning

Patch'lenmiş/tarihsel. Konseptseldir; çalışan bytecode ya da host heap layout'u sağlanmamıştır. CVE-2024-22268, VM'de 3D graphics enabled olmasını gerektirir.

Detection

  • Host: shader/FIFO trafiğine bağlı vmware-vmx heap-corruption crash'leri.
  • Config: 3D acceleration enabled olan VM'ler attack surface'tir.

Mitigation

  • Düzeltilmiş VMware build'lerine patch'le (CVE-2017-4924 için VMSA-2017-0015; CVE-2024-22268 için VMSA-2024-0010) ve güncel kal.
  • Kullanılmayan yerlerde 3D acceleration'ı disable et.
  • Defense-in-depth olarak device emulation'ı sandbox'la.

References