CVE-2024-58098

Yüksek

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: bpf: global fonksiyonlar için changes_pkt_data özelliği takip ediliyor Belirli yardımcıların (helper) çağrıları işlenirken, verifier mevcut durumdaki tüm paket işaretçilerini geçersiz kılar. Örneğin şu programı inceleyin: __attribute__((__noinline__)) long skb_pull_data(struct __sk_buff *sk, __u32 len) { return bpf_skb_pull_data(sk, len); } SEC("tc") int test_invalidate_checks(struct __sk_buff *sk) { int *p = (void *)(long)sk->data; if ((void *)(p + 1) > (void *)(long)sk->data_end) return TCX_DROP; skb_pull_data(sk, 0); *p = 42; return TCX_PASS; } bpf_skb_pull_data() çağrısından sonra 'p' işaretçisi güvenli bir şekilde kullanılamaz. Bu tür yardımcıların listesi için filter.c:bpf_helper_changes_pkt_data() fonksiyonuna bakınız. Şu anda verifier, yardımcı fonksiyon çağrılarını işlerken paket işaretçilerini geçersiz kılmakta ancak global alt programlara yapılan çağrıları işlerken global alt programların içine girip tarama yapmamaktadır. Bu durum, global alt programlardan yapılan yardımcı çağrılarının, çağıran taraftaki durumdaki işaretçileri geçersiz kılmadığı anlamına gelir. Örneğin yukarıdaki program güvensizdir ancak verifier tarafından reddedilmez. Bu commit, ana doğrulama aşamasından önce her alt program için bpf_subprog_info->changes_pkt_data alanını hesaplayarak bu eksikliği gidermektedir. changes_pkt_data şu durumlarda ayarlanmalıdır: - Alt program, bpf_helper_changes_pkt_data fonksiyonunun true döndürdüğü bir yardımcıyı çağırıyorsa; - Alt program, bpf_subprog_info->changes_pkt_data değerinin ayarlanmış olması gereken bir global fonksiyonu çağırıyorsa. verifier.c:check_cfg() aşaması, bu bilgiyi hesaplamak üzere değiştirilmiştir. Commit, check_cfg() tarafından gerçekleştirilen derinlik öncelikli talimat taramasına ve özyinelemeli (recursive) fonksiyon çağrılarının olmamasına dayanmaktadır: - check_cfg(), nihayetinde S alt programına yapılan her çağrıyı, S tamamen keşfedilmiş bir durumda ziyaret eder; - S tamamen keşfedildiğinde: - S içindeki her doğrudan yardımcı çağrısı keşfedilir (ve böylece gerekirse changes_pkt_data ayarlanır); - S tarafından çağrılan S1 alt programına yapılan her çağrı, S1 tamamen keşfedilmiş olarak ziyaret edilir (ve böylece S, changes_pkt_data bilgisini S1'den devralır). Bu yaklaşımın dezavantajı, ölü kod elemesinin (dead code elimination) dikkate alınmamasıdır: Eğer global fonksiyon içindeki bir yardımcı çağrısı mevcut yapılandırma nedeniyle ölü kod ise, verifier changes_pkt_data hesaplaması amacıyla bu çağrının gerçekleştiğini ihtiyatlı bir şekilde varsayacaktır.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın5 May 2025
İlk görülme5 May 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.6.90, 6.12.25 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.6 ≤ v < 6.6.90, 6.7 ≤ v < 6.12.25, 6.136.6.90, 6.12.25

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.