VirtualBox E1000 integer underflow guest-to-host write (CVE-2019-2722)¶
VirtualBox'ın E1000 fallback TX yolundaki bir integer underflow, devasa bir copy length üretir ve host VMM'de bir out-of-bounds heap write'a yol açar — bir guest-to-host escape.
Mechanism¶
Bug sınıfı / invariant
VirtualBox, E1000 NIC'ini emüle eder. Fallback TX assembly yolunda device, e1kFallbackAddToFrame()
içinde bir packet'in kaç byte daha gerektirdiğini cb = u16MaxPktLen - u16TxPktLen olarak hesaplar.
Buradaki invariant, u16TxPktLen'in (guest-supplied TX descriptor'larıyla sürülen) asla
u16MaxPktLen'i aşmamasıdır.
Bir guest descriptor'ları u16TxPktLen > u16MaxPktLen olacak şekilde hazırladığında, çıkarma
işlemi çok büyük bir unsigned değere underflow eder. O değer e1kFallbackAddSegment()'e
geçirilir, ki sonra PDMDevHlpPhysRead() ile aşırı büyük bir guest buffer'ını host
aTxPacketFallback buffer'ına okur — bu buffer'ın ötesine yapılan, bir
integer-underflow ile sürülen bir
out-of-bounds write.
Kavramsal kök neden, guest-controlled bir length'in korunmasız çıkarılmasıdır; klasik integer-underflow-to-heap-overflow pattern'i, guest→host sınırını aşar.
Bu not, CVE-2019-2722'nin fallback-TX underflow'unun kavramsal modelidir; tam, public weaponized chain (beş-descriptor dizilimi, EEPROM write + ACPI/SMBus read primitive'leri, ROP) için bkz. virtualbox-e1000-integer-underflow-heap-overflow.
Walkthrough¶
Yalnızca kavramsal
STAR Labs advisory'si ve NVD'den alınmış üst düzey bir model. Exploit, offset veya gadget sağlanmamıştır.
- TX descriptor'ları hazırla (guest root/admin olarak), kontrollü MSS/header/data length'leriyle
öyle ki biriken
u16TxPktLen,u16MaxPktLen'i aşsın. - Boyutu underflow et.
u16MaxPktLen - u16TxPktLendevasa bir değere wrap olur. - Host buffer'ına aşırı oku. Aşırı büyük physical read, fallback buffer'ın tuttuğundan çok fazlasını kopyalar ve host belleğinde onun ötesine yazar.
- Escape'e dönüştür. OOB heap write, guest-to-host code execution'a (CVSS C:H/I:H/A:H, scope changed) ulaşmak için host control structure'larına yönlendirilir.
Detection¶
Host / telemetri sinyalleri
- VMM crash'leri: bir guest'in E1000 TX aktivitesine bağlı tekrarlayan VirtualBox fault'ları; dump'ları ve VBox.log'u topla.
- Hatalı biçimlendirilmiş E1000 descriptor'ları: tutarsız segment length'leriyle TX descriptor chain'leri üreten guest'ler.
- EDR: VMM process'inde heap-corruption göstergeleri.
Mitigation¶
Patch & sıkılaştırma
- Oracle patch'ini uygula. VirtualBox 5.2.28 / 6.0.6'da düzeltildi (Oracle CPU, Nisan 2019).
- VirtualBox'ı güncel tut Oracle Critical Patch Update'leri üzerinden.
- Mümkün olduğunda emüle E1000 yerine paravirtualized NIC'leri tercih et; yalnızca güvenilir guest'leri çalıştır.
- VMM'i least-privilege ile çalıştır ki başarılı bir escape sınırlansın.