CVE-2024-41048

Yüksək

Təsvir

Linux kernelində aşağıdakı zəiflik aradan qaldırılıb: skmsg: sk_msg_recvmsg funksiyasında sıfır uzunluqlu skb-ni keçin Loongarch platformasında BPF selftestlərini (./test_progs -t sockmap_basic) işə saldıqda aşağıdakı kernel panic baş verir: [...] Oops[#1]: CPU: 22 PID: 2824 Comm: test_progs Tainted: G OE 6.10.0-rc2+ #18 Hardware name: LOONGSON Dabieshan/Loongson-TC542F0, BIOS Loongson-UDK2018 ... ... ra: 90000000048bf6c0 sk_msg_recvmsg+0x120/0x560 ERA: 9000000004162774 copy_page_to_iter+0x74/0x1c0 CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE) PRMD: 0000000c (PPLV0 +PIE +PWE) EUEN: 00000007 (+FPE +SXE +ASXE -BTE) ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7) ESTAT: 00010000 [PIL] (IS= ECode=1 EsubCode=0) BADV: 0000000000000040 PRID: 0014c011 (Loongson-64bit, Loongson-3C5000) Modules linked in: bpf_testmod(OE) xt_CHECKSUM xt_MASQUERADE xt_conntrack Process test_progs (pid: 2824, threadinfo=0000000000863a31, task=...) Stack : ... Call Trace: [<9000000004162774>] copy_page_to_iter+0x74/0x1c0 [<90000000048bf6c0>] sk_msg_recvmsg+0x120/0x560 [<90000000049f2b90>] tcp_bpf_recvmsg_parser+0x170/0x4e0 [<90000000049aae34>] inet_recvmsg+0x54/0x100 [<900000000481ad5c>] sock_recvmsg+0x7c/0xe0 [<900000000481e1a8>] __sys_recvfrom+0x108/0x1c0 [<900000000481e27c>] sys_recvfrom+0x1c/0x40 [<9000000004c076ec>] do_syscall+0x8c/0xc0 [<9000000003731da4>] handle_syscall+0xc4/0x160 Code: ... ---[ end trace 0000000000000000 ]--- Kernel panic - not syncing: Fatal exception Kernel relocated by 0x3510000 .text @ 0x9000000003710000 .data @ 0x9000000004d70000 .bss @ 0x9000000006469400 ---[ end Kernel panic - not syncing: Fatal exception ]--- [...] Bu crash sockmap_basic daxilində sockmap_skb_verdict_shutdown alt testi işə salındıqda hər dəfə baş verir. Bu crashın səbəbi sk_msg_recvmsg() funksiyasında page_address() funksiyasına NULL göstəricinin ötürülməsidir. Arxitekturadan asılı olaraq fərqli tətbiqlərə görə page_address(NULL) Loongarch platformasında panic yaradır, x86 platformasında isə yaratmır. Beləliklə, bu səhv bir müddət x86 platformasında gizli qalmışdı, lakin indi Loongarch platformasında aşkar olunur. Əsas səbəb növbəyə sıfır uzunluqlu skb-nin (skb->len == 0) qoyulmasıdır. Bu sıfır uzunluqlu skb test_sockmap_skb_verdict_shutdown() funksiyasında çağırılan shutdown() tərəfindən göndərilən TCP FIN paketidir: shutdown(p1, SHUT_WR); Bu halda sk_psock_skb_ingress_enqueue() funksiyasında num_sge sıfırdır və bu sge-yə heç bir səhifə qoyulmur (sg_set_page funksiyasındakı sg_set_page bax), lakin bu boş sge ingress_msg siyahısına növbəyə qoyulur. Və sk_msg_recvmsg() funksiyasında bu boş sge istifadə olunur və sg_page(sge) tərəfindən NULL səhifə alınır. Bu NULL səhifə copy_page_to_iter() funksiyasına ötürülür, o da onu kmap_local_page() və page_address() funksiyalarına ötürür, nəticədə kernel panic baş verir. Bunu həll etmək üçün bu sıfır uzunluqlu skb-ni keçməliyik. Beləliklə, sk_msg_recvmsg() funksiyasında əgər copy sıfırdırsa, bu sıfır uzunluqlu skb deməkdir, copy_page_to_iter() funksiyasının çağırılmasını keçin. tcp_bpf.c faylında is_fin yoxlaması üçün copy_page_to_iter tərəfindən tetiklənən EFAULT qaytarmasından istifadə edirik.

CiddilikYüksək
CVSS7.5
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc29 iyl 2024
İlk görülmə29 iyl 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.15.163, 6.1.100, 6.6.41, 6.9.10 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel4.20 ≤ v < 5.15.163, 5.16 ≤ v < 6.1.100, 6.2 ≤ v < 6.6.41, 6.7 ≤ v < 6.9.10, 6.105.15.163, 6.1.100, 6.6.41, 6.9.10

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-2024-41048 · Linux Kernel · Dark Radar