CVE-2024-47741

Yüksek

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: aynı fd kullanılarak yapılan eşzamanlı lseek işlemlerinde dosya özel verisinin ayarlanmasındaki yarış durumu düzeltildi Aynı sürece ait birden fazla iş parçacığı kullanılarak aynı dosya tanımlayıcısı üzerinden eşzamanlı lseek(2) sistem çağrıları yapıldığında, bir yarış durumunun meydana geldiği ve bellek sızıntısına yol açabileceği kısa bir zaman penceresi bulunmaktadır. Yarış durumu şu şekilde gerçekleşmektedir: 1) Bir program bir dosya için dosya tanımlayıcısı açar ve ardından iki iş parçacığı oluşturur (örneğin pthreads kütüphanesi ile), bunlara görev A ve görev B diyelim; 2) Görev A, SEEK_DATA veya SEEK_HOLE ile lseek çağrısı yapar ve inode üzerinde okuma kilidi tutarken file.c:find_desired_extent() fonksiyonuna ulaşır; 3) find_desired_extent() başlangıcında, dosyanın private_data işaretçisini değeri NULL olan 'private' adlı yerel bir değişkene çıkarır; 4) Görev B de SEEK_DATA veya SEEK_HOLE ile lseek çağrısı yapar, inode'u paylaşımlı modda kilitler ve file.c:find_desired_extent() fonksiyonuna girer; burada o da file->private_data değerini değeri NULL olan kendi yerel 'private' değişkenine çıkarır; 5) Dosya özel verisinin NULL olduğunu gördüğü için görev A, bir özel yapı tahsis eder ve bunu dosya yapısına atar; 6) Görev B de dosya özel verisini NULL gördüğü için kendi dosya özel verisini tahsis eder ve her iki görev de aynı dosya tanımlayıcısını kullandığından bunu aynı dosya yapısına atar. Bu noktada, görev A tarafından tahsis edilen özel yapı sızdırılmış olur. Bellek sızıntısının yanı sıra, her iki görevin de özel yapıdaki aynı önbelleğe alınmış durum kaydını (struct btrfs_file_private::llseek_cached_state) kullanması detayı da mevcuttur; bu durum, bir görev kayıtla hala etkileşim halindeyken diğerinin onu serbest bırakabilmesi nedeniyle (yalnızca bir görev referans sayacı almıştır) bir serbest bırakıldıktan sonra kullanım (use-after-free) sorununa yol açabilir. Ayrıca, önbelleğe alınmış durumun paylaşılması, gelecekte hatalı sonuçlar doğurabileceği için iyi bir fikir değildir - şu an için bu bir sorun teşkil etmemektedir çünkü yalnızca önbelleğe alınmış durumu kullanmadan önce aralık doğrulaması yaptığımız extent-io-tree.c:count_range_bits() içerisinde kullanılmaktadır. Bu durum, inode'un spinlock'u tutulurken bir dosyanın özel veri atamasını ve kontrolünü koruyarak ve özel veriyi tahsis eden görevi takip ederek düzeltilmiştir; böylece hem önbelleğe alınmış durum kaydıyla ilgili serbest bırakıldıktan sonra kullanım sorunlarını önlemek hem de gelecekte potansiyel olarak yanlış kullanımın önüne geçmek amacıyla bu veri yalnızca tahsis eden görev tarafından kullanılır.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın21 Eki 2024
İlk görülme21 Eki 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.6.54, 6.10.13, 6.11.2 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.2 ≤ v < 6.6.54, 6.7 ≤ v < 6.10.13, 6.11 ≤ v < 6.11.26.6.54, 6.10.13, 6.11.2

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.

Intelligence 360 paketinde

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.