Ubuntu 20.04 LTS : Linux 核心 (IoT) 弱點 (USN-6726-2)

high Nessus Plugin ID 193376

概要

遠端 Ubuntu 主機缺少一個或多個安全性更新。

說明

遠端 Ubuntu 20.04 LTS 主機上安裝的一個套件受到 USN-6726-2 公告中所提及的多個弱點影響。

- Xen 虛擬網路通訊協定中的傳輸要求可由多個部分組成。雖然這些部分不是真的實用,但除了初始部分,其中任何一個都可能是零長度,即根本不攜帶任何資料。除了要傳輸資料的特定初始部分,這些部分會直接轉譯為 Linux 所稱的 SKB 片段。這類轉換的要求部分在針對特定 SKB 而言長度為零時,可導致核心網路程式碼中出現 NULL 解除參照。(CVE-2023-46838)

- 在 6.7.4 及之前的 Linux 核心中,drivers/md/dm-table.c 中的 dm_table_create 會嘗試 (在 alloc_targets 中) 分配大於 INT_MAX 的位元組,但此位元組會因缺少對 dm_ioctl.target_count 結構的檢查而損毀。(CVE-2023-52429)

- 在 Linux 核心中,下列弱點已修復:f2fs:明確使 xattr 清單以 null 結尾 設定 xattr 時,明確使 xattr 清單以 null 結尾。這使得未使用的 xattr 空間一律歸零這一經不起推敲的假設無效。(CVE-2023-52436)

- 在 Linux 核心中,下列弱點已修復:binder:修復 shinker 回呼中的釋放後使用 在 shrinker 回呼期間使用 mmap 讀取鎖定意味著使用 alloc->vma 指標並不安全,因為它會與 munmap() 發生爭用。自 commit dd2283f2605e (mm:mmap:munmap 中含有讀取 mmap_sem 的 zap 頁面) 起,mmap 鎖定會在 vma 被隔離之後降級。透過 shrinker 的除錯 sysfs,我可以手動新增一些延遲並觸發頁面回收來重現此問題。下列 KASAN 報告確認了 UAF:
================================================================== 錯誤:KASAN:zap_page_range_single+0x470/0x4b8 中存在 slab-use-after-free 讀取大小為 8 位於:addr ffff356ed50e50f0 按任務 bash/478 CPU:1 PID:478 命令:bash 未污染 6.6.0-rc5-00055-g1c8b86a3799f-dirty #70 硬體名稱:linux,dummy-virt (DT) 呼叫追蹤:zap_page_range_single+0x470/0x4b8 binder_alloc_free_page+0x608/0xadc
__list_lru_walk_one+0x130/0x3b0 list_lru_walk_node+0xc4/0x22c binder_shrink_scan+0x108/0x1dc shrinker_debugfs_scan_write+0x2b4/0x500 full_proxy_write+0xd4/0x140 vfs_write+0x1ac/0x758 ksys_write+0xf0/0x1dc __arm64_sys_write+0x6c/0x9c 根據任務 492 配置:kmem_cache_alloc+0x130/0x368 vm_area_alloc+0x2c/0x190 mmap_region+0x258/0x18bc do_mmap+0x694/0xa60 vm_mmap_pgoff+0x170/0x29c ksys_mmap_pgoff+0x290/0x3a0 __arm64_sys_mmap+0xcc/0x144 根據任務 491 配置:kmem_cache_free+0x17c/0x3c8 vm_area_free_rcu_cb+0x74/0x98 rcu_core+0xa38/0x26d4 rcu_core_si+0x10/0x1c __do_softirq+0x2fc/0xd24 上次可能的相關工作建立:__call_rcu_common.constprop.0+0x6c/0xba0 call_rcu+0x10/0x1c vm_area_free+0x18/0x24 remove_vma+0xe4/0x118 do_vmi_align_munmap.isra.0+0x718/0xb5c do_vmi_munmap+0xdc/0x1fc __vm_munmap+0x10c/0x278 __arm64_sys_munmap+0x58/0x7c 透過執行 vma_lookup() 來解決此問題,此函式在 mmap 鎖定降级之后才能找到被隔離的 vma。
請注意,與升級至 mmap 寫入鎖定 (會增加爭用概率) 相比,此選項的效果更好。此外,mmap_write_trylock() 已於近期移除。(CVE-2023-52438)

- 在 Linux 核心中,下列弱點已修復:uio:修復 uio_open core-1 core-2 中的釋放後使用 ------------------------------------------------------- uio_unregister_device uio_open idev = idr_find() device_unregister(&idev->dev) put_device(&idev->dev) uio_device_release get_device(&idev->dev) kfree(idev) uio_free_minor(minor) uio_release put_device(&idev->dev) kfree(idev)
-------------------------------------------------- ----- 在 core-1 uio_unregister_device() 中,若 idev->dev kobject ref 為 1,device_unregister 将 kfree idev。但在執行 core-1 device_unregister、put_device 与 kfree 之間,core-2 可能會 get_device。然后:1. 在 core-1 kfree idev 之後,core-2 将會為 idev 執行釋放後使用。2. core-2 執行 uio_release 和 put_device 後,idev 將被雙重釋放。若要解決此問題,我們可以透过 minor_lock 取得 idev atomic 和 inc idev 參照。
(CVE-2023-52439)

- 在 Linux 核心中,下列弱點已修復:apparmor:避免剖析的設定檔名稱為空時發生當機 處理 unpack_profile() 中的壓縮設定檔時,如設定檔 :ns::samba-dcerpcd /usr/lib*/samba/{,samba/}samba-dcerpcd {...} 所述,字串 :samba-dcerpcd 被解壓縮為完整名稱,然後傳送至 aa_splitn_fqname()。aa_splitn_fqname() 視 :samba-dcerpcd 僅包含命名空間。因此,它會為 tmpname 傳回 NULL,同時 tmpns 為非 NULL。稍後,aa_alloc_profile() 損毀,因為新的設定檔名稱現在為 NULL。一般保護錯誤,可能適用於非正式位址 0xdffffc0000000000:0000 [#1] PREEMPT SMP KASAN NOPTI KASAN:null-ptr-deref 在範圍內 [0x0000000000000000-0x0000000000000007] CPU:6 PID:1657 命令:apparmor_parser 未污染 6.7.0-rc2-dirty #16 硬體民稱:QEMU Standard PC (i440FX + PIIX,1996),BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014 RIP: 0010:strlen+0x1e/0xa0 呼叫追蹤:<TASK> ? strlen+0x1e/0xa0 aa_policy_init+0x1bb/0x230 aa_alloc_profile+0xb1/0x480 unpack_profile+0x3bc/0x4960 aa_unpack+0x309/0x15e0 aa_replace_profiles+0x213/0x33c0 policy_update+0x261/0x370 profile_replace+0x20e/0x2a0 vfs_write+0x2af/0xe00 ksys_write+0x126/0x250 do_syscall_64+0x46/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 </TASK> ---[結束追蹤 0000000000000000]--- RIP:
0010:strlen+0x1e/0xa0 aa_splitn_fqname() 的此類行為似乎在預期之中,並在被呼叫的其他位置 (例如 aa_remove_profiles) 進行檢查。內部有一個明確的註解:可以使用不含下列設定檔的 ns 名稱。AFAICS,沒有什麼能夠防止解壓縮的名稱採用類似 :samba-dcerpcd 的形式,因為名稱從使用者空間傳遞而來。拒絕在此類情況下取代整個設定檔設定,並透過 EPROTO 向使用者傳送解釋訊息通知。由 Linux Verification Center (linuxtesting.org) 發現。
(CVE-2023-52443)

- 在 Linux 核心中,下列弱點已修復:f2fs:经过修復,可避免 dirent 损坏 如 Al 在 link[1] 中所報告的那樣:f2fs_rename() ... 若 (old_dir != new_dir && !whiteout) f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir); 否則 f2fs_put_page(old_dir_page, 0); 您需要糾正 .. 連結中的編號。而且跨目錄重新命名會將來源移至新的父項,即使系統要求您在舊位置留下 whiteout。[1] https://lore.kernel.org/all/20231017055040。GN800259@ZenIV/ 使用下列測試案例時,可能會造成 dirent 损坏,因為其未呼叫 f2fs_set_link() 来更新…
連結至新目錄。- mkdir -p dir/foo - renameat2 -w dir/foo bar [ASSERT] (__chk_dots_dentries:1421)
--> '..' 的錯誤 inode 編號 [0x4],父 ino 為 [0x3] [FSCK] 其他損毀錯誤 [失敗] (CVE-2023-52444)

- 在 Linux 内核中,下列弱點已修復:media:pvrusb2:修復內容中斷連線時發生的釋放後使用 在模組載入時,系統為 pvr2_context_thread_func 函式建立了一個 kthread,該函式可以呼叫 pvr2_context_destroy,因而也能呼叫內容對象上的 kfree()。不過,這可能發生在 usb hub_event 處置程式通知驅動程式之前。在 syzbot 報告無效讀取之前,此修補程式已在內容中斷連線呼叫堆疊內新增功能健全檢查。(CVE-2023-52445)

- 在 Linux 核心中,下列弱點已修復:gfs2:修復 gfs2_rgrp_dump 中的 NULL 指標解除參照 據 Syzkaller 報告,存取 gfs2_rgrp_dump() 中的 rgd->rd_rgl 时发生 NULL 指標解除參照。在 read_rindex_entry() 中建立 rgd->rd_gl 失敗時,可能會發生這種情況。在 gfs2_rgrp_dump() 中新增 NULL 指標檢查,以防止該情形發生。(CVE-2023-52448)

- 在 Linux 核心中,下列弱點已修復:mtd:修復 ftl 通知程式造成的 gluebi NULL 指標解除參照 若 ftl.ko 和 gluebi.ko 都已載入,嘗試存取 gluebi_read() 中的 gluebi->desc' 時,ftl 的通知程式會觸發 NULL 指標解除參照。ubi_gluebi_init ubi_register_volume_notifier ubi_enumerate_volumes ubi_notify_all gluebi_notify nb->notifier_call() gluebi_create mtd_device_register mtd_device_parse_register add_mtd_device blktrans_notify_add not->add() ftl_add_mtd tr->add_mtd() scan_header mtd_read mtd_read_oob mtd_read_oob_std gluebi_read mtd->read() gluebi->desc - NULL 若要再現問題詳情,請存取連結 [1]。正常情況下,請在 gluebi_get_device() 中取得 gluebi->desc,並在 gluebi_read() 中存取 gluebi->desc。但是,gluebi_get_device() 不會提前在 ftl_add_mtd() 進程中執行,導致發生 NULL 指標解除參照。適用於 gluebi 模組的解決方案是在 UBI 磁碟區上執行 jffs2,而不考慮使用 ftl 或 mtdblock [2]。因此,透過阻止 gluebi 在建立類型 MTD_UBIVOLUME 的 mtd 磁碟分割後建立 mtdblock 裝置,即可避免此問題。(CVE-2023-52449)

- 在 Linux 核心中,下列弱點已修復:powerpc/pseries/memhp:修復超出 drmem 陣列結尾的存取 若 LMB 查閱無法使項目符合給定的 DRC 索引,dlpar_memory_remove_by_index() 可能會超出邊界存取 drmem lmb 陣列。若搜尋失敗,游標仍會指向 &drmem_info->lmbs[drmem_info->n_lmbs],即陣列中最後一個有效項目之後的元素。然後,函式結尾的除錯訊息會解除參照此指標:
pr_debug (無法熱移除 %llx\n 的記憶體,lmb->base_addr);檢查時發現了該問題,並透過 KASAN 確認:pseries-hotplug-mem:嘗試熱移除 LMB,drc 索引 1234 ======================== ========================================== 錯誤:KASAN:dlpar_memory+0x298/0x1658 中存在 slab-out-of-bounds 讀取大小為 8 位於:addr c000000364e97fd0 按工作 bash/949 dump_stack_lvl+0xa4/0xfc (unreliable) print_report+0x214/0x63c kasan_report+0x140/0x2e0
__asan_load8+0xa8/0xe0 dlpar_memory+0x298/0x1658 handle_dlpar_errorlog+0x130/0x1d0 dlpar_store+0x18c/0x3e0 kobj_attr_store+0x68/0xa0 sysfs_kf_write+0xc4/0x110 kernfs_fop_write_iter+0x26c/0x390 vfs_write+0x2d4/0x4e0 ksys_write+0xac/0x1a0 system_call_exception+0x268/0x530 system_call_vectored_common+0x15c/0x2ec 根據工作 1 配置:kasan_save_stack+0x48/0x80 kasan_set_track+0x34/0x50 kasan_save_alloc_info+0x34/0x50 __kasan_kmalloc+0xd0/0x120 __kmalloc+0x8c/0x320 kmalloc_array.constprop.0+0x48/0x5c drmem_init+0x2a0/0x41c do_one_initcall+0xe0/0x5c0 kernel_init_freeable+0x4ec/0x5a0 kernel_init+0x30/0x1e0 ret_from_kernel_user_thread+0x14/0x1c 錯誤位址屬於 c000000364e80000 中的物件 (屬於大小為 131072 的快取 kmalloc-128k)。錯誤位址位於被配置 98256 位元組的區域的右側 0 位元組處 [c000000364e80000, c000000364e97fd0) ================================================================== pseries-hotplug-mem:
無法在 0 處熱移除記憶體 系統無法記錄透過單獨的訊息執行的查閱,並且僅當游標指向有效項目時解除參照。(CVE-2023-52451)

- 在 Linux 核心中,下列弱點已修復:nvmet-tcp:修復主機傳送無效 H2C PDU 長度時發生的核心錯誤 若主機傳送含有無效 DATAL 的 H2CData 命令,核心在 nvmet_tcp_build_pdu_iovec() 中可能會當機。無法處理虛擬位址 0000000000000000 的核心 NULL 指標解除參照 lr:nvmet_tcp_io_work+0x6ac/0x718 [nvmet_tcp] 呼叫追蹤:
process_one_work+0x174/0x3c8 worker_thread+0x2d0/0x3e8 kthread+0x104/0x110 若 DATAL 與封包大小不一致,則透過觸發嚴重錯誤來修復此錯誤。此外,PDU 長度絕不應超過已在 nvmet_tcp_handle_icreq() 中傳送至主機的 MAXH2CDATA 參數。(CVE-2023-52454)

- 在 Linux 核心中,下列弱點已修復:serial:8250:omap:若 pm_runtime_resume_and_get() 失敗,則不跳過資源釋放 從 .remove() 返回錯誤程式碼可使驅動程式核心發出「幾乎無用」的錯誤訊息:移除回呼傳回非零值。系統將忽略此訊息,然後仍然移除裝置。因此,在此情況下,所有未釋放的資源都會被洩漏。
略過 serial8250_unregister_port() 可能會保留足夠的 UART,從而觸發釋放後使用。因此,以更實用的錯誤訊息取代錯誤傳回 (以及「幾乎無用」的錯誤訊息),並繼續進行清理。(CVE-2023-52457)

- 在 Linux 核心中,下列弱點已修復:EDAC/thunderx:修復可能存在的超出邊界字串存取 若在全域啟用 -Wstringop-overflow,系統會針對使用 strncat() 时存在的常見錯誤顯示警告訊息:drivers/edac /thunderx_edac.c:在函式「thunderx_ocx_com_threaded_isr」中:
drivers/edac/thunderx_edac.c:1136:17:錯誤:「strncat」指定的邊界 1024 等於目的地大小 [-Werror=stringop-overflow=] 1136 | strncat(msg, other, OCX_MESSAGE_SIZE); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... 1145 | strncat(msg, other, OCX_MESSAGE_SIZE); ... 1150 | strncat(msg, other, OCX_MESSAGE_SIZE); ... 顯然,此驅動程式的作者預期 strncat() 會以 strlcat() 的方式運作,後者使用目的地緩衝區的大小而不是來源緩衝區的長度作為第三個引數。結果就是系統不會檢查已配置緩衝區的大小,而是將其變更為 strlcat()。[ bp:修剪編譯器輸出,修復提交訊息。] (CVE-2023-52464)

- 在 Linux 核心中,下列弱點已修復:drivers/amd/pm:修復 kv_parse_power_table 中的釋放後使用 若 kzalloc 配置的 ps 等於 NULL,kv_parse_power_table 會釋放之前配置的 adev->pm.dpm.ps。但是,在控制流程經過下列呼叫鏈之後:kv_parse_power_table |-> kv_dpm_init |-> kv_dpm_sw_init |-> kv_dpm_fini 在 kv_parse_power_table 中第一次釋放後,adev->pm.dpm.ps 用於 kv_dpm_fini 的 for 迴圈,並且會造成釋放後使用錯誤。(CVE-2023-52469)

- 在 Linux 核心中,下列弱點已修復:drm/radeon:檢查 radeon_crtc_init() 中的 alloc_workqueue 傳回值。檢查 radeon_crtc_init() 中的 alloc_workqueue 傳回值,以避免 null-ptr-deref。(CVE-2023-52470)

- 在 Linux 核心中,下列弱點已解決:binder:修復 mmput() 和 do_exit() 之間的爭用。工作 A 會呼叫 binder_update_page_range(),以便從工作 B 的遠端位址空間配置和插入頁面。為此,工作 A 會先透過 mmget_not_zero() 釘選遠端 mm。這可與工作 B do_exit() 造成爭用,且最終的 mmput() refcount 遞減將來自 工作 A。工作 A | 工作 B
-------------------+-------------------------------- mmget_not_zero() | | do_exit() | exit_mm() | mmput() mmput() | exit_mmap() | remove_vma() | fput() | 在此情況下,工作 B 的____fput() 工作會在工作 A 中排入 TWA_RESUME 佇列。因此理論上,工作 A 會傳回使用者空間並執行清理工作。
不過,工作 A 會改而進入睡眠狀態,等待從未收到的工作 B 回覆 (已終止)。這表示 binder_deferred_release() 會遭到封鎖,直到不相關的 binder 事件強制工作 A 回到使用者空間為止。在此之前,所有相關聯的死亡通知也會延遲。若要修復此問題,請使用 mmput_async(),其將在對應的 mm->async_put_work WQ 而非工作 A 中排程工作。(CVE-2023-52609)

- 在 Linux 核心中,下列弱點已解決:crypto: scomp - 修復 req->dst 緩衝區溢位。應在從 scomp_scratch->dst 複製之前檢查 req->dst 緩衝區大小,以避免 req->dst 緩衝區溢位問題。(CVE-2023-52612)

- 在 Linux 核心的 Netfilter 子系統中發現一個缺陷。問題存在於 nft_byteorder_eval() 函式中,其中的程式碼會反覆使用迴圈並寫入「dst」陣列。每次重複時,都會寫入 8 個位元組,但「dst」是 u32 的陣列,因此每個元素只有 4 個位元組的空間。這表示每次反覆運算都會覆寫損毀此 u32 陣列的部分先前元素。本機使用者可利用此缺陷造成拒絕服務,或可能損壞 NetFilter 的功能。(CVE-2024-0607)

- 在 6.7.1 版本之前的 Linux 核心中,drivers/md/dm-ioctl.c 內的 copy_params 可嘗試配置超過 INT_MAX 位元組並損毀,這是因為缺少 param_kernel->data_size 檢查所致。此問題與 ctl_ioctl 有關。(CVE-2024-23851)

- 在 Linux 核心中,下列弱點已修復:net:qualcomm:rmnet:修復 rmnet_policy 中的全域 oob 變數 rmnet_link_ops 會指派*更大的*maxtype 弱點,其會在剖析 netlink 屬性時導致發生全域超出邊界讀取。請參閱以下錯誤追蹤:
================================================== ================ 錯誤:KASAN:validate_nla lib/nlattr.c:386 中存在 global-out-of-bounds [inline] 錯誤:KASAN:
__nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600 中存在 global-out-of-bounds 讀取大小為 1 位於:addr ffffffff92c438d0 按工作 syz-executor.6/84207 CPU:0 PID:84207 命令:syz-executor.6 未污染:G N 6.1.0 #3 硬體名稱:QEMU Standard PC (i440FX + PIIX,1996),BIOS 1.13.0-1ubuntu1.1 04/01/2014 呼叫追蹤:<TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x8b/0xb3 lib/dump_stack.c:106 print_address_description mm/kasan/report.c:284 [inline] print_report+0x172/0x475 mm/kasan/report.c:395 kasan_report+0xbb/0x1c0 mm/kasan/report.c:495 validate_nla lib/nlattr.c:386 [inline] __nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600 __nla_parse+0x3e/0x50 lib/nlattr.c:697 nla_parse_nested_deprecated include/net/netlink.h:1248 [inline] __rtnl_newlink+0x50a/0x1880 net/core/rtnetlink.c:3485 rtnl_newlink+0x64/0xa0 net/core/rtnetlink.c:3594 rtnetlink_rcv_msg+0x43c/0xd70 net/core/rtnetlink.c:6091 netlink_rcv_skb+0x14f/0x410 net/netlink/af_netlink.c:2540 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] netlink_unicast+0x54e/0x800 net/netlink/af_netlink.c:1345 netlink_sendmsg+0x930/0xe50 net/netlink/af_netlink.c:1921 sock_sendmsg_nosec net/socket.c:714 [inline] sock_sendmsg+0x154/0x190 net/socket.c:734 ____sys_sendmsg+0x6df/0x840 net/socket.c:2482
___sys_sendmsg+0x110/0x1b0 net/socket.c:2536 __sys_sendmsg+0xf3/0x1c0 net/socket.c:2565 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3b/0x90 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7fdcf2072359 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 19 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP:002b:00007fdcf13e3168 EFLAGS:00000246 ORIG_RAX:000000000000002e RAX:ffffffffffffffda RBX:00007fdcf219ff80 RCX:00007fdcf2072359 RDX:
0000000000000000 RSI:0000000020000200 RDI:0000000000000003 RBP:00007fdcf20bd493 R08:0000000000000000 R09:0000000000000000 R10:0000000000000000 R11:0000000000000246 R12:0000000000000000 R13:
00007fffbb8d7bdf R14:00007fdcf13e3300 R15:0000000000022000 </TASK> 錯誤位址屬於變數:rmnet_policy+0x30/0xe0 錯誤位址屬於實體頁面:page:0000000065bdeb3c refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x155243 旗標:
0x200000000001000(reserved|node=0|zone=2) raw:0200000000001000 ffffea00055490c8 ffffea00055490c8 0000000000000000 raw:0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 頁面被棄用,因為:kasan:偵測到不良存取 錯誤位址記憶體狀態:ffffffff92c43780:f9 f9 f9 f9 00 00 00 02 f9 f9 f9 f9 00 00 00 07 ffffffff92c43800:f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9 06 f9 f9 f9 >ffffffff92c43880:f9 f9 f9 f9 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9 ^ ffffffff92c43900:00 00 00 00 00 00 00 00 07 f9 f9 f9 f9 f9 f9 f9 ffffffff92c43980:00 00 00 07 f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9 根據「nla_parse_nested_deprecated」的註解,maxtype 應為 len (目的地陣列) - 1. 因此在此處使用「IFLA_RMNET_MAX」。(CVE-2024-26597)

- 在 Linux 核心中,下列弱點已解決:ip6_tunnel:修復 ip6_tnl_parse_tlv_enc_lim() 中的 NEXTHDR_FRAGMENT 處理 syzbot 指出 [1] NEXTHDR_FRAGMENT 處理已中斷。
只有在我們提取足夠的位元組至 skb->head 時,才能讀取 frag_off。目前我們可能會存取記憶體。[1] BUG: KMSAN: uninit-value in ip6_tnl_parse_tlv_enc_lim+0x94f/0xbb0 ip6_tnl_parse_tlv_enc_lim+0x94f/0xbb0 ipxip6_tnl_xmit net/ipv6/ip6_tunnel.c:1326 [inline] ip6_tnl_start_xmit+0xab2/0x1a70 net/ipv6/ip6_tunnel.c:1432 __netdev_start_xmit include /linux/netdevice.h:4940 [內嵌] netdev_start_xmit include/linux/netdevice.h:4954 [內嵌] xmit_one net/core/dev.c:3548 [內嵌] dev_hard_start_xmit+0x247/0xa10 net/core/dev.c:3564
__dev_queue_xmit+0x33b8/0x5130 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [內嵌] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [內嵌] ip6_finish_output2+0x23a9/0x2b30 net/ipv6/ip6_output.c:137 ip6_finish_output+0x855/0x12b0 net/ipv6/ip6_output.c:222 NF_HOOK_COND include/linux/netfilter.h:303 [內嵌] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [內嵌] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [內嵌] ip6_push_pending_frames +0x1f9/0x560 net/ipv6/ip6_output.c:1972 rawv6_push_pending_frames+0xbe8/0xdf0 net/ipv6/raw.c:582 rawv6_sendmsg+0x2b66/0x2e70 net/ipv6/raw.c:920 inet_sendmsg+0x105/0x190 net/ipv4/ af_inet.c:847 sock_sendmsg_nosec net/socket.c:730 [內嵌] __sock_sendmsg net/socket.c:745 [內嵌] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [內嵌] __do_sys_sendmsg net/socket.c:2676 [內嵌] __se_sys_sendmsg net/socket.c:2674 [內嵌] __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674 do_syscall_x64 arch/x86/ entry/common.c:52 [內嵌] do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b Uninit 建立於:slab_post_alloc_hook+0x129/0xa70 mm/slab.h:768 slab_alloc_node mm /slub.c:3478 [內嵌] __kmem_cache_alloc_node+0x5c9/0x970 mm/slub.c:3517
__do_kmalloc_node mm/slab_common.c:1006 [內嵌] __kmalloc_node_track_caller+0x118/0x3c0 mm/slab_common.c:1027 kmalloc_reserve+0x249/0x4a0 net/core/skbuff.c:582 pskb_expand_head+0x226/0x1a00 net/core/skbuff.c: 2098 __pskb_pull_tail+0x13b/0x2310 net/core/skbuff.c:2655 pskb_may_pull_reason include/linux/skbuff.h:2673 [內嵌] pskb_may_pull include/linux/skbuff.h:2681 [內嵌] ip6_tnl_parse_tlv_enc_lim+0x901/0xbb0 net/ipp// ip6_tunnel.c:408 ipxip6_tnl_xmit net/ipv6/ip6_tunnel.c:1326 [內嵌] ip6_tnl_start_xmit+0xab2/0x1a70 net/ipv6/ip6_tunnel.c:1432 __netdev_start_xmit include/linux/netdevice.h:4940 [內嵌] netdev_start_xmit/linux/ netdevice.h:4954 [內嵌] xmit_one net/core/dev.c:3548 [內嵌] dev_hard_start_xmit+0x247/0xa10 net/core/dev.c:3564
__dev_queue_xmit+0x33b8/0x5130 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [內嵌] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [內嵌] ip6_finish_output2+0x23a9/0x2b30 net/ipv6/ip6_output.c:137 ip6_finish_output+0x855/0x12b0 net/ipv6/ip6_output.c:222 NF_HOOK_COND include/linux/netfilter.h:303 [內嵌] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [內嵌] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [內嵌] ip6_push_pending_frames +0x1f9/0x560 net/ipv6/ip6_output.c:1972 rawv6_push_pending_frames+0xbe8/0xdf0 net/ipv6/raw.c:582 rawv6_sendmsg+0x2b66/0x2e70 net/ipv6/raw.c:920 inet_sendmsg+0x105/0x190 net/ipv4/ af_inet.c:847 sock_sendmsg_nosec net/socket.c:730 [內嵌] __sock_sendmsg net/socket.c:745 [內嵌] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [內嵌] __do_sys_sendms ---truncated--- (CVE-2024-26633)

- 路由器遇到 IPv6 封包過大而無法傳輸至下一個躍點時,會向傳送者傳回 ICMP6 封包過大 (PTB) 訊息。傳送者會快取此更新後的最大傳輸單位 (MTU),以便在後續路由至相同主機時知道不要超過此值。(CVE-2023-52340)

請注意,Nessus 並未測試這些問題,而是僅依據應用程式自我報告的版本號碼作出判斷。

解決方案

更新受影響的 kernel 套件。

另請參閱

https://ubuntu.com/security/notices/USN-6726-2

Plugin 詳細資訊

嚴重性: High

ID: 193376

檔案名稱: ubuntu_USN-6726-2.nasl

版本: 1.1

類型: local

代理程式: unix

已發布: 2024/4/17

已更新: 2024/4/18

支援的感應器: Agentless Assessment, Frictionless Assessment Agent, Frictionless Assessment AWS, Frictionless Assessment Azure, Nessus Agent, Nessus

風險資訊

VPR

風險因素: Medium

分數: 6.7

CVSS v2

風險因素: Medium

基本分數: 6.8

時間分數: 5

媒介: CVSS2#AV:L/AC:L/Au:S/C:C/I:C/A:C

CVSS 評分資料來源: CVE-2023-52469

CVSS v3

風險因素: High

基本分數: 7.8

時間分數: 6.8

媒介: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

時間媒介: CVSS:3.0/E:U/RL:O/RC:C

弱點資訊

CPE: cpe:/o:canonical:ubuntu_linux:20.04:-:lts, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.4.0-1034-iot

必要的 KB 項目: Host/cpu, Host/Ubuntu, Host/Ubuntu/release, Host/Debian/dpkg-l

可輕鬆利用: No known exploits are available

修補程式發佈日期: 2024/4/16

弱點發布日期: 2024/1/18

參考資訊

CVE: CVE-2023-46838, CVE-2023-52340, CVE-2023-52429, CVE-2023-52436, CVE-2023-52438, CVE-2023-52439, CVE-2023-52443, CVE-2023-52444, CVE-2023-52445, CVE-2023-52448, CVE-2023-52449, CVE-2023-52451, CVE-2023-52454, CVE-2023-52457, CVE-2023-52464, CVE-2023-52469, CVE-2023-52470, CVE-2023-52609, CVE-2023-52612, CVE-2024-0607, CVE-2024-23851, CVE-2024-26597, CVE-2024-26633

USN: 6726-2