Skip to content

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.

  1. TX descriptor'ları hazırla (guest root/admin olarak), kontrollü MSS/header/data length'leriyle öyle ki biriken u16TxPktLen, u16MaxPktLen'i aşsın.
  2. Boyutu underflow et. u16MaxPktLen - u16TxPktLen devasa bir değere wrap olur.
  3. 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.
  4. 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.

References