CVE-2026-23450

Kritik

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: net/smc: smc_tcp_syn_recv_sock() fonksiyonundaki NULL dereference ve UAF hatası düzeltildi Syzkaller, smc_tcp_syn_recv_sock() fonksiyonunda bir panik raporlamıştır [1]. smc_tcp_syn_recv_sock(), TCP alma yolunda (softirq), clcsock (TCP dinleme soketi) üzerindeki icsk_af_ops->syn_recv_sock aracılığıyla çağrılır. smc_sock işaretçisini almak için sk_user_data değerini okur. Ancak, SMC dinleme soketi eşzamanlı olarak kapatıldığında, smc_close_active() fonksiyonu sk_callback_lock altında clcsock->sk_user_data değerini NULL olarak ayarlar ve ardından smc_sock'un kendisi smc_release() içindeki sock_put() aracılığıyla serbest bırakılabilir. Bu durum iki soruna yol açar: 1) NULL pointer dereference: Erişim sağlandığında sk_user_data NULL'dır. 2) Serbest bırakıldıktan sonra kullanım (Use-after-free): sk_user_data NULL olmayan bir değer olarak okunur ancak alanlarına (örneğin, queued_smc_hs, ori_af_ops) erişilmeden önce smc_sock serbest bırakılmıştır. Yarış durumu penceresi şu şekildedir (syzkaller çökmesi [1], SYN cookie yolu üzerinden tetiklenir: tcp_get_cookie_sock() -> smc_tcp_syn_recv_sock(), ancak normal tcp_check_req() yolu da aynı yarış durumuna sahiptir): CPU A (softirq) CPU B (process ctx) tcp_v4_rcv() TCP_NEW_SYN_RECV: sk = req->rsk_listener sock_hold(sk) /* Dinleyici üzerinde kilit yok */ smc_close_active(): write_lock_bh(cb_lock) sk_user_data = NULL write_unlock_bh(cb_lock) ... smc_clcsock_release() sock_put(smc->sk) x2 -> smc_sock serbest bırakıldı! tcp_check_req() smc_tcp_syn_recv_sock(): smc = user_data(sk) -> NULL veya geçersiz (dangling) smc->queued_smc_hs -> çökme! clcsock ve smc_sock'un ayrı referans sayımlarına sahip iki bağımsız nesne olduğuna dikkat edilmelidir. TCP yığını, onu hayatta tutan clcsock üzerinde bir referansa sahiptir, ancak bu durum smc_sock'un serbest bırakılmasını ENGELLEMEZ. smc_sock'a güvenli bir şekilde erişmek için RCU ve refcount_inc_not_zero() kullanılarak bu sorun giderilmiştir. smc_tcp_syn_recv_sock() TCP üç yönlü el sıkışma yolunda çağrıldığı için, sk_callback_lock üzerinde read_lock_bh almak çok ağır bir işlemdir ve bir SYN flood saldırısı karşısında dayanamaz. rcu_read_lock() kullanımı çok daha hafiftir. - smc_sock serbest bırakma işleminin RCU zarafet süresinden sonraya ertelenmesi için SMC dinleme soketi üzerinde SOCK_RCU_FREE ayarlanmıştır. Bu, rcu_read_lock() içinde erişildiğinde belleğin hala geçerli olduğunu garanti eder. - sk_user_data okumasını korumak için rcu_read_lock() kullanılır. - smc_sock'u sabitlemek için refcount_inc_not_zero(&smc->sk.sk_refcnt) kullanılır. Eğer referans sayısı zaten sıfıra ulaşmışsa (kapatma yolu tamamlanmışsa), işlem false döner ve güvenli bir şekilde çıkış yapılır. Not: smc_hs_congested() fonksiyonu, rcu_read_lock() olmadan benzer bir kilitsiz sk_user_data okumasına sahiptir; ancak yalnızca NULL kontrolü yapar ve küresel smc_hs_wq'ya erişir, hiçbir smc_sock alanına erişmediği (dereference etmediği) için etkilenmemiştir. Hata, mdelay enjeksiyonu ve smc_run ile doğrulanmış olup, bu yama uygulandıktan sonra sorun artık meydana gelmemektedir. [1] https://syzkaller.appspot.com/bug?extid=827ae2bfb3a3529333e9

ÖnemKritik
CVSS9.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın3 Nis 2026
İlk görülme3 Nis 2026
Zayıflık türüCWE-362Yarış durumu

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.15.203, 6.1.167, 6.6.130, 6.12.78, 6.18.20, 6.19.10 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.15.174 ≤ v < 5.15.203, 5.18 ≤ v < 6.1.167, 6.2 ≤ v < 6.6.130, 6.7 ≤ v < 6.12.78, 6.13 ≤ v < 6.18.20, 6.19 ≤ v < 6.19.10, 7.05.15.203, 6.1.167, 6.6.130, 6.12.78, 6.18.20, 6.19.10

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.