CVE-2024-50220
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: fork: hata oluştuğunda fork sırasında uffd çağırmayın "fork: do not expose incomplete mm on fork" yama serisi. fork işlemi tamamlanmadan önce sanal bellek adres alanını tutarsız bir duruma getirebiliriz. Ek olarak, fork işlemi sırasında sanal bellek adres alanının geçersiz olduğunu belirten bir hatayla karşılaşabiliriz. Sonuç olarak, bu alanı; mm veya VMA'lar ile etkileşime girebilecek ve eksik durumlarla başa çıkmak üzere tasarlanmamış harici mekanizmalara hiçbir şekilde sunmamalıyız. Özellikle fork mantığını, khugepaged ve ksm işlemlerini operasyonun sonuna erteleyecek ve yalnızca herhangi bir hata oluşmadığında çağrılacak şekilde güncelliyoruz; ayrıca bir hata meydana gelmişse uffd'nin fork olaylarını gözlemlemesini engelliyoruz. Bu yama (2 üzerinden): Şu anda fork sırasında, fork işleminde bir hata oluşup oluşmadığına bakılmaksızın, eğer VMA'larda uffd kayıtlıysa sürecin sanal adres alanı koşulsuz olarak userland'e sunulmaktadır. Bu işlem, koşulsuz olarak çağrılan ve iki görevi yerine getiren dup_userfaultfd_complete() fonksiyonunda gerçekleştirilir: dup_fctx() aracılığıyla UFFD_EVENT_FORK olayı için kayıtlı işleyicileri çağırmak ve dup_userfaultfd() içinde oluşturulan userfaultfd_fork_ctx nesnelerini temizlemek. Bir hata oluşmuşsa sanal adres alanı henüz doğru şekilde başlatılmamış olabileceği için bu durum sorun teşkil etmektedir. d24062914837 ("fork: use __mt_dup() to duplicate maple tree in dup_mmap()") commit'indeki değişiklik, maple tree girişlerinin henüz tutarlı olmadığı bir durumda olabileceğimiz için bu durumu daha kritik hale getirmektedir. Bunu, fork hatası durumunda, aksi takdirde userland tarafından işlenen olay yoluyla temizlenmesini beklediğimiz durumu geri alarak ve normalde dup_userfaultfd_complete() tarafından gerçekleştirilen bellek boşaltma görevini yaparak çözüyoruz. Bunu, aynı döngüyü gerçekleştiren ancak yalnızca referans sayaçlarını azaltan yeni bir fonksiyon olan dup_userfaultfd_fail() uygulayarak yapıyoruz. Ebeveyn ve çocuk mm'ler üzerinde mmgrab() işlemini gerçekleştirdiğimizi, ancak referans sayacı sıfıra düştüğünde userfaultfd_ctx_put() fonksiyonunun bunu mmdrop() yapacağını, böylece burada bellek sızıntılarının doğru şekilde önleneceğini belirtelim.
Nasıl düzeltilir
- linux linux_kernel6.11.7 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 6.8 ≤ v < 6.11.7, 6.12 | 6.11.7 |
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.