bhyve XHCI USB heap out-of-bounds write (CVE-2024-32668)¶
bhyve'ın emulated XHCI USB controller'ındaki yetersiz boundary validation, caller/guest tarafından kontrol edilen verinin host
bhyveprocess'inde bir heap allocation'ın dışına yazılmasına izin verir.
Mechanism¶
Boundary neden bozuluyor
bhyve, bir XHCI USB controller'ı (örn. bir USB tablet) tamamen host
userspace'indeki bhyve process'i içinde emulate eder. Guest, bu controller'ı
USB transfer descriptor/request'lerini shared memory'ye yerleştirerek sürer;
host bunları gezer ve veriyi heap buffer'lara kopyalar. Açık şu: USB
kodundaki yetersiz boundary validation, caller tarafından kontrol edilen veriyle
heap üzerinde bir out-of-bounds write'a yol açabilir (FreeBSD-SA-24:12).
Guest, bu request'lerin length/offset alanlarını sağladığı ve host bunları
tam olarak validate etmediği için, kötü niyetli bir guest yazma işlemini bir
host heap allocation'ının ötesine yönlendirir. İhlal edilen invariant, her
emulated device'ın korumak zorunda olduğu invariant'ın aynısıdır: guest
tarafından sağlanan length ve offset'ler, host buffer'larını index'lemeden
önce range-check'ten geçirilmelidir. Corruption host process'ine düşer →
potansiyel host code execution.
Walkthrough¶
Advisory'den konseptüel trigger yolu; açıklayıcı, weaponize edilmemiş.
- Host, emulated bir XHCI device ile bir guest çalıştırır:
-
Privileged guest yazılımı, XHCI controller'ın transfer ring'lerini, length/offset'i hedef heap buffer'ı aşan ve host model tarafından validate edilmeyen crafted bir USB request ile programlar.
-
Host, caller tarafından kontrol edilen byte'ları allocation'ın ötesine kopyalar →
bhyveiçinde heap OOB write; komşu heap metadata/object'lerini corrupt eder.
Advisory impact text
"An insufficient boundary validation in the USB code could lead to an out-of-bounds write on the heap, with data controlled by the caller ... A malicious, privileged software running in a guest VM can ... overwrite heap memory, possibly leading to code execution on the host." — FreeBSD-SA-24:12.bhyve
Detection¶
- Host tarafı: Guest USB aktivitesi sırasında
bhyvecrash'i; ASan/heap-guard page'leri XHCI/USB handling yolundaki OOB write'ı yakalar; allocator integrity check'leri (örn. corrupt olmuş chunk header'larını tespit eder). - Davranışsal: Aşırı büyük veya bozuk length alanlarına sahip XHCI transfer descriptor'ları gönderen bir guest anormaldir.
Mitigation¶
- Patch: FreeBSD-SA-24:12.bhyve'ı uygula (13.3/13.4/14.0/14.1 genelinde 2024-09-04'te düzeltildi); fix, eksik boundary check'lerini ekler.
- Konfigürasyon workaround'u: XHCI device'ı olmadan konfigüre edilen
guest'ler (
-s xhci,...yoksa) etkilenmez — gerekmiyorsa emulated USB'yi kaldır. - Defense in depth: Capsicum sandboxing, device-model process'ini kısıtlar.