CVE-2024-41048

Yüksek

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: skmsg: sk_msg_recvmsg fonksiyonunda sıfır uzunluklu skb'lerin atlanması Bir Loongarch platformunda BPF öztestleri (./test_progs -t sockmap_basic) çalıştırıldığında aşağıdaki kernel panic durumu meydana gelmektedir: [...] 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 çökme, sockmap_basic içerisindeki sockmap_skb_verdict_shutdown alt testi her çalıştırıldığında gerçekleşmektedir. Çökmenin nedeni, sk_msg_recvmsg() fonksiyonunda page_address() fonksiyonuna bir NULL işaretçisinin iletilmesidir. Mimariye bağlı farklı uygulamalar nedeniyle, page_address(NULL) çağrısı Loongarch platformunda panic tetiklerken x86 platformunda tetiklemez. Bu nedenle hata x86 platformunda bir süre gizli kalmış ancak şimdi Loongarch platformunda ortaya çıkmıştır. Temel neden, kuyruğa sıfır uzunlukta bir skb (skb->len == 0) eklenmiş olmasıdır. Sıfır uzunluktaki bu skb, test_sockmap_skb_verdict_shutdown() içinde çağrılan shutdown() tarafından gönderilen bir TCP FIN paketidir: shutdown(p1, SHUT_WR); Bu durumda, sk_psock_skb_ingress_enqueue() fonksiyonunda num_sge sıfırdır ve bu sge'ye herhangi bir sayfa atanmaz (bkz. sg_set_page içindeki sg_set_page), ancak bu boş sge ingress_msg listesine eklenir. Ardından sk_msg_recvmsg() fonksiyonunda bu boş sge kullanılır ve sg_page(sge) aracılığıyla bir NULL sayfa elde edilir. Bu NULL sayfanın copy_page_to_iter()'a iletilmesi, onun da bunu kmap_local_page() ve ardından page_address()'a iletmesiyle kernel panic oluşur. Bunu çözmek için sıfır uzunluktaki bu skb'nin atlanması gerekir. Dolayısıyla sk_msg_recvmsg() fonksiyonunda eğer copy değeri sıfırsa, bunun sıfır uzunluklu bir skb olduğu anlamına gelir ve copy_page_to_iter() çağrısı atlanır. tcp_bpf.c dosyasındaki is_fin kontrolü için copy_page_to_iter tarafından tetiklenen EFAULT dönüş değeri kullanılmaktadır.

ÖnemYüksek
CVSS7.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın29 Tem 2024
İlk görülme29 Tem 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.15.163, 6.1.100, 6.6.41, 6.9.10 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
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

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.