CVE-2024-26804

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: net: ip_tunnel: baş sahənin (headroom) daimi artmasının qarşısını al syzkaller aşağıdakı kasan xətasını tetikləyib: BUG: KASAN: use-after-free in __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170 Read of size 1 at addr ffff88812fb4000e by task syz-executor183/5191 [..] kasan_report+0xda/0x110 mm/kasan/report.c:588 __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170 skb_flow_dissect_flow_keys include/linux/skbuff.h:1514 [inline] ___skb_get_hash net/core/flow_dissector.c:1791 [inline] __skb_get_hash+0xc7/0x540 net/core/flow_dissector.c:1856 skb_get_hash include/linux/skbuff.h:1556 [inline] ip_tunnel_xmit+0x1855/0x33c0 net/ipv4/ip_tunnel.c:748 ipip_tunnel_xmit+0x3cc/0x4e0 net/ipv4/ipip.c:308 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564 __dev_queue_xmit+0x7c1/0x3d60 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [inline] neigh_connected_output+0x42c/0x5d0 net/core/neighbour.c:1592 ... ip_finish_output2+0x833/0x2550 net/ipv4/ip_output.c:235 ip_finish_output+0x31/0x310 net/ipv4/ip_output.c:323 .. iptunnel_xmit+0x5b4/0x9b0 net/ipv4/ip_tunnel_core.c:82 ip_tunnel_xmit+0x1dbc/0x33c0 net/ipv4/ip_tunnel.c:831 ipgre_xmit+0x4a1/0x980 net/ipv4/ip_gre.c:665 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564 ... Xəta ona görə baş verir ki, skb->data ayrılmış skb->head sahəsindən kənara işarə edir. Bunun səbəbi neigh qatının aşağıdakını etməsidir: __skb_pull(skb, skb_network_offset(skb)); ... lakin skb_network_offset() mənfi ofset qaytarır və __skb_pull() arqumenti işarəsizdir. Başqa sözlə, skb->data çox böyük bir dəyərlə "düzəldilir". Mənfi dəyər ona görə qaytarılır ki, skb->head və skb->data arasındakı məsafə 64k-dan çoxdur və skb->network_header (u16) dövriyyə edib (wraparound). Xəta ip_tunnel infrastrukturundadır və bu, dev->needed_headroom-un sonsuz olaraq artmasına səbəb ola bilər. syzkaller reproduksiyaedici paketlərin gre tuneli vasitəsilə marşrutlaşdırılmasından və gre ilə inkapsulyasiya edilmiş paketlərin marşrutunun başqa (ipip) tunelə işarə etməsindən ibarətdir. ipip inkapsulyasiyası növbəti çıxış qurğusu kimi gre0-ı tapır. Bu, aşağıdakı ardıcıllığa səbəb olur: 1). Birinci paket gre0 vasitəsilə göndərilməlidir. Marşrut axtarışı çıxış qurğusu olaraq ipip0-ı tapır. 2). gre0 üçün ip_tunnel_xmit gələcək çıxış qurğusuna, rt.dev->needed_headroom-a (ipip0) əsaslanaraq gre0->needed_headroom-u artırır. 3). ip çıxışı / start_xmit skb-ni ipip0-a keçirir. Bu, eyni kod yolunu yenidən işlədir (xmit rekursiyası). 4). gre0-inkapsulyasiyasından sonrakı paket üçün marşrutlaşdırma addımı ipip0 ilə inkapsulyasiya edilmiş paket üçün istifadə olunacaq çıxış qurğusu kimi gre0-ı tapır. Sonra tunl0->needed_headroom (artıq artırılmış) gre0 qurğusunun baş sahəsinə əsaslanaraq artırılır. Bu, hər gələcək paket üçün təkrarlanır: gre0->needed_headroom şişirdilir, çünki əvvəlki paketlərin ipip0 addımı rt->dev (gre0) baş sahəsini artırıb, ipip0 isə gre0 needed_headroom artırıldığı üçün artırılıb. Hər sonrakı paket üçün gre/ipip0->needed_headroom artır, ta ki genişlənmədən sonrakı baş sahə yenidən ayrılmaları skb->head/data məsafəsinin 64k-dan çox olması ilə nəticələnənə qədər. Bu baş verdikdə, pskb_expand_head baş sahənin genişlənməsi/yenidən ayrılmasından sonra skb_network_offset()-un dəyişməz qaldığına əmin olmağa çalışarkən skb->network_header (u16) dövriyyə edir. Bundan sonra skb_network_offset(skb) baş sahənin genişlənməsindən sonra fərqli (və mənfi) nəticə qaytarır. Növbəti dəfə neigh qatına (və ya şəbəkə başlığını __skb_pull edəcək hər hansı digər yerə) gedildikdə skb->data skb->head sahəsindən kənarda olan yaddaş ünvanına işarə edir. v2: Baş sahənin artımını tamamilə ləğv etmək əvəzinə daimi artmanın qarşısını almaq üçün needed_headroom yeniləməsini ixtiyari seçilmiş yuxarı hədlə məhdudlaşdırır.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc4 apr 2024
İlk görülmə4 apr 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.4.271, 5.10.212, 5.15.151, 6.1.81, 6.6.21, 6.7.9 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel2.6.34 ≤ v < 5.4.271, 5.5 ≤ v < 5.10.212, 5.11 ≤ v < 5.15.151, 5.16 ≤ v < 6.1.81, 6.2 ≤ v < 6.6.21, 6.7 ≤ v < 6.7.9, 6.85.4.271, 5.10.212, 5.15.151, 6.1.81, 6.6.21, 6.7.9
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.

CVE-2024-26804 · Linux Kernel · Dark Radar