VMware Workstation PVSCSI controller heap overflow (shader heap spray escape)¶
Pwn2Own Berlin 2025 VMware guest-to-host escape (CVE-2025-41238, VMSA-2025-0013): PVSCSI paravirtual SCSI controller'ın scatter-gather handling'inde bir heap overflow; host code execution için graphics-shader/URB heap spray ile eşlenir.
Mechanism¶
Note
PVSCSI (paravirtual SCSI) controller, host vmware-vmx process'inde emüle
edilir. Guest'ler DMA segment'lerini tanımlayan scatter-gather (S/G) list'leri
gönderir; isolation invariant'ı, host'un onları kopyalamadan önce S/G
buffer'ını guest tarafından sağlanan entry sayısına göre boyutlandırması
gerektiğidir. Synacktiv'in writeup'ına göre, PVSCSI_FillSGI() guest 512'den
fazla S/G entry sağladığında 0x4000-byte'lık bir buffer allocate eder, ama her
reallocation'da UtilSafeRealloc1()'e geçirilen size entry sayısıyla büyümek
yerine 0x4000'e hardcode edilmiştir. ~1024 entry'yi aştığında (her S/G elementi
16 byte: 8-byte address + 8-byte length) copy komşu host heap'e out of bounds
yazar — privileged host process içinde guest-controlled bir heap overflow;
guest→host boundary'sini aşar.
Bu, diğer controller escape'leriyle (bkz. VMware VMCI integer underflow OOB write ve QEMU IDE/ATAPI heap overflow) aynı device-emulation heap-corruption sınıfıdır.
Walkthrough¶
Public referans: Synacktiv'in "On the clock: Escaping VMware Workstation at Pwn2Own Berlin 2025" yazısı ve VMSA-2025-0013. Kavramsal yeniden üretim yolu (örnekleme amaçlı — public writeup'tan, weaponize edilmiş uçtan uca chain yok):
- Guest'ten, PVSCSI controller'ı sürün ve
PVSCSI_FillSGI()'ın 0x4000-allocation path'ini alması için 512'den fazla entry'li bir S/G list gönderin. - Entry eklemeye devam edin; realloc size'ı 0x4000'e sabit olduğu için, ~1024 16-byte entry'nin ötesinde host allocation'ı aşarak komşu heap chunk'larına yazar.
- Overflow faydalı bir state'e insin diye host heap'ini şekillendirin. Synacktiv, spray primitive'leri olarak graphics shader object'lerini ve (UHCI emulator ile) URB'leri, Windows LFH "Last Freed" pointer'ına karşı bir "Ping-Pong" tekniğini ve LFH randomization'ını yenmek için bir backdoor-channel timing side channel'ı kullandı. (Kavramsal — bunlar public teknik adlarıdır, yeniden üretilmiş offset'ler değil.)
Beklenen gözlemlenebilir: non-exploit bir denemede, bir guest'in anormal derecede
büyük bir PVSCSI S/G list göndermesinin ardından vmware-vmx heap-corruption
crash.
Warning
Bug sınıfı için belgelenmiş, patch'lenmiş issue. Yalnızca kavramsal — exploit geometry'si, spray offset'leri veya host layout yok.
Detection¶
- PVSCSI S/G list'lerini anormal derecede büyük entry sayılarıyla (>512 / >1024) gönderen guest'lerde alert verin.
- Host-side:
vmware-vmxheap-corruption crash'leri, özellikle eşzamanlı olağandışı shader-allocation / URB aktivitesiyle. - Paravirtual controller gerekli olmadığı yerde PVSCSI'ı kısıtlayın veya patch'leyin.
Mitigation¶
- VMSA-2025-0013'ü uygulayın: Workstation 17.6.4, Fusion 13.6.4 ve ESXi 7.0/8.0 update build'lerinde düzeltildi. Workaround sunulmuyor (CVSS 9.3).
- Defense in depth: device emulation'ı sandbox / least-privilege yapın; böylece host-process compromise'i tam host kontrolü olmaz.
References¶
- Synacktiv, "On the clock: Escaping VMware Workstation at Pwn2Own Berlin 2025", https://www.synacktiv.com/en/publications/on-the-clock-escaping-vmware-workstation-at-pwn2own-berlin-2025
- VMSA-2025-0013 (Broadcom/VMware Security Advisory), https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/35877