Xen XSA-218 grant-table concurrent unmap false mapping info leak¶
Xen XSA-218 (CVE-2017-10913 / CVE-2017-10914): grant-table unmap kodundaki race'ler — iki kez map'lenmiş bir grant'ın eşzamanlı unmap'leri "no further mappings"i çok erken raporlar (cross-domain info leak) ve bir maptrack entry'i double-free edebilir (DoS).
Mechanism¶
Note
Xen grant table'ları bir domain'in başka bir domain ile sayfa paylaşmasını
sağlar; grant_ref_t capability'leri GNTTABOP_map_grant_ref /
GNTTABOP_unmap_grant_ref üzerinden map/unmap edilir. Isolation invariant'ı
şudur: frontend'e sayfasının "no further mappings" olduğu, ancak tüm
grantee mapping'leri gerçekten yok olduğunda söylenir ve maptrack bookkeeping'i
tam olarak bir kez free edilir. XSA-218, unmap içinde bir çift
TOCTOU/concurrency bug'ıdır:
- CVE-2017-10913 (false mapping info): bir grant iki kez map'lendiğinde ve
iki unmap eşzamanlı çalıştığında, frontend'e "sayfanın no further mappings'e
sahip olduğu, ikinci çağrı tamamlandığında değil de birinci çağrı
tamamlandığında bildirilebilir." Frontend sayfayı private olarak yeniden
kullanırken malicious bir backend "frontend'in tekrar kendisinin sandığı
belleği hâlâ read ve write edebilir" — cross-domain bir info-disclosure /
privilege kanalı.
- CVE-2017-10914 (maptrack double-free): yarışan unmap'ler bir maptrack
entry'i iki kez free eder; bu da maptrack entry'lerinin re-use edilmesine
yol açar (sızan refcount'lar, DoS); info leak / host privilege escalation
"cannot be ruled out".
Grant-table temelleri için bkz. Xen PV hypercalls.
Walkthrough¶
Public reference: Xen Security Advisory 218 ve NVD (CVE-2017-10913 / CVE-2017-10914). Kavramsal yol (temsili; advisory sınıfı belirtir):
- Tek bir grant reference'ı iki kez map'le.
- Unmap accounting / maptrack free yolunun iç içe geçmesi için vCPU'lar arasında
iki eşzamanlı
GNTTABOP_unmap_grant_refoperasyonu yay. - Race penceresi ya erken bir "no further mappings" bildirimi (10913) ya da maptrack slot'unun bir double-free'ini (10914) üretir.
Beklenen gözlem: aynı grant ref üzerindeki eşzamanlı unmap hypercall'ları ile korele olan, hypervisor log'larında grant reference-count tutarsızlıkları ve maptrack free-list anomalileri.
Warning
Bug sınıfı için belgelenmiş, tarihsel ve patch'lenmiş bir issue. Yalnızca kavramsal.
Detection¶
- Bir domain'in birden fazla vCPU'sundan aynı grant ref'i hedefleyen eşzamanlı grant-unmap hypercall'larını izle.
- Maptrack free-list anomalilerine / reuse'una ve grant reference-count tutarsızlıklarına dikkat et.
Mitigation¶
- XSA-218 patch set'ini uygula (xen-unstable ve 4.5.x–4.8.x için sürüm bazında). Advisory: "all Xen versions"; hem x86'yı (PV ve HVM) hem de ARM'ı etkiler. Qubes bunu QSB-031 ile ele aldı. Patch olmadan mitigation yok.
References¶
- Xen Security Advisory 218, "Races in the grant table unmap code", https://xenbits.xen.org/xsa/advisory-218.html