CVE-2024-36933

Yüksək

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: nsh_gso_segment() funksiyasında xarici başlıq üçün skb->{protocol,data,mac_header} bərpa edilir. syzbot, aşağıdakı protokolların təbəqələndirildiyi xüsusi hazırlanmış VIRTIO_NET_HDR_GSO_UDP GSO paketi vasitəsilə müxtəlif xətalar ([0] və linklərə baxın) törətmişdir: ETH_P_8021AD + ETH_P_NSH + ETH_P_IPV6 + IPPROTO_UDP NSH; IPv4, IPv6, Ethernet, NSH və MPLS protokollarını kapsullaşdıra bilər. Daxili protokol Ethernet ola bildiyi üçün NSH GSO idarəçisi olan nsh_gso_segment(), daxili protokol GSO idarəçilərini çağırmaq üçün skb_mac_gso_segment() funksiyasını çağırır. nsh_gso_segment() funksiyası skb_mac_gso_segment() çağırılmadan əvvəl orijinal skb üçün bunları edir: 1. skb->network_header sıfırlanır 2. orijinal skb->{mac_heaeder,mac_len} lokal dəyişəndə saxlanılır 3. NSH başlığı çıxarılır (pull) 4. skb->mac_header sıfırlanır 5. daxili protokol üçün skb->mac_len və skb->protocol təyin edilir. Və seqmentləşdirilmiş skb üçün bunları edir: 6. skb->protocol dəyəri ntohs(ETH_P_NSH) olaraq təyin edilir 7. NSH başlığı əlavə edilir (push) 8. skb->mac_header bərpa edilir 9. skb->mac_header + mac_len dəyəri skb->network_header olaraq təyin edilir 10. skb->mac_len bərpa edilir 6-7 və 8-9 mərhələlərində iki problem mövcuddur. (a) 6 və 7-dən sonra skb->data NSH başlığına işarə edir, buna görə də skb netdev-dən göndərildikdə xarici başlıq (bu halda ETH_P_8021AD) silinir. Həmçinin, əgər NSH, NSH + Ethernet tərəfindən kapsullaşdırılıbsa (beləliklə NSH-Ethernet-NSH), birinci nsh_gso_segment() funksiyasındakı skb_pull() çağırışı skb->data-nın xarici NSH və ya Ethernet başlığının ortasına işarə etməsinə səbəb olur, çünki ikinci nsh_gso_segment() tərəfindən Ethernet başlığı çıxarılmır. (b) 8 və 9-da skb->{mac_header,network_header} bərpa edilərkən, nsh_gso_segment() xətti buferdəki məlumatların sürüşdürüldüyünü nəzərə almır. Lakin, syzbot tərəfindən nümayiş etdirildiyi kimi, udp6_ufo_fragment() məlumatları sürüşdürə və buna uyğun olaraq skb->mac_header-i dəyişdirə bilər. Bu baş verdikdə, hətta bərpa edilmiş skb->mac_header belə xarici başlığın ortasına işarə edir. Belə görünür ki, nsh_gso_segment() indiyə qədər xarici başlıqlarla heç vaxt işləməyib. nsh_gso_segment() funksiyasının sonunda, seqmentləşdirilmiş skb üçün NSH başlığı əvəzinə xarici başlıq bərpa edilməlidir. Bunu etmək üçün gəlin xarici başlığın mövqeyini daxili başlıqdan nisbi olaraq hesablayaq və skb->{data,mac_header,protocol} düzgün şəkildə təyin edək. [0]: BUG: KMSAN: uninit-value in ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline] BUG: KMSAN: uninit-value in ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline] BUG: KMSAN: uninit-value in ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668 ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline] ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline] ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668 ipvlan_start_xmit+0x5c/0x1a0 drivers/net/ipvlan/ipvlan_main.c:222 __netdev_start_xmit include/linux/netdevice.h:4989 [inline] netdev_start_xmit include/linux/netdevice.h:5003 [inline] xmit_one net/core/dev.c:3547 [inline] dev_hard_start_xmit+0x244/0xa10 net/core/dev.c:3563 __dev_queue_xmit+0x33ed/0x51c0 net/core/dev.c:4351 dev_queue_xmit include/linux/netdevice.h:3171 [inline] packet_xmit+0x9c/0x6b0 net/packet/af_packet.c:276 packet_snd net/packet/af_packet.c:3081 [inline] packet_sendmsg+0x8aef/0x9f10 net/packet/af_packet.c:3113 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] __sys_sendto+0x735/0xa10 net/socket.c:2191 __do_sys_sendto net/socket.c:2203 [inline] __se_sys_sendto net/socket.c:2199 [inline] __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b Uninit burada yaradılmışdır: slab_post_alloc_hook mm/slub.c:3819 [inline] slab_alloc_node mm/slub.c:3860 [inline] __do_kmalloc_node mm/slub.c:3980 [inline] __kmalloc_node_track_caller+0x705/0x1000 mm/slub.c:4001 kmalloc_reserve+0x249/0x4a0 net/core/skbuff.c:582 __ ---truncated---

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc30 may 2024
İlk görülmə30 may 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel4.19.314, 5.4.276, 5.10.217, 5.15.159, 6.1.91, 6.6.31, 6.8.10 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel4.14 ≤ v < 4.19.314, 4.20 ≤ v < 5.4.276, 5.5 ≤ v < 5.10.217, 5.11 ≤ v < 5.15.159, 5.16 ≤ v < 6.1.91, 6.2 ≤ v < 6.6.31, 6.7 ≤ v < 6.8.10, 6.94.19.314, 5.4.276, 5.10.217, 5.15.159, 6.1.91, 6.6.31, 6.8.10
debian debian_linux10.0—

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.