Skip to content

QEMU USB EHCI MMIO-overlap UAF (CVE-2021-3750)

Emüle EHCI USB controller, bir transfer buffer'ının kendi MMIO register region'ıyla örtüşüp örtüşmediğini doğrulamaz ve host process'inde bir DMA-reentrancy use-after-free'ye izin verir.

Mechanism

Sınır neden bozuluyor

EHCI controller model'i (hw/usb/hcd-ehci.c), uçuştaki USB transfer'leri için guest'in seçtiği adreslere DMA gerçekleştirir. İhlal edilen invariant şu: bir device'ın DMA hedef memory'si, kendi MMIO control register'larından farklı olmalıdır. Bir transfer buffer'ını EHCI MMIO aralığına yöneltmek, uçuştaki bir DMA write'ın controller'ın kendi register'larına çarpmasına yol açar (örn. device state'ini free eden bir reset/teardown), bu state ise transfer ortasında hâlâ dereference edilir → use-after-free. Bu, daha geniş QEMU DMA-reentrancy bug ailesinin parçasıdır.

Sibling'lerden farkı

Bu note, generic DMA-reentrancy class note'undan ve e1000e/NVMe/virtio variant'larından subsystem ve free site ile ayrılır. Aynı sınıf (guest'in yönlendirdiği bir DMA write'ın aynı device'ın MMIO register'larına re-entrant olarak çarpması), farklı bileşen: burada EHCI USB controller (hw/usb/hcd-ehci.c) ve free, transfer'in ortasında reach edilen bir reset/teardown path'inde gerçekleşir. e1000e/NVMe/virtio kardeşlerinde ise free site network/storage descriptor işleme yollarındadır; generic class note ise per-device mem_reentrancy_guard invariant'ını subsystem'den bağımsız olarak tanımlar.

Walkthrough

Kavramsal, public advisory'den.

  1. Guest, data buffer EHCI MMIO aralığıyla alias olacak şekilde EHCI transfer descriptor'larını özenle hazırlar.
  2. Guest, bir transfer başlatır; DMA write, controller state'ini free eden reset benzeri bir register etkisi tetikler.
  3. Transfer kodu, free edilmiş state'i dereference etmeye devam eder → UAF (host DoS, potansiyel RCE).

Detection

  • Host-side: Guest USB etkinliği sırasında QEMU crash; ASan, EHCI transfer path'indeki UAF'yi işaretler.
  • Behavioral: Device MMIO aralıklarına işaret eden guest USB transfer buffer'ları anormaldir.

Mitigation

  • Patch: CVE-2021-3750 QEMU 7.0.0'da düzeltildi (Red Hat / GitHub Advisory: "affects QEMU versions before 7.0.0"). Bu, EHCI path'ine özgü bir overlap/reentrancy fix'iydi; genel per-device DMA-reentrancy guard'ı (reentrant erişimde reddeden device başına mem_reentrancy_guard.engaged_in_io flag'i, Bulekov serisi) ayrı ve daha sonra, QEMU 8.1'de merge edildi (bkz. sibling note). 7.0.0 fix'inin sonradan eksik olduğu bulundu ve CVE-2023-2680 (Red Hat Bugzilla 2203387: "incomplete fix for CVE-2021-3750", qemu-kvm 8.0.0'da düzeltildi) olarak izlendi — QEMU'yu güncel tut.
  • Configuration workaround: Gerekli değilken EHCI USB'yi güvenilmeyen guest'lere açmaktan kaçın.

References