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.
- Bir TX packet hazırla (privileged bir guest olarak) gerçek packet length'ten büyük bir
cseile. - Kısmi kontrolü geç. Tek guard
cse < css'dir; aşırı büyük bircsesızıp geçer. - Buffer'ın ötesini oku. Checksum loop'u packet'in ötesine, bitişik host belleğine taşar.
- 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.