Ubuntu 14.04 LTS / 16.04 LTS:Linux kernel 漏洞 (USN-6739-1)

high Nessus 插件 ID 193594

简介

远程 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 中发现如下真实的错误问题。BUG:无法处理以下地址的页面错误: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_ops 是在 ipv4_mib_ops 之前注册,,因此当 net 命名空间被破坏时,会在调用 tcp_sk_exit_batch 之前调用 ipv4_mib_exit_net,这意味着 tcp_sk_ops 位于 pernet_list 列表中 ipv4_mib_ops 的前端。如果存在一些 inflight time-wait 定时器,则在 ipv4_mib_exit_net 之后 tw_timer_handler 中的 net->mib.net_statistics 会发生释放后使用。此缺陷并非提交 f2bf415cfed7(mib:将网络添加至 NET_ADD_STATS_BH)引入,因为 net_statistics 是全局变量,并非动态分配和释放。实际上,引入了该缺陷的是提交 61a7e26028b9(mib:将网络统计数据置于 struct net 上),因为它将网络统计数据置于 struct net 上,并在 net 命名空间被破坏时将其释放。将 init_ipv4_mibs() 移动到 tcp_init() 的前端以修复此缺陷,并将 pr_crit() 替换为 panic(),这是因为 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 数据包分段时可以发现下列 splat: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)的访问转换为堆栈中的越界读取。修复此问题时需更改用于 ovs_fragment() 中 IPv4 数据包的临时变量,类似于下面几行针对 IPv6 的操作。(CVE-2021-46955)

- 解决了 Linux 内核中的下列漏洞:ACPI:custom_method:修复潜在的释放后使用问题。在 cm_write() 中,到达函数的末尾时始终释放缓冲区。如果请求的计数小于 table.length,则会释放分配的缓冲区,但对 cm_write() 的后续调用仍将尝试访问。删除函数结尾的 unconditional 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 中,存在一种可能因争用条件而损坏内存的方法。这可能会导致本地权限提升,且无需其他执行权限。无需用户交互即可利用漏洞。产品:Android 版本:Android 内核 Android ID: A-237540956 引用:上游内核 (CVE-2022-20422)

- 在 Linux 内核中,分配的 con 和设置的 con->sock 之间存在数据争用缺陷。在 Linux 内核中,若访问 tipc 协议中 net/tipc/topsrv.c 的 con->sock->sk,会导致空指针取消引用。(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 在无阻塞原子提交和驱动程序卸载之间有争用条件期间存在释放后使用。(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 字节的内存,并且可能崩溃,这是缺少对 struct 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

插件详情

严重性: 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