Ubuntu 14.04 LTS/16.04 LTS:Linux 核心弱點 (USN-6739-1)

high Nessus Plugin ID 193594

概要

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

說明

遠端 Ubuntu 14.04 LTS/16.04 LTS 主機上安裝的一個套件受到 USN-6739-1 公告中所提及的多個弱點影響。

- 在 Linux 核心中,已解決下列弱點: i2c:修正潛在的釋放後使用弱點,僅在我們使用完 adap 結構後釋放。此修補程式只是將 put_device() 向下移動一個位元,以避免釋放後使用。 [wsa:已新增程式碼註解,新增 Fixes 標籤] (CVE-2019-25162)

- 在 Linux 核心中,已解決下列弱點:net:修正 tw_timer_handler 中的釋放後使用弱點。在 Linux 5.4 中發現如下實際錯誤問題。錯誤: 無法處理以下位址的頁面錯誤:ffffde49a863de28 PGD 7e6fe62067 P4D 7e6fe62067 PUD 7e6fe63067 PMD f51e064067 PTE 0 RIP:
0010:tw_timer_handler+0x20/0x40 Call Trace: <IRQ> call_timer_fn+0x2b/0x120 run_timer_softirq+0x1ef/0x450
__do_softirq+0x10d/0x2b8 irq_exit+0xc7/0xd0 smp_apic_timer_interrupt+0x68/0x120 apic_timer_interrupt+0xf/0x20 自 2017 年起,在執行緒 [1] 中也發現此問題,遺憾的是,修正 DCCP 後仍可重現此問題。網路命名空間遭到損毀時,會在 tcp_sk_exit_batch 之前呼叫 ipv4_mib_exit_net,原因是 tcp_sk_ops 在 ipv4_mib_ops 之前註冊,這表示在 pernet_list 清單中,tcp_sk_ops 位於 ipv4_mib_ops 的前面。如果有某些傳送時間等待計時器,則 tw_timer_handler 中的 net->mib.net_statistics 會在 ipv4_mib_exit_net 之後發生釋放後使用。此錯誤並非在認可 f2bf415cfed7 (mib:新增 net 至 NET_ADD_STATS_BH) 中引入,因為 net_statistics 是全域變數,而非動態配置和釋放。實際上,是認可 61a7e26028b9 (mib:在結構網路上放置網路統計資料) 引入了此錯誤,因為它會在網路結構上放置網路統計資料,並在網路命名空間遭到損毀時予以釋放。將 init_ipv4_mibs() 移至 tcp_init() 的前端,即可修正此錯誤,同時以 panic() 取代 pr_crit(),因為在 init_ipv4_mibs() 失敗時繼續沒有意義。 [1] https://groups.google.com/g/syzkaller/c/p1tn-_Kc6l4/m/smuL_FMAAgAJ?pli=1 (CVE-2021-46936)

- 在 Linux 核心中,已解決下列弱點:openvswitch:修正了在以 KASAN 構建的核心上對執行 openvswitch 的 IPv4 封包進行片段化時發生的堆疊 OOB 讀取問題;測試 IPv4 封包的片段化時可能會看到下列錯誤:BUG: KASAN: stack-out-of-bounds in ip_do_fragment+0x1b03/0x1f60 Read of size 1 at addr ffff888112fc713c by task handler2/1367 CPU: 0 PID:
1367 Comm: handler2 Not tainted 5.12.0-rc6+ #418 Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 Call Trace: dump_stack+0x92/0xc1 print_address_description.constprop.7+0x1a/0x150 kasan_report.cold.13+0x7f/0x111 ip_do_fragment+0x1b03/0x1f60 ovs_fragment+0x5bf/0x840 [openvswitch] do_execute_actions+0x1bd5/0x2400 [openvswitch] ovs_execute_actions+0xc8/0x3d0 [openvswitch] ovs_packet_cmd_execute+0xa39/0x1150 [openvswitch] genl_family_rcv_msg_doit.isra.15+0x227/0x2d0 genl_rcv_msg+0x287/0x490 netlink_rcv_skb+0x120/0x380 genl_rcv+0x24/0x40 netlink_unicast+0x439/0x630 netlink_sendmsg+0x719/0xbf0 sock_sendmsg+0xe2/0x110 ____sys_sendmsg+0x5ba/0x890 ___sys_sendmsg+0xe9/0x160 __sys_sendmsg+0xd3/0x170 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x7f957079db07 Code: c3 66 90 41 54 41 89 d4 55 48 89 f5 53 89 fb 48 83 ec 10 e8 eb ec ff ff 44 89 e2 48 89 ee 89 df 41 89 c0 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 35 44 89 c7 48 89 44 24 08 e8 24 ed ff ff 48 RSP: 002b:00007f956ce35a50 EFLAGS: 00000293 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 0000000000000019 RCX:
00007f957079db07 RDX: 0000000000000000 RSI: 00007f956ce35ae0 RDI: 0000000000000019 RBP: 00007f956ce35ae0 R08: 0000000000000000 R09: 00007f9558006730 R10: 0000000000000000 R11: 0000000000000293 R12:
0000000000000000 R13: 00007f956ce37308 R14: 00007f956ce35f80 R15: 00007f956ce35ae0 The buggy address belongs to the page: page:00000000af2a1d93 refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x112fc7 flags: 0x17ffffc0000000() raw: 0017ffffc0000000 0000000000000000 dead000000000122 0000000000000000 raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: kasan: bad access detected addr ffff888112fc713c is located in stack of task handler2/1367 at offset 180 in frame: ovs_fragment+0x0/0x840 [openvswitch] this frame has 2 objects: [32, 144) 'ovs_dst' [192, 424) 'ovs_rt' Memory state around the buggy address: ffff888112fc7000: f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ffff888112fc7080: 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 >ffff888112fc7100: 00 00 00 f2 f2 f2 f2 f2 f2 00 00 00 00 00 00 00 ^ ffff888112fc7180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ffff888112fc7200: 00 00 00 00 00 00 f2 f2 f2 00 00 00 00 00 00 00 for IPv4 packets, ovs_fragment() uses a temporary struct dst_entry. 然後,在下列呼叫圖形中: ip_do_fragment() ip_skb_dst_mtu() ip_dst_mtu_maybe_forward() ip_mtu_locked() 將結構 dst_entry 的指標作為結構 rtable 的指標使用:這會將 rt_mtu_locked 之類的結構成員存取變成堆疊中的 OOB 讀取。修正此問題時需變更用於 ovs_fragment() 中 IPv4 封包的暫時變數,與以下幾行針對 IPv6 所做的類似。(CVE-2021-46955)

- 在 Linux 核心中,已解決下列弱點: ACPI:custom_method:修正潛在的釋放後使用問題。在 cm_write() 中,到達函式結尾時,一律會釋放 buf。如果要求的計數小於 table.length,則會釋放已配置的緩衝區,但後續的 cm_write() 呼叫仍會嘗試存取該緩衝區。移除函式結尾的無條件 kfree(buf),並將 -EINVAL 錯誤路徑中的 buf 設為 NULL,以符合函式的其餘部分。(CVE-2021-46966)

- 在 Linux 核心中,已解決下列弱點:powerpc/64s:修正切換項目排清障礙時的損毀問題 項目排清緩解措施可在執行階段透過 debugfs 檔案 (entry_flush) 啟用/停用,這會造成核心自行修補,以啟用/停用相關緩解措施。不過,視我們使用的緩解措施而定,在其他 CPU 作用中時執行該修補作業可能並不安全。例如,下列當機情形:sleeper[15639]: segfault (11) at c000000000004c20 nip c000000000004c20 lr c000000000004c20 表示我們已傳回至使用者空間,損毀的 LR 指向核心,這是因為執行了對遞補項目排清局部修補呼叫 (即. 我們遺漏了 LR 還原)。透過停止電腦執行修補來修正此問題。未執行修補的 CPU 將在停止電腦邏輯的核心中旋轉。目前,這已足夠滿足我們的目的,因為我們所做的修補都不是針對該程式碼或附近的任何地方。(CVE-2021-46990)

- 在 armv8_deprecated.c 的 emulation_proc_handler 中,由於存在爭用條件,因而可能造成記憶體損毀。這可能會導致本機權限提升,且不需額外的執行權限。利用弱點不需要使用者互動。產品:AndroidVersions: Android kernelAndroid ID:A-237540956References:上游核心 (CVE-2022-20422)

- 在配置的 con 和設定的 con->sock 之間,在 Linux 核心中發現一個資料爭用缺陷。在 Linux 核心的 tipc 通訊協定中,存取 net/tipc/topsrv.c 中的 con->sock->sk 時,此問題會導致 NULL 指標解除參照。(CVE-2023-1382)

- Linux 核心允許使用者空間處理程序透過呼叫 prctl (PR_SET_SPECULATION_CTRL 已停用推測功能),以及使用 seccomp 來啟用緩解措施。我們發現,在至少一個主要雲端供應商的 VM 上,即使在使用 prctl 啟用 spectre-BTI 緩解措施之後,核心在某些情況下仍會讓受害者處理程序容易受到攻擊。在開機命令行強制執行 IBRS 緩解措施時,可在裸機上觀察到相同的行為。發生這種情況是因為在啟用純 IBRS (非增強型 IBRS) 的情況下,核心的某些邏輯會判斷為不需要 STIBP。IBRS 位元可暗中防止跨執行緒分支目標插入。
但是,使用舊版 IBRS 時,由於效能原因,IBRS 位元會在傳回至使用者空間時遭到清除,這會停用隱含的 STIBP,並使使用者空間執行緒容易受到 STIBP 防範的跨執行緒分支目標插入弱點影響。(CVE-2023-1998)

- 在 Bluetooth Core Specification 4.2 至 5.4 (含) 中,具有安全簡易配對和安全連線配對的藍牙 BR/EDR 裝置允許強制使用短金鑰長度的特定攔截式攻擊,且可能導致發現加密金鑰和即時插入,亦即 BLUFFS。(CVE-2023-24023)

- 在 6.4.5 之前的 Linux 核心中,drivers/gpu/drm/drm_atomic.c 在非封鎖 Atomic commit 和驅動程式卸載之間發生爭用情形時,會出現釋放後使用情形。(CVE-2023-51043)

- 在 6.6.8 及更低版本的 Linux 核心中,net/bluetooth/af_bluetooth.c 中的 bt_sock_recvmsg 存在釋放後使用情形,這是因為 bt_sock_ioctl 爭用情形所致。(CVE-2023-51779)

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

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

- 在 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 核心中,下列弱點已修正:jfs:修正 jfs_evict_inode 中的 uaf 執行 diMount(ipimap) 失敗時,已釋放的物件 ipimap 或可在 diFreeSpecial() 中進行訪問。rcu_core() 呼叫 jfs_free_node() 時發生非同步 ipimap 釋放。因此,diMount(ipimap) 失敗時,sbi->ipimap 不應被初始化為 ipimap。(CVE-2023-52600)

- 在 Linux 核心中,下列弱點已修正:UBSAN:dtSplitRoot 中的 array-index-out-of-bounds Syzkaller 報告了以下問題:oop0:檢測到容量變化範圍在 0 到 32768 之间 UBSAN:
fs/jfs/jfs_dtree.c:1971:9 索引 -2 中的 array-index-out-of-bounds 超出類型「struct dtslot [128]」的範圍 CPU:0 PID:3613 命令:syz-executor270 未污染 6.0.0-syzkaller-09423-g493ffd6605b2 #0 硬體名稱:Google Google Compute Engine/Google Compute Engine,BIOS Google 09/22/2022 呼叫追蹤:<TASK>
__dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106 ubsan_epilogue lib/ubsan.c:151 [inline] __ubsan_handle_out_of_bounds+0xdb/0x130 lib/ubsan.c:283 dtSplitRoot+0x8d8/0x1900 fs/jfs/jfs_dtree.c:1971 dtSplitUp fs/jfs/jfs_dtree.c:985 [inline] dtInsert+0x1189/0x6b80 fs/jfs/jfs_dtree.c:863 jfs_mkdir+0x757/0xb00 fs/jfs/namei.c:270 vfs_mkdir+0x3b3/0x590 fs/namei.c:4013 do_mkdirat+0x279/0x550 fs/namei.c:4038 __do_sys_mkdirat fs/namei.c:4053 [inline] __se_sys_mkdirat fs/namei.c:4051 [inline] __x64_sys_mkdirat+0x85/0x90 fs/namei.c:4051 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP:0033:0x7fcdc0113fd9 程式碼:ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 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 c0 ff ff ff f7 d8 64 89 01 48 RSP:002b:00007ffeb8bc67d8 EFLAGS:00000246 ORIG_RAX:0000000000000102 RAX:ffffffffffffffda RBX:0000000000000000 RCX:00007fcdc0113fd9 RDX:
0000000000000000 RSI:0000000020000340 RDI:0000000000000003 RBP:00007fcdc00d37a0 R08:0000000000000000 R09:00007fcdc00d37a0 R10:00005555559a72c0 R11:0000000000000246 R12:00000000f8008000 R13:
0000000000000000 R14:00083878000000f8 R15:0000000000000000 </TASK> 此問題因 fsi 的值小於 -1 所致。雖然系統可以檢查 fsi 值變為 -1 是否會發生迴圈中斷,但 syzbot 能夠產生小於 -1 的值 (導致錯誤)。此修補程式只針對小於 0 的值新增變更。此修補程式已經過 syzbot 測試。(CVE-2023-52603)

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

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

解決方案

更新受影響的 kernel 套件。

另請參閱

https://ubuntu.com/security/notices/USN-6739-1

Plugin 詳細資訊

嚴重性: High

ID: 193594

檔案名稱: ubuntu_USN-6739-1.nasl

版本: 1.0

類型: local

代理程式: unix

已發布: 2024/4/19

已更新: 2024/4/19

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

風險資訊

VPR

風險因素: Medium

分數: 6.7

CVSS v2

風險因素: Medium

基本分數: 6.8

時間分數: 5.3

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

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

CVSS v3

風險因素: High

基本分數: 7.8

時間分數: 7

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

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

弱點資訊

CPE: cpe:/o:canonical:ubuntu_linux:14.04:-:lts, cpe:/o:canonical:ubuntu_linux:16.04:-:lts, p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1130-aws, p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1131-kvm, p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-1168-aws, p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-253-generic, p-cpe:/a:canonical:ubuntu_linux:linux-image-4.4.0-253-lowlatency

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

可被惡意程式利用: true

可輕鬆利用: Exploits are available

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

弱點發布日期: 2022/10/11

參考資訊

CVE: CVE-2019-25162, CVE-2021-46936, CVE-2021-46955, CVE-2021-46966, CVE-2021-46990, CVE-2022-20422, CVE-2023-1382, CVE-2023-1998, CVE-2023-24023, CVE-2023-51043, CVE-2023-51779, CVE-2023-52429, CVE-2023-52445, CVE-2023-52451, CVE-2023-52600, CVE-2023-52603, CVE-2024-23851

USN: 6739-1