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.
- 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.
- Xen yerine bir replacement page koyar ama onu yanlış muhasebeleştirir ve IOMMU cleanup'ını atlar.
- 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.