Skip to content

VMware vprintproxy virtual printer host privilege escalation (CVE-2015-3650)

VMware host'unda bir local privilege-escalation: vmware-vmx.exe, virtual-printer helper'ı vprintproxy.exe'yi spawn ettiğinde yeni process için geçersiz (NULL) bir DACL sağlar; böylece düşük yetkili herhangi bir host kullanıcısı onu açıp bir thread inject ederek başlatan kullanıcının (çoğunlukla administrator) yetkileriyle kod çalıştırabilir. Workstation 10.0.7 / 11.1.1'de düzeltildi.

Mechanism

Note

VMware Virtual Printer özelliği, bir guest'in host printer'larına çıktı almasına olanak tanır; host tarafında VM'in vmware-vmx.exe'sinin bir child'ı olarak spawn edilen vprintproxy.exe (ThinPrint/TPView tabanlı proxy) tarafından servise edilir. Buradaki ilgili security boundary host-local'dir: bir process object'inin DACL'i, hangi host kullanıcılarının onu PROCESS_VM_WRITE / CREATE_THREAD için açıp böylece içine kod inject edebileceğini yönetir.

CVE-2015-3650 bir insecure access-control / weak-DACL bug'ıdır (CWE-732 tarzı). Process setup sırasında vmware-vmx.exe bir security descriptor kurar ama SetSecurityDescriptorDacl'ı bir ACL'ye geçerli bir pointer sağlamadan çağırır — yani bir NULL DACL. Bir NULL DACL "no access" değildir; herkesin full access aldığı anlamına gelir. Yani vprintproxy.exe, başlatan kullanıcının token'ıyla çalışır (VM'i bir admin başlattıysa administrator) ama herhangi bir daha düşük yetkili kullanıcının onu açıp değiştirmesine izin veren bir object DACL'iyle. Standart bir kullanıcı bir remote thread inject eder ve o daha yüksek yetkili bağlamda kod çalıştırır — host'ta local privilege escalation (CVSS v2 7.2, AV:L/AC:L/Au:N/C:C/I:C/A:C).

Bu, bir memory-corruption bug'ı değil bir access-control / DACL kusurudur, dolayısıyla device-emulation escape'lerinden ayrı durur; host-side bir helper process'inin nasıl zayıf halka haline gelebileceğine dair faydalı bir karşıtlıktır.

Walkthrough

Public, patch'lenmiş issue. Atıf verilen write-up'tan kavramsal yeniden üretim:

  1. Bir Windows host'unda, bir administrator (ya da daha yüksek yetkili kullanıcı) virtual printer özelliği etkin bir VM başlatır; vmware-vmx.exe, vprintproxy.exe'yi inherit edilmiş (yetkili) token ama bir NULL DACL ile başlatır.
  2. Ayrı, daha düşük yetkili bir host kullanıcısı process'leri enumerate eder ve çalışan vprintproxy.exe'yi bulur.
  3. NULL DACL full access verdiği için o kullanıcı process'i açar ve içinde kendi payload'unu çalıştırmak için standart thread-injection (OpenProcessVirtualAllocEx / WriteProcessMemoryCreateRemoteThread) kullanır.
  4. Inject edilen kod proxy'nin daha yüksek yetkileriyle çalışır — escalation.

Warning

Tarihsel/patch'lenmiş, yalnızca kavramsal. Injection dizisi standart, belgelenmiş OS davranışıdır; bug tamamen eksik DACL'dir. Exploit payload'u verilmemiştir.

Detection

  • Host EDR/Windows telemetry: vprintproxy.exe'yi PROCESS_VM_WRITE/CREATE_THREAD haklarıyla açan daha düşük bütünlükteki bir process ya da onu hedefleyen bir CreateRemoteThread (Sysmon Event ID 8).
  • Object-ACL audit: vulnerable bir build'de process object'i NULL DACL'e (everyone-full-access) sahip çalışan bir vprintproxy.exe.
  • vprintproxy.exe'den kaynaklanan beklenmeyen child-process veya module load'ları.

Mitigation

  • VMware Workstation 10.0.7 / 11.1.1, Player 6.0.7 / 7.1.1 ve Horizon Client (Local Mode) 5.4.2'ye patch'leyin. Düzeltme geçerli bir DACL sağlar (NULL DACL'i değiştirerek); böylece OS process'e uygun discretionary access control uygular.
  • Hardening: host-printer erişimine ihtiyaç duymayan VM'lerde Virtual Printer device'ını devre dışı bırakın; vprintproxy.exe helper'ını tamamen kaldırır.
  • Genel savunma: helper/child process'lerin inherit edilmiş ya da NULL DACL'lere güvenmek yerine açık, least-privilege security descriptor'larla oluşturulduğundan emin olun.

References