VirtualBox 3D acceleration OpenGL (HGCM Chromium) guest-to-host escape¶
3D-acceleration OpenGL servisi üzerinden bir VirtualBox guest-to-host escape: host, HGCM üzerinden tünellenen guest-supplied Chromium/OpenGL command'lerini eksik bounds check'lerle unpack eder; bu da bir out-of-bounds read (infoleak) ve bir write-what-where verir, host code execution'ına birleştirilir.
Mechanism¶
Note
VirtualBox'ın "3D acceleration"'ı, OpenGL'i HGCM üzerinden — integer ve buffer argument'leri taşıyan basit bir guest→host RPC — bir Chromium fork'u (distributed-OpenGL sistemi) üzerinden tüneller. Host'un SharedOpenGL servisi, guest-serialized GL command'lerini unpack eder ve dispatch eder. Isolation invariant'ı şudur: her unpacker, host buffer'larına dokunmadan önce guest-controlled length/index'leri validate eder. Bug class'ı unchecked unpacking'dir: guest-controlled count/offset'ler bounds check olmadan host pointer arithmetic'ine akar, böylece guest hedeflenen host buffer'larının dışını read ya da write edebilir — guest→host sınırını aşan out-of-VM erişimler; GL pipe guest'e expose edildiği için guest ring-3'ten erişilebilir.
3D servisi VM-process context'inde çalışır, bu yüzden unpacker'daki bir memory-corruption primitive'i doğrudan host process compromise'ine çevrilir.
Walkthrough¶
Public referans: phoenhex "Better slow than sorry — VirtualBox 3D acceleration considered harmful". Kavramsal, zaten-patch'lenmiş chain:
- Infoleak (CVE-2018-3055):
crUnpackExtendAreProgramsResidentNV(SharedOpenGL/unpacker/unpack_program.c), guest-controllednileSET_WRITEBACK_PTR(20 + n * sizeof(GLuint))çağırır; host heap'i keyfi bir offset'te okur ve pointer'ları leak eder (ASLR'yi yener). - Write-what-where (CVE-2018-3085):
crServerDispatchMessage(crserverlib/server_stream.c), attacker-controlled bir message pointer'a yönlendiren birCR_MESSAGE_REDIR_PTRişler;CR_WRITEBACK_EXTEND_OPCODEile birleştirildiğinde bu kontrollü bir write verir. - Bug'a ulaşmak: bir HGCM client'ında
glBeginvermek, diğerleri için message processing'i bloklar veallow_redir_ptr'ı temizler; böylece crafted message'lar normal validation path'ini bypass eder veglEnddevam ettiğinde işlenir. - leak + write'ı keyfi host read/write'a birleştir ve host code execution'ına pivot et
(ör. expose edilmiş
VBoxDrvinterface'i üzerinden).
Warning
Bug class için belgelenmiş public, patch'lenmiş sorunlar. Kesin gadget offset'leri ve tam chain atlanmıştır; bu kavramsal path'tir.
Detection¶
- Host tarafı: 3D/OpenGL (Chromium) HGCM trafiğiyle korele olan VM-process crash'leri;
ASAN build'leri
crUnpack*/crServerDispatch*unpacker'larında OOB'yi flag'ler. - Davranışsal: malformed GL command stream'leri yayan bir guest (devasa unpack count'ları,
redirect-pointer message'ları, dengesiz
glBegin/glEnd), gerçek bir GL app için anormaldir.
Mitigation¶
- 3D/Chromium unpacker bug'larını düzelten Oracle'ın VirtualBox advisory'lerini uygula (ör. CVE-2018-3055 / CVE-2018-3085) ve Guest Additions / host'u güncel tut.
- Untrusted guest'ler için 3D acceleration'ı disable et — bu, tüm Chromium unpacker attack surface'ini kaldırır (vendor'ın önerdiği hardening).
- Defense-in-depth: VM process'ini sandbox'la/deprivilege et.
References¶
- phoenhex, "Better slow than sorry – VirtualBox 3D acceleration considered harmful": https://phoenhex.re/2018-07-27/better-slow-than-sorry
- Zero Day Initiative, "VirtualBox 3D Acceleration: An accelerated attack surface": https://www.thezdi.com/blog/2018/8/28/virtualbox-3d-acceleration-an-accelerated-attack-surface