CVE-2024-44991
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: tcp: tcp_sk_exit_batch funksiyasının eyni vaxtda icrasının qarşısının alınması İki thread-in eyni vaxtda tcp_sk_exit_batch() funksiyasını çağırması mümkündür: biri cleanup_net iş növbəsindən (workqueue), digəri isə yeni netns klonlamağa cəhd edərkən uğursuz olan tapşırıqdan. Sonuncu halda, xəta zamanı geri qaytarma prosesi (error unwinding) 'uğursuz' netns üçün çıxış idarəedicilərini tərs ardıcıllıqla çağırır. tcp_sk_exit_batch() funksiyası tcp_twsk_purge() funksiyasını çağırır. Problem ondadır ki, b099ce2602d8 ("net: Batch inet_twsk_purge") commit-indən etibarən bu funksiya yalnız exit_batch siyahısı vasitəsilə ötürülən netns-i deyil, hər hansı bir məhv olan (dying) netns-dəki twsk-ları seçir. Bu o deməkdir ki, setup_net() funksiyasının xəta zamanı geri qaytarma prosesi, çıxan netns-ə aid timewait soketlərini "oğurlaya" və məhv edə bilər. Bu, netns çıxış işçisinin gözlənilən 1 -> 0 keçidi olmadan aşağıdakını çağırmasına şərait yaradır və nəticədə sistem çökməsi (splat) baş verir: WARN_ON_ONCE(!refcount_dec_and_test(&net->ipv4.tcp_death_row.tw_refcount)); Eyni zamanda, inet_twsk_purge() funksiyasını icra edən xəta geri qaytarma yolu da çökəcək: WARNING: .. at lib/refcount.c:31 refcount_warn_saturate+0x1ed/0x210 ... refcount_dec include/linux/refcount.h:351 [inline] inet_twsk_kill+0x758/0x9c0 net/ipv4/inet_timewait_sock.c:70 inet_twsk_deschedule_put net/ipv4/inet_timewait_sock.c:221 inet_twsk_purge+0x725/0x890 net/ipv4/inet_timewait_sock.c:304 tcp_sk_exit_batch+0x1c/0x170 net/ipv4/tcp_ipv4.c:3522 ops_exit_list+0x128/0x180 net/core/net_namespace.c:178 setup_net+0x714/0xb40 net/core/net_namespace.c:375 copy_net_ns+0x2f0/0x670 net/core/net_namespace.c:508 create_new_namespaces+0x3ea/0xb10 kernel/nsproxy.c:110 ... çünki tw_refcount-un refcount_dec() dəyəri gözlənilmədən 0-a düşdü. Bu, real bir xəta kimi görünmür (heç bir tw soketi itməyib və use-after-free halları müşahidə olunmayıb), lakin debug yoxlamasının səhv tetiklənməsidir. Sərt ardıcıllığı təmin etmək üçün mutex əlavə edildi: tcp_twsk_purge() funksiyasını çağıran tapşırıq, mutex sahibi məhv olan netns-in bütün tw soketlərini silənə qədər digər tapşırığın son _dec_and_test əməliyyatını yerinə yetirməsinə mane olur.
Necə düzəltmək olar
- linux linux_kernel6.1.107, 6.6.48, 6.10.7 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.1 ≤ v < 6.1.107, 6.2 ≤ v < 6.6.48, 6.7 ≤ v < 6.10.7, 6.11 | 6.1.107, 6.6.48, 6.10.7 |
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.
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.