Skip to content

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 bhyve process'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ş.

  1. Host, emulated bir XHCI device ile bir guest çalıştırır:
bhyve -s 0,hostbridge -s 7,xhci,tablet \
      -s 31,lpc -m 2G -c 2 vm0
  1. 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.

  2. Host, caller tarafından kontrol edilen byte'ları allocation'ın ötesine kopyalar → bhyve iç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 bhyve crash'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.

References