Skip to content

Xen 2-level event channel 32-bit limit corruption (CVE-2020-25600)

32-bit bir PV/HVM domain, desteklenen 1023 limitinin ötesinde event channel allocate edebilir ve 2-level event-channel bitmap'lerinin ötesine, shared-info yapısının diğer alanlarına yazabilir.

Mechanism

Bug sınıfı / invariant

Xen'in 2-level event-channel ABI'si pending/masked bitmap'leri guest ile paylaşılan shared_info page'inde saklar. Kullanılabilir channel sayısı word boyutuna bağlıdır: 32-bit x86 domain'ler için 1023'e karşılık 64-bit/ARM için 4095. Bug: domain-başına channel limiti domain initialization sırasında, domain'in hâlâ 64-bit olarak ele alındığı bir anda, domain özellikleri (32-bit'lik) dikkate alınmadan önce kaydedilmişti. İhlal edilen invariant şudur: event-channel index'leri domain'in gerçek word genişliğine göre boyutlandırılmış bitmap bölgesinin içinde kalmalıdır. 32-bit bir domain'de 1024–4095 aralığında channel allocate etmek, bit operasyonlarının komşu shared_info alanlarına düşmesine neden olur — paylaşımlı yapı içinde kontrollü bir out-of-bounds write.

Walkthrough

Yalnızca kavramsal

XSA-342'den üst düzey yeniden kurulum.

  1. 32-bit bir domain (veya başkalarına hizmet veren 32-bit bir domain) index 1023'ün ötesinde event channel allocation'ı talep eder.
  2. Kaydedilen limit 64-bit varsayılanını yansıttığı için request reddedilmez.
  3. Bu yüksek channel'lar için yapılan pending/mask bit güncellemeleri 32-bit bitmap'in ötesini indekler ve shared-info yapısının komşu kısımlarını bozar; bu da sistem geneli bir DoS'a yol açar.

Detection

  • Anormal derecede yüksek sayıda event channel allocate eden domain'ler, özellikle 1023 sınırına yakın/üzerinde olan 32-bit guest'ler.
  • Tek bir 32-bit domain ile korele hypervisor instabilitesi veya Dom0 arızası.
  • Domain-başına EVTCHNOP_* hypercall hacmi üzerine telemetri.

Mitigation

  • Limiti domain word boyutu belirlendikten sonra kaydeden XSA-342 patch'ini uygula (Xen 4.4'ten 4.14/unstable'a kadar).
  • Konfigürasyon mitigation'ı: 32-bit bir guest'in event channel'larını 1023 ile sınırla.
  • FIFO event channel'ları tercih etmek burada bir düzeltme değildir; sorun spesifik olarak 2-level limit bookkeeping'idir.

References