CVE-2023-53489

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: tcp/udp: TX zaman damgasına sahip sk ve zerocopy skb'lerin bellek sızıntıları düzeltildi. syzkaller, bir UDP soketi ve ZEROCOPY skb'lerinde bellek sızıntıları olduğunu bildirmiştir [0]. Sorun şu dizilerle yeniden üretilebilir: sk = socket(AF_INET, SOCK_DGRAM, 0) sk.setsockopt(SOL_SOCKET, SO_TIMESTAMPING, SOF_TIMESTAMPING_TX_SOFTWARE) sk.setsockopt(SOL_SOCKET, SO_ZEROCOPY, 1) sk.sendto(b'', MSG_ZEROCOPY, ('127.0.0.1', 53)) sk.close() sendmsg(), bir skb tahsis eden, skb->cb->ubuf.refcnt değerini 1 yapan ve sock_hold() fonksiyonunu çağıran msg_zerocopy_alloc() fonksiyonunu çağırır. Burada, struct ubuf_info_msgzc dolaylı olarak soketin bir refcnt değerini tutar. skb gönderildiğinde, __skb_tstamp_tx() bunu klonlar ve klonu TX zaman damgasıyla birlikte soketin hata kuyruğuna yerleştirir. Orijinal skb yerel olarak alındığında, skb_copy_ubufs() fonksiyonu skb_unclone() fonksiyonunu çağırır ve pskb_expand_head() fonksiyonu skb->cb->ubuf.refcnt değerini artırır. Bu ek sayım, skb serbest bırakılırken azaltılır ancak struct ubuf_info_msgzc hala bir refcnt değerine sahiptir, bu nedenle __msg_zerocopy_callback() çağrılmaz. Son refcnt değeri, TX zaman damgalı skb'yi recvmsg() ile geri almadığımız sürece serbest bırakılmaz. Soketin refcnt değeri 0'a ulaştıktan sonra inet_sock_destruct() içinde hata kuyruğunu temizlediğimiz için dairesel bir bağımlılık oluşur. Bu tür skb'leri tutan soketi close() ile kapatırsak, sock_put() asla çağrılmaz ve sayım, sk ve skb sızdırılır. TCP aynı soruna sahiptir ve e0c8bccd40fc ("net: stream: purge sk_error_queue in sk_stream_kill_queues()") commit'i, close() sırasında skb_queue_purge() çağrılarak bunu düzeltmeye çalışmıştır. Ancak, bir qdisc veya cihazda kuyruğa alınmış olan skb'nin, skb_queue_purge() çağrısından sonra hata kuyruğuna konulma ihtimali düşük de olsa vardır. __skb_tstamp_tx() fonksiyonunda, dairesel bağımlılığı ortadan kaldırmak için klonlanan skb'nin ubuf referansına sahip olmaması gerekir; fakat skb_clone(), zerocopy skb için skb_copy_ubufs() fonksiyonunu çağırmaz. Bu nedenle, skb_copy_ubufs() fonksiyonunun çağrılması için klonlanan skb üzerinde skb_orphan_frags_rx() fonksiyonunu çağırmamız gerekmektedir. [0]: BUG: memory leak unreferenced object 0xffff88800c6d2d00 (size 1152): comm "syz-executor392", pid 264, jiffies 4294785440 (age 13.044s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 cd af e8 81 00 00 00 00 ................ 02 00 07 40 00 00 00 00 00 00 00 00 00 00 00 00 ...@............ backtrace: [<0000000055636812>] sk_prot_alloc+0x64/0x2a0 net/core/sock.c:2024 [<0000000054d77b7a>] sk_alloc+0x3b/0x800 net/core/sock.c:2083 [<0000000066f3c7e0>] inet_create net/ipv4/af_inet.c:319 [inline] [<0000000066f3c7e0>] inet_create+0x31e/0xe40 net/ipv4/af_inet.c:245 [<000000009b83af97>] __sock_create+0x2ab/0x550 net/socket.c:1515 [<00000000b9b11231>] sock_create net/socket.c:1566 [inline] [<00000000b9b11231>] __sys_socket_create net/socket.c:1603 [inline] [<00000000b9b11231>] __sys_socket_create net/socket.c:1588 [inline] [<00000000b9b11231>] __sys_socket+0x138/0x250 net/socket.c:1636 [<000000004fb45142>] __do_sys_socket net/socket.c:1649 [inline] [<000000004fb45142>] __se_sys_socket net/socket.c:1647 [inline] [<000000004fb45142>] __x64_sys_socket+0x73/0xb0 net/socket.c:1647 [<0000000066999e0e>] do_syscall_x64 arch/x86/entry/common.c:50 [inline] [<0000000066999e0e>] do_syscall_64+0x38/0x90 arch/x86/entry/common.c:80 [<0000000017f238c1>] entry_SYSCALL_64_after_hwframe+0x63/0xcd BUG: memory leak unreferenced object 0xffff888017633a00 (size 240): comm "syz-executor392", pid 264, jiffies 4294785440 (age 13.044s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 2d 6d 0c 80 88 ff ff .........-m..... backtrace: [<000000002b1c4368>] __alloc_skb+0x229/0x320 net/core/skbuff.c:497 [<00000000143579a6>] alloc_skb include/linux/skbuff.h:1265 [inline] [<00000000143579a6>] sock_omalloc+0xaa/0x190 net/core/sock.c:2596 [<00000000be626478>] msg_zerocopy_alloc net/core/skbuff.c:1294 [inline] [<00000000be626478>] ---truncated---

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın1 Eki 2025
İlk görülme1 Eki 2025
Zayıflık türüCWE-401CWE-401

Nasıl düzeltilir

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel4.14 ≤ v < 4.14.315, 4.15 ≤ v < 4.19.283, 4.20 ≤ v < 5.4.243, 5.5 ≤ v < 5.10.180, 5.11 ≤ v < 5.15.111, 5.16 ≤ v < 6.1.28, 6.2 ≤ v < 6.2.15, 6.3 ≤ v < 6.3.24.14.315, 4.19.283, 5.4.243, 5.10.180, 5.15.111, 6.1.28, 6.2.15, 6.3.2

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-2023-53489 · Linux Kernel · Dark Radar