Skip to content

VirtualBox E1000 e1kCSum16 out-of-bounds read (CVE-2020-2894)

VirtualBox'ın E1000 TX checksum yolunda yetersiz validate edilmiş bir "checksum end" alanı, bir guest'in packet buffer'ın ötesinden host belleğini okumasına izin verir (information disclosure).

Mechanism

Bug sınıfı / invariant

VirtualBox, Intel E1000 NIC'ini emüle eder. TX checksum'larını offload ederken device, packet'in guest-supplied css (checksum start), cso (checksum offset) ve cse (checksum end) ile tanımlanan bir aralığını dolaşır. Buradaki invariant, üçünün de gerçek packet length'e karşı validate edilmesi gerektiğidir.

e1kInsertChecksum() içinde (ki e1kCSum16 checksum rutinini çağırır), kod css/cso'yu packet length'e karşı validate eder ama yalnızca cse < css'yi kontrol eder — cse'nin u16PktLen içinde olduğunu hiç doğrulamaz. cse'yi packet length'ten büyük ayarlayan bir guest, checksum loop'unun packet buffer'ın ötesini okumasına yol açar; bu, host VMM belleğinin bir out-of-bounds read'idir.

Kavramsal kök neden eksik bir bounds check'tir: attacker-controlled üç offset'ten biri validate edilmeden bırakılır ve bir checksum dolaşımı host-bellek disclosure'ına dönüşür.

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. Bir TX packet hazırla (privileged bir guest olarak) gerçek packet length'ten büyük bir cse ile.
  2. Kısmi kontrolü geç. Tek guard cse < css'dir; aşırı büyük bir cse sızıp geçer.
  3. Buffer'ın ötesini oku. Checksum loop'u packet'in ötesine, bitişik host belleğine taşar.
  4. Host verisini sızdır guest'e doğru (yalnızca CVSS C:H — confidentiality).

Detection

Host / telemetri sinyalleri

  • Hatalı biçimlendirilmiş E1000 TX descriptor'ları: tutarsız checksum offset/length'leriyle packet üreten guest'ler.
  • Envanter: 5.2.40 / 6.0.20 / 6.1.6'dan eski VirtualBox üzerindeki host'ları işaretle.
  • EDR: VMM'de anormal read pattern'leri, ancak salt read'leri gözlemlemek zordur.

Mitigation

Patch & sıkılaştırma

  • Oracle patch'ini uygula. VirtualBox 5.2.40 / 6.0.20 / 6.1.6'da düzeltildi (Oracle Critical Patch Update, Nisan 2020).
  • VirtualBox'ı güncel tut Oracle Critical Patch Update'leri üzerinden.
  • Yalnızca güvenilir guest'leri çalıştır; emüle E1000 gerekmediği yerlerde paravirtualized NIC'leri tercih et.

References