CVE-2024-36933
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: nsh: nsh_gso_segment() fonksiyonunda dış üst bilgi için skb->{protocol,data,mac_header} geri yüklemesi yapıldı. syzbot; şu protokolleri katmanlayan özel olarak hazırlanmış bir VIRTIO_NET_HDR_GSO_UDP GSO paketi ile çeşitli çökmeleri tetiklemiştir: ETH_P_8021AD + ETH_P_NSH + ETH_P_IPV6 + IPPROTO_UDP NSH; IPv4, IPv6, Ethernet, NSH ve MPLS kapsülleyebilir. İç protokol Ethernet olabildiğinden, NSH GSO işleyicisi olan nsh_gso_segment(), iç protokol GSO işleyicilerini çağırmak için skb_mac_gso_segment() fonksiyonunu çağırır. nsh_gso_segment(), skb_mac_gso_segment() fonksiyonunu çağırmadan önce orijinal skb için şunları yapar: 1. skb->network_header sıfırlanır 2. Orijinal skb->{mac_heaeder,mac_len} yerel bir değişkende saklanır 3. NSH üst bilgisi çekilir (pull) 4. skb->mac_header sıfırlanır 5. İç protokol için skb->mac_len ve skb->protocol ayarlanır. Ve bölümlenmiş (segmented) skb için şunları yapar: 6. skb->protocol değerine ntohs(ETH_P_NSH) atanır 7. NSH üst bilgisi eklenir (push) 8. skb->mac_header geri yüklenir 9. skb->network_header değeri skb->mac_header + mac_len olarak ayarlanır 10. skb->mac_len geri yüklenir 6-7 ve 8-9 adımlarında iki sorun bulunmaktadır. (a) 6 ve 7'den sonra skb->data, NSH üst bilgisini işaret eder, bu nedenle skb netdev üzerinden gönderildiğinde dış üst bilgi (bu durumda ETH_P_8021AD) soyulur. Ayrıca, eğer NSH, NSH + Ethernet tarafından kapsüllenmişse (yani NSH-Ethernet-NSH), ilk nsh_gso_segment() içerisindeki skb_pull(), ikinci nsh_gso_segment() tarafından Ethernet üst bilgisi çekilmediği için skb->data'nın dış NSH veya Ethernet üst bilgisinin ortasını işaret etmesine neden olur. (b) 8 ve 9'da skb->{mac_header,network_header} geri yüklenirken, nsh_gso_segment() doğrusal tampondaki verilerin kaydırıldığını varsaymaz. Ancak, syzbot tarafından gösterildiği üzere, udp6_ufo_fragment() verileri kaydırabilir ve buna bağlı olarak skb->mac_header değerini değiştirebilir. Bu gerçekleşirse, geri yüklenen skb->mac_header bile dış üst bilginin ortasını işaret eder. nsh_gso_segment() fonksiyonunun şimdiye kadar dış üst bilgilerle hiç çalışmadığı görülmektedir. nsh_gso_segment() sonunda, bölümlenmiş skb için NSH üst bilgisi yerine dış üst bilgi geri yüklenmelidir. Bunu yapmak için, dış üst bilgi konumu iç üst bilgiye göre nispi olarak hesaplanmalı ve skb->{data,mac_header,protocol} uygun şekilde ayarlanmalıdır. [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 was created at: 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---
Nasıl düzeltilir
- linux linux_kernel4.19.314, 5.4.276, 5.10.217, 5.15.159, 6.1.91, 6.6.31, 6.8.10 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 4.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.9 | 4.19.314, 5.4.276, 5.10.217, 5.15.159, 6.1.91, 6.6.31, 6.8.10 |
| debian debian_linux | 10.0 | — |
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.
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.