Skip to content

Xen grant transfer IOMMU stale mapping (CVE-2019-17340)

Grant-transfer kodu, machine address'i guest interface için fazla büyük olan bir page'i değiştirirken page accounting'i yanlış set eder ve stale bir IOMMU mapping bırakır; bu da bellek sızdırır ve (passthrough ile) cross-guest erişim riski doğurur.

Mechanism

Bug class / invariant

Grant transfer page ownership'ini domain'ler arasında taşır. Page'in machine address'i guest interface'inde temsil edilemediğinde (çok büyük bellekli host'lar), Xen yerine bir replacement page allocate eder — ama yeni page'in accounting özelliklerini doğru set edemedi ve internal transfer state'ini güncellemedi. İhlal edilen invariant ikilidir: page reference/ownership accounting tutarlı kalmalıdır ve bir page el değiştirdiğinde IOMMU mapping'leri tear down edilmelidir. Sonuç bir memory leak artı bir stale IOMMU mapping: bir passthrough guest'in device'ı, artık sahibi olmadığı bir page'e DMA erişimini koruyabilir — use-after-(re)assignment tarzı bir cross-guest açığı.

Walkthrough

Conceptual only

XSA-284'ten high-level yeniden kurgu.

  1. Büyük bellekli bir host'ta, bir guest, machine address'leri guest interface limitinin ötesinde olan page'leri içeren grant transfer'leri gerçekleştirir.
  2. Xen yerine bir replacement page koyar ama onu yanlış muhasebeleştirir ve IOMMU cleanup'ını atlar.
  3. Stale IOMMU entry'si passed-through bir device'ın DMA erişimini korumasını sağlar; bu sırada accounting hatası bellek sızdırır; privilege escalation / cross-guest read ihtimali dışlanamaz.

Detection

  • Fiziksel belleği guest grant-transfer interface'inin temsil edebileceği machine address aralığını aşacak kadar büyük olan host'lar: XSA-284'e göre 64-bit PV guest'ler için 16 TiB sınırının ötesi (CONFIG_BIGMEM gerekir), 32-bit PV guest'ler için 168 GiB sınırının ötesi. Bu host'larda grant transfer yapan PCI passthrough guest'ler.
  • Zamanla memory-accounting kayması (leak'ler); reassigned page'lere beklenmedik DMA.

Mitigation

  • XSA-284 patch'ini uygula (Xen 4.7.x–unstable); bu, page accounting'i düzeltir ve transfer'de stale IOMMU mapping'i kaldırır.
  • Mitigation: untrusted guest'lere PCI passthrough'dan kaçın; ARM etkilenmiyor.

References