CVE-2024-53680

Orta

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: ipvs: ip_vs_protocol_init() fonksiyonundaki başlatılmamış yığın erişiminden kaynaklanan tanımsız davranışın (UB) düzeltilmesi Clang/LLVM ile derleme yapıldığında, belirli çekirdek yapılandırmaları altında derleyici, ip_vs_protocol_init() için sonlandırıcı talimat olarak bir return veya jump oluşturmaz ve derleme sırasında şu objtool uyarısını tetikler: vmlinux.o: warning: objtool: ip_vs_protocol_init() falls through to next function __initstub__kmod_ip_vs_rr__935_123_ip_vs_rr_init6() Çalışma zamanında bu durum, ya ipvs modülü yüklenmeye çalışılırken bir oops hatasına ya da ipvs yerleşik olarak derlendiyse önyükleme sırasında bir paniğe (panic) neden olur. Aynı sorun daha önce Intel kernel test robotu tarafından raporlanmıştır. Hem LLVM hem de kernel kodu üzerinde yapılan derinlemesine incelemeler, bunun bir tanımsız davranış problemi olduğunu ortaya koymaktadır. ip_vs_protocol_init(), kayıtlı protokol isimlerini saklamak için yığın üzerinde 64 karakterlik bir tampon bellek kullanır ve bunu tanımladıktan sonra başlatılmamış halde bırakır. Fonksiyon, protokol isimlerini tampon bellekte birleştirirken strnlen() çağrısı yapar. CONFIG_FORTIFY_SOURCE ile strnlen(), giriş karakter tamponunun son baytının nul karakteri olup olmadığını kontrol etmek için ek bir adım gerçekleştirir (commit 3009f891bb9f ("fortify: Allow strlen() and strnlen() to pass compile-time known lengths")). Bu durum, muhtemelen diğer yapılandırmalarla birlikte, aşağıdaki IR'nin oluşturulmasına neden olur: define hidden i32 @ip_vs_protocol_init() local_unnamed_addr #5 section ".init.text" align 16 !kcfi_type !29 { %1 = alloca [64 x i8], align 16 ... 14: ; preds = %11 %15 = getelementptr inbounds i8, ptr %1, i64 63 %16 = load i8, ptr %15, align 1 %17 = tail call i1 @llvm.is.constant.i8(i8 %16) %18 = icmp eq i8 %16, 0 %19 = select i1 %17, i1 %18, i1 false br i1 %19, label %20, label %23 20: ; preds = %14 %21 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #23 ... 23: ; preds = %14, %11, %20 %24 = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) %1, i64 noundef 64) #24 ... } Yukarıdaki kod, tampon bellekteki son karakterin adresini hesaplar (değer %15) ve ardından buradan veri yükler (değer %16). Tampon bellek hiçbir zaman başlatılmadığı için, LLVM GVN geçişi %16 değerini tanımsız (undefined) olarak işaretler: %13 = getelementptr inbounds i8, ptr %1, i64 63 br i1 undef, label %14, label %17 Bu durum, undef değerini daha ileriye yayarak sonraki geçişlere (özellikle SCCP) daha fazla DCE fırsatı sunar ve sonunda başlatılmamış yığın konumundaki yüklemeden sonra gelen her şeyi kaldırır: define hidden i32 @ip_vs_protocol_init() local_unnamed_addr #0 section ".init.text" align 16 !kcfi_type !11 { %1 = alloca [64 x i8], align 16 ... 12: ; preds = %11 %13 = getelementptr inbounds i8, ptr %1, i64 63 unreachable } Bu şekilde, LLVM ulaşılamaz (unreachable) IR talimatı için herhangi bir kod üretmediğinden ve fonksiyonu bir sonlandırıcı olmadan bıraktığından, üretilen yerel kod doğrudan bir sonraki fonksiyona geçer. Bu olası tanımsız davranışı önlemek için yığın üzerindeki tampon bellek sıfırlanmıştır.

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın11 Oca 2025
İlk görülme11 Oca 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.4.287, 5.10.231, 5.15.174, 6.1.120, 6.6.66, 6.12.5 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel2.6.13 ≤ v < 5.4.287, 5.5 ≤ v < 5.10.231, 5.11 ≤ v < 5.15.174, 5.16 ≤ v < 6.1.120, 6.2 ≤ v < 6.6.66, 6.7 ≤ v < 6.12.5, 2.6.12, 6.135.4.287, 5.10.231, 5.15.174, 6.1.120, 6.6.66, 6.12.5

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.

CVE-2024-53680 · Linux Kernel · Dark Radar