xa_for_each()vgic_put_irq()vgic_its_invalidate_cache()GITS_CTLREnableLPIsKonuktan-ana sisteme kaçışlar nadir olmakla birlikte, bulut bilişimin bağlı olduğu yalıtım sınırını ortadan kaldırdıkları için en tehlikeli hipervizör hata sınıfıdır. Önceki halka açık KVM kaçışları, genellikle QEMU veya AMD'ye özgü kodlar üzerinden x86 mimarisini hedef alıyordu . ITScape, ayrıcalıksız bir arm64 sanal makinesinden, hiçbir kullanıcı alanı öykünücü hatasına ihtiyaç duymadan, doğrudan çekirdek içi KVM kodunun kendisini aşarak bir kaçışı gösteren ilk çalışan istismardır
.
Graviton, Ampere Altra veya çok kiracılı iş yüklerine sahip herhangi bir arm64 KVM ana bilgisayarını çalıştıran bulut sağlayıcıları için bir konuk şunları yapabilir:
Çoğu güvenlik ekibi zafiyete 9.0'ın üzerinde bir CVSS puanı vererek kritik önemine dikkat çekmiştir .
Zafiyetli kod, LPI çeviri önbelleğini geçersiz kılma yolunda yer alır. Çekirdeğin önbellek girdilerini temizlemesi gerektiğinde, XArray içinde xa_for_each() ile yineler ve her girdinin referans sayısını serbest bırakmak için vgic_put_irq() çağrısı yapar. Sorun, xa_for_each() fonksiyonunun, farklı bir vCPU'dan verilen DISCARD ITS komutu gibi eş zamanlı bir işlem tarafından zaten silinmiş girdileri de döndürebilmesidir. Geçersiz kılma döngüsü, bu zaten kaldırılmış girdi için referansı yine de düşürür ve çift serbest bırakmaya (double-put) ve nihayetinde kullanımdan sonra serbest bırakmaya (use-after-free) neden olur
.
Aynı koddaki daha eski bir zafiyet olan CVE-2024-26598, kilidi bırakmadan önce vgic_its_check_cache() içindeki referans sayısını artırarak LPI çeviri önbelleği isabet yolundaki bir UAF'yi kısmen gidermişti. Bu düzeltme, geçersiz kılma yolunu kapsamamış ve yarış koşulunu farklı bir tetikleme dizisiyle istismar edilebilir bırakmıştır
.
Çekirdek üst sürüm (upstream) düzeltmesi, vgic_its_invalidate_cache() fonksiyonunu, vgic_put_irq() çağrısını yalnızca xa_erase() tarafından döndürülen değer üzerinde yapacak şekilde değiştirir. Yama mesajı şöyledir: "KVM: arm64: vgic-its: Yalnızca silinen girdi için çeviri önbelleği referansını düşür"
.
xa_erase() atomik olarak eski girdiyi kaldırıp döndürdüğü (veya girdi zaten gitmişse NULL döndürdüğü) için, bu düzeltme referans sayacının tam olarak bir kez azaltılmasını sağlayarak çift serbest bırakma penceresini ortadan kaldırır. Yama, Haziran 2026'nın başlarında upstream çekirdeğe uygulandı ve 8-10 Haziran 2026 civarında hızla 6.x kararlı (stable) serisine çekildi
. Red Hat, SUSE ve Debian dahil olmak üzere büyük dağıtımlar, desteklenen çekirdek dalları için geriye dönük uyumlu (backport) düzeltmeler yayınladı
.
Hyunwoo Kim, 9-10 Haziran 2026 civarında GitHub'da herkese açık olarak çalışan bir istismar kodu yayınladı. Depo, tam kaynak kodunu, adım adım yeniden oluşturma talimatlarını ve istismar tekniğinin teknik bir açıklamasını içerir . İstismar, eş zamanlı olarak DISCARD komutları veren ve LPI çeviri önbelleği aramaları yapan vCPU iş parçacıklarını koordine ederek yarış koşulunu tetikler ve ana sistemde kod yürütmek için kullanımdan sonra serbest bırakma durumunu hassas bir şekilde yakalar.
Güvenilir bir PoC'nin herkese açık olması, hazır istismar tarayıcılarının ve gerçek dünya saldırganlarının bu zafiyeti çok az bir çaba ile silahlandırabileceği anlamına gelir; bu da ifşa ile aktif saldırılar arasındaki süreyi kısaltır.
AWS Graviton, Ampere Altra veya benzeri herhangi bir platformda çok kiracılı arm64 KVM altyapısı işletiyorsanız, bu durumu acil bir yama döngüsü olarak değerlendirmelisiniz.
Comments
0 comments