CVE-2025-38334
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: x86/sgx: Zehirlenmiş sayfaları geri kazanma girişimlerini önleme Özetle: SGX sayfa geri kazanımı, içeriğini ikincil depolamaya kopyalamak için sayfaya erişir. SGX talimatları makine kontrollerini (machine checks) sorunsuz bir şekilde işlemez. Buna rağmen mevcut SGX kodu, zehirlendiğini bildiği sayfaları geri kazanmaya çalışacaktır. Zehirlenmiş sayfaları geri kazanmayı denemekten kaçının. Detaylı açıklama: Bir enclave tarafından kullanılan sayfaların epc_page->poison değeri yalnızca arch_memory_failure() fonksiyonunda ayarlanır ancak bu sayfalar, SGX_EPC_PAGE_RECLAIMER_TRACKED bayrağına dokunulmadan sgx_encl_release() çağrılana kadar sgx_active_page_list üzerinde kalır. Geri kazanım mantığında epc_page->poison kontrol edilmemektedir; bu da diğer koşullar karşılandığında, zehirlenmiş bir EPC sayfasını geri kazanma girişimi yapılacağı anlamına gelir. Bu durum kötüdür çünkü 1. söz konusu sayfanın başka bir enclave'e eklenmesini istemeyiz ve 2. muhtemelen bir çekirdeğin kapanmasına ve kernel paniğine yol açacaktır. Özellikle geri kazanım işlemi, EPC sayfası içeriğine erişip bunları şifreleyen ve SGX dışı belleğe yazan "EWB" dahil mikro kod operasyonlarını kullanır. Bu operasyonlar, erişimlerindeki MCE'leri, yürütme yapan çekirdeği özel bir kapatma durumuna sokmaktan (HT ile her iki iş parçacığını etkileyerek) başka bir şekilde yönetemez. Kernel, çekirdeğin zamanında MCE işlemcisine girmediğini görünce kalan çekirdeklerde panikleyecektir. Bellek hatası oluştuğunda, etkilenen EPC sayfasının geri kazanım için değerlendirilmesini durdurmak amacıyla onu sgx_active_page_list üzerinden kaldırmak için sgx_unmark_page_reclaimable() fonksiyonunu çağırın. sgx_reclaim_pages() içinde epc_page->poison değerinin test edilmesi de işe yarardı ancak daha az olasılıklı yollara kod eklemenin daha iyi olduğunu varsayıyorum. Etkilenen EPC sayfası, sgx_encl_release()->sgx_free_epc_page() aşamasında EREMOVE edildiğinde &node->sgx_poison_page_list listesine eklenir. Diğer listelerin semantiğini değiştirmemek için sgx_active_page_list dışındaki liste üyelikleri değiştirilmemiştir. arch_memory_failure() içerisinde önleyici eylemler hakkında bir "TBD" yorumu bulunmaktadır; buradaki amaç bunun ima edebileceği her şeyi çözmek değildir. Bu işlem ayrıca, bir bellek hatası bildiriminin ölümcül olacağı zaman penceresini (daha önce zehirlenmemiş bir EPC sayfası için) tamamen kapatmaz; MCE, sgx_reclaim_pages() adaylarını seçtikten sonra veya hatta bir mikro kod operasyonu sırasında (harcanan süre nedeniyle tetiklenmesi kolaydır) meydana gelebilir. sgx_unmark_page_reclaimable() içindeki spinlock güvenlidir çünkü mm/memory-failure.c içerisindeki bir yorumda açıkça belirtildiği üzere memory_failure() süreç bağlamında çalışır ve herhangi bir spinlock tutulmaz.
Nasıl düzeltilir
- linux linux_kernel6.1.142, 6.6.95, 6.12.35, 6.15.4 ya da sonraki bir sürüm
- git.kernel.org/stable/c/00a88e9ea1b170d579c56327c38f7e8cf689df87
- git.kernel.org/stable/c/31dcbac94bfeabb86bf85b0c36803fdd6536437b
- git.kernel.org/stable/c/62b62a2a6dc51ed6e8e334861f04220c9cf8106a
- git.kernel.org/stable/c/dc5de5bd6deabd327ced2b2b1d0b4f14cd146afe
- git.kernel.org/stable/c/ed16618c380c32c68c06186d0ccbb0d5e0586e59
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.11 ≤ v < 6.1.142, 6.2 ≤ v < 6.6.95, 6.7 ≤ v < 6.12.35, 6.13 ≤ v < 6.15.4 | 6.1.142, 6.6.95, 6.12.35, 6.15.4 |
| debian debian_linux | 11.0 | — |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.