CVE-2026-72139

Kritik

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: tcp: tcp_connect funksiyasında md5sig_info kfree əməliyyatı RCU grace dövründən sonraya təxirə salınır tcp_connect() (net/ipv4/tcp_output.c) funksiyasındakı md5+ao uzlaşdırmasının iki simmetrik budağı var: if (needs_md5) { tcp_ao_destroy_sock(sk, false); } else if (needs_ao) { tcp_clear_md5_list(sk); kfree(rcu_replace_pointer(tp->md5sig_info, NULL, ...)); } Hər iki budaq, soket TCP_SYN_SENT vəziyyətində olduğu və artıq inet ehash-də yerləşdiyi zaman (tcp_v4_connect() daxilindəki inet_hash_connect() tərəfindən əlavə edilmişdir) hər soket üçün ayrılmış autentifikasiya məlumatı obyektini azad edir. Hər iki budaq, bh_lock_sock_nested() çağırılmamışdan əvvəl implicit RCU vasitəsilə müvafiq məlumat göstəricisini yükləyən softirq RX-yolu oxuyucuları tərəfindən əlçatan ola bilir. needs_md5 budağı əvvəlki yamaqda tcp_ao_destroy_sock() funksiyasına call_rcu() azad etməsi yenidən əlavə edilməklə düzəldilmişdir: ekvivalent açar döngüsü RCU geri çağırma funksiyası olan tcp_ao_info_free_rcu() daxilində işləyir, beləliklə, o, hər bir tcp_ao_key-i azad edənə qədər konteyneri tutan bütün softirq oxuyucuları artıq rcu_read_unlock() prosesini tamamlamış olurlar. needs_ao budağı eyni şəkildə simmetrik deyil. Konteynerin azad edilməsi kfree_rcu(md5sig, rcu) vasitəsilə təxirə salına bilər — struct tcp_md5sig_info artıq tələb olunan rcu üzvünə malikdir (include/net/tcp.h:1999-2002) və ağacın digər hissələri bunu artıq tcp_md5sig_info_add() geri qaytarma yollarında (net/ipv4/tcp_ipv4.c:1410, 1436) həyata keçirirlər. Lakin hər açar üçün sökülmə prosesi, konteynerin RCU grace dövründən ƏVVƏL, proses kontekstində tcp_clear_md5_list() tərəfindən yerinə yetirilir: o, &md5sig->head siyahısını gəzir və hər bir tcp_md5sig_key-i sadə hlist_del + kfree ilə azad edir. __tcp_md5_do_lookup() / __tcp_md5_do_lookup_exact() (tcp_ipv4.c:1253, 1298) funksiyalarındakı paralel softirq oxuyucusu hlist_for_each_entry_rcu() vasitəsilə eyni siyahını gəzir və açarların özü üzərində həmin sadə kfree ilə yarışa girir — bu, TCP-AO xətası ilə eyni sinifdə və eyni yarış pəncərəsində baş verən açar səviyyəli slab use-after-free zəifliyidir. Bu problem iki hissədə düzəldilir: 1. tcp_connect() funksiyasındakı sadə kfree() əməliyyatı kfree_rcu() ilə əvəz edilir ki, md5sig_info konteyneri md5sig həyat dövrünün qalan hissəsinə qoşulsun. Lokal dəyişənə keçid mexaniki xarakter daşıyır və tələb olunur, çünki kfree_rcu() lvalue gözləyən bir makrodur. 2. hlist_del + kfree(key) əməliyyatları hlist_del_rcu + kfree_rcu(key, rcu) ilə əvəz edilərək tcp_clear_md5_list() funksiyası RCU-təhlükəsiz hala gətirilir. struct tcp_md5sig_key artıq rcu üzvünü daşıyır (include/net/tcp.h:1995) və tcp_md5_do_del() (net/ipv4/tcp_ipv4.c:1456) artıq kfree_rcu istifadə edir, buna görə də bu, faylın qalan hissəsinin izlədiyi həyat dövrü invariantını bərpa edir. tcp_clear_md5_list() funksiyasının digər çağırıcısı tcp_md5_destruct_sock() (net/ipv4/tcp.c:412) funksiyasıdır ki, bu da soket artıq hash-dən çıxarıldıqda və əlçatmaz olduqda soket destruktoru tərəfindən işə salınır; orada əlavə grace dövrü lazımsız olsa da, zərərsizdir. Köməkçi funksiyanı şərtsiz olaraq RCU-təhlükəsiz etmək daha təmiz yanaşmadır. needs_ao budağı, AO tərəfli xətanı nümayiş etdirmək üçün istifadə olunan userns reproducer tərəfindən əlçatan deyil (repro hər iki açarı quraşdırır, lakin qoşulma tərəfi AO açarına deyil, MD5 açarına uyğun gəldiyi üçün needs_md5 budağında baş verir); lakin simmetrik yarış mövcuddur və bu kodu redaktə edən texniki mütəxəssis hansı budağın RCU-dan yayınmış, hansının yayınmamış olduğunu düşünməli olmamalıdır. [həmçinin bunun tcp-diag ilə yarışdığını aşkar edən Qihanga təşəkkürlər]

CiddilikKritik
CVSS9.8
İstismar ehtimalı—
MəhsulLinux
Dərc15 avq 2026
İlk görülmə15 avq 2026

Necə düzəltmək olar

Yeniləyin
  • Linux Linux33a1bee413628378fd036a4f2b17ba86b0bc560c, da48b9bf1eb95a9cfd09d615ca58cfc2b03de369, b74cd55038905d5e74c1de109ab78a30b2ea0e1f və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linux51e547e8c89c661f6fbede4a28b1d33b13625683 ≤ v < 33a1bee413628378fd036a4f2b17ba86b0bc560c, 51e547e8c89c661f6fbede4a28b1d33b13625683 ≤ v < da48b9bf1eb95a9cfd09d615ca58cfc2b03de369, 51e547e8c89c661f6fbede4a28b1d33b13625683 ≤ v < b74cd55038905d5e74c1de109ab78a30b2ea0e1f, 6.1833a1bee413628378fd036a4f2b17ba86b0bc560c, da48b9bf1eb95a9cfd09d615ca58cfc2b03de369, b74cd55038905d5e74c1de109ab78a30b2ea0e1f

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.

CVE-2026-72139 · Linux · Dark Radar