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:
- 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. - Ayrı, daha düşük yetkili bir host kullanıcısı process'leri enumerate eder ve
çalışan
vprintproxy.exe'yi bulur. - 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 (
OpenProcess→VirtualAllocEx/WriteProcessMemory→CreateRemoteThread) kullanır. - 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'yiPROCESS_VM_WRITE/CREATE_THREADhaklarıyla açan daha düşük bütünlükteki bir process ya da onu hedefleyen birCreateRemoteThread(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.exehelper'ı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.