CVE-2024-53096

Yüksek

Açıklama

Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: mm: hatalı mmap_region() hata yolu davranışı çözüldü mmap_region() fonksiyonu; spagetti benzeri kontrol akışıyla, sorunların ortaya çıkabileceği çok sayıda yöntemle, eksik durumlarla, bellek sızıntılarıyla ve diğer tatsız durumlarla oldukça korkutucu bir yapıdadır. Karmaşıklığın büyük bir kısmı, bir VMA eşleme sürecinin ilerleyen aşamalarında hataları yönetmeye çalışmaktan kaynaklanmaktadır; bu durum, yakın zamanda gözlemlenen kaynak sızıntıları ve tutarsız durumla ilgili sorunların temelini oluşturmaktadır. Bu serideki önceki yamalardan yararlanarak, bir dizi kontrolü kodun daha erken aşamalarına taşıyoruz ve mantığın merkezini statik bir dahili fonksiyon olan __mmap_region() içine taşıyarak işlemleri basitleştiriyoruz. Bunu yapmak, herhangi bir gerçek işlem yapmadan önce önceden bir dizi kontrol gerçekleştirmemize, yazılabilir unmap kontrolünü gerektiğinde koşulsuz olarak geri almamıza ve ayrıca bir CONFIG_DEBUG_VM_MAPLE_TREE doğrulamasını koşulsuz olarak gerçekleştirmemize olanak tanır. Burada bir dizi değişikliği gerçekleştiriyoruz: 1. Dosya destekli bellek kancasını çağırmadan önce iterator için belleği önceden tahsis ediyoruz; bu sayede erkenden çıkış yapabiliyor ve karmaşık, hataya açık kapatma/serbest bırakma mantığını uygulamaktan kaçınıyoruz. Başarı ve hata yollarının her ikisinde de iterator durumunu dikkatlice serbest bırakıyoruz. 2. Kapsayıcı mmap_region() fonksiyonu, mapping_map_writable() mantığını erkenden yönetir. Daha önce mantık, yeni tahsis edilen dosya destekli bir VMA'nın eşlendiği noktada mapping_map_writable()'ı ve başarı ile hata yollarında buna karşılık gelen mapping_unmap_writable()'ı içeriyordu. Artık bunu, eğer dosya destekli, paylaşılan yazılabilir bir eşleme ise koşulsuz olarak yapıyoruz. Bir sürücü bayrakları değiştirerek VM_MAYWRITE'ı ortadan kaldırsa bile, bu durum az önce gerçekleştirdiğimiz mühür (seal) kontrolünü geçersiz kılmaz ve her durumda sarmalayıcıdaki sayacı azaltırız. Bir sürücünün bunun tersini yapmaya çalışmadığından emin olmak için bir debug assert işlemi gerçekleştiriyoruz. 3. Ayrıca arch_validate_flags()'i mmap_region() fonksiyonunun üst kısmına taşıyoruz. Bu yalnızca arm64 ve sparc64 üzerinde geçerlidir ve kontrol yalnızca ADI etkinleştirilmiş SPARC için anlamlıdır. Bir sürücü bu kontrolü geçersiz kılarsa bu mimari için açıkça bir uyarı ekliyoruz, ancak kodun nihayetinde bunun gereksinimini ortadan kaldıracak şekilde düzeltilmesi gerekir. Tüm bu önlemler alındığında, başarısız olabilecek tüm kontrolleri herhangi bir sürücü mmap kancası çağrısından önce yerleştirdiğimiz için artık hata yollarında VMA'yı açıkça kapatmamıza gerek kalmaz. Bu durum, bütün bir hata sınıfını ortadan kaldırır, kodu daha kolay analiz edilebilir ve daha dayanıklı hale getirir.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın25 Kas 2024
İlk görülme25 Kas 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.10.231, 5.15.174, 6.1.119, 6.6.63, 6.12 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.10.150 ≤ v < 5.10.231, 5.15.75 ≤ v < 5.15.174, 6.0.3 ≤ v < 6.1.119, 6.2 ≤ v < 6.6.63, 6.7 ≤ v < 6.12, 5.19.17, 6.125.10.231, 5.15.174, 6.1.119, 6.6.63, 6.12

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.