Xen DMOP IOREQ rangeset missing checks (CVE-2017-15591)¶
DMOP IOREQ-server range-mapping interface'i, bir range'in başlangıcının bitişinden büyük olmadığını doğrulamayı başaramadı ve bir device-model domain'inin rangeset invariant'larını ihlal edip host'u crash etmesine olanak tanıdı.
Mechanism¶
Bug sınıfı / invariant
Device Model Operations (DMOP), bir emulator/stub-domain'in Xen'in rangeset
olanağı üzerinden bir IOREQ server'a I/O ve memory range'leri kaydetmesine izin
verir. Xen'in rangeset'leri, her range'in start <= end olması şeklinde bir
iç invariant taşır. XEN_DMOP_*_io_range_to_ioreq_server path'i,
guest/device-model tarafından verilen sınırları eklemeden önce bunu
doğrulamadı. Ters çevrilmiş bir range vermek rangeset'in varsayımlarını kırar
ve hypervisor geneli bir denial of service'e yol açar. Bu path'e yalnızca bir
HVM guest'i kontrol eden domain'ler (örn. ayrıştırılmış/stub bir device
model) ulaşabilir.
Walkthrough¶
Yalnızca kavramsal
XSA-238'den üst düzey yeniden kurulum.
- Bir device-model / stub domain, bir IOREQ server'a bir I/O veya memory range eklemek için DMOP interface'ini çağırır.
- Başlangıcı bitişini aşan bir range verir.
- Kontrol edilmemiş ekleme rangeset bookkeeping'ini bozar ve sistem geneli bir DoS üretir.
Detection¶
- Bozuk (start > end) sınırlarla DMOP range kaydı yapan stub/device-model domain'lerini denetle.
- Ayrıştırılmış bir device-model domain'i ile korele host crash'leri.
Mitigation¶
- Range'i eklemeden önce
start <= end'i doğrulayan XSA-238 patch'ini uygula (Xen 4.5+). - Mitigation: yalnızca PV guest çalıştır (HVM IOREQ/device-model surface'ini kaldırır) veya untrusted ayrıştırılmış device model'lerden kaçın.