Ubuntu 22.04 LTS / 23.10:Linux kernel 漏洞 (USN-6724-1)

high Nessus 插件 ID 193085

简介

远程 Ubuntu 主机缺少一个或多个安全更新。

描述

远程 Ubuntu 22.04 LTS / 23.10 主机上安装的程序包受到 USN-6724-1 公告中提及的多个漏洞的影响。

- Xen 的虚拟网络协议中的传输请求可由多个部分组成。尽管这些部分在实际上并不实用,但除初始部分外,它们中的任何一个长度都可能为零,即完全不携带任何数据。除了要传输的数据的某个初始部分,这些部分还会直接转换为 Linux 所称的 SKB 片段。当此类转换后的请求部分对于特定 SKB 而言长度均为零时,可导致在核心网络代码中出现空指针取消引用漏洞。(CVE-2023-46838)

- 在 6.6.5 及之前的 Linux 内核中,由于 info->pad0 未被初始化,drivers/accel/habanalabs/common/habanalabs_ioctl.c 中的 sec_attest_info 可导致信息泄露至用户空间。(CVE-2023-50431)

- 在 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 内核中,以下漏洞已得到解决:smb:客户端:修复了 smb2_parse_contexts() 中的潜在 OOB,即在取消引用 smb2_parse_contexts() 中的创建上下文之前验证偏移和长度。这修复了从服务器访问无效创建环境时出现的以下 oops:错误:
无法处理地址页面错误:ffff8881178d8cc3 #PF:内核模式下的 supervisor 读取访问 #PF:
error_code(0x0000) - 不存在页面 PGD 4a01067 P4D 4a01067 PUD 0 Oops:0000 [#1] PREEMPT SMP NOPTI CPU:
3 PID:1736 Comm:mount.cifs Not tainted 6.7.0-rc4 #1 硬件名称:QEMU Standard PC (Q35 + ICH9, 2009)、BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014 RIP: 0010:smb2_parse_contexts+0xa0/0x3a0 [cifs] 代码:f8 10 75 13 48 b8 93 ad 25 50 9c b4 11 e7 49 39 06 0f 84 d2 00 00 00 8b 45 00 85 c0 74 61 41 29 c5 48 01 c5 41 83 fd 0f 76 55 <0f> b7 7d 04 0f b7 45 06 4c 8d 74 3d 00 66 83 f8 04 75 bc ba 04 00 RSP:
0018:ffffc900007939e0 EFLAGS:00010216 RAX:ffffc90000793c78 RBX:ffff8880180cc000 RCX:ffffc90000793c90 RDX:ffffc90000793cc0 RSI:ffff8880178d8cc0 RDI:ffff8880180cc000 RBP:ffff8881178d8cbf R08:
ffffc90000793c22 R09:0000000000000000 R10:ffff8880180cc000 R11:0000000000000024 R12:0000000000000000 R13:0000000000000020 R14:0000000000000000 R15:ffffc90000793c22 FS:00007f873753cbc0(0000) GS:ffff88806bc00000(0000) knlGS:0000000000000000 CS:0010 DS:0000 ES:0000 CR0:0000000080050033 CR2:
ffff8881178d8cc3 CR3:00000000181ca000 CR4:0000000000750ef0 PKRU:55555554 调用跟踪:<TASK> ?
__die+0x23/0x70 ? page_fault_oops+0x181/0x480 ? search_module_extables+0x19/0x60 ? srso_alias_return_thunk+0x5/0xfbef5 ? exc_page_fault+0x1b6/0x1c0 ? asm_exc_page_fault+0x26/0x30 ? smb2_parse_contexts+0xa0/0x3a0 [cifs] SMB2_open+0x38d/0x5f0 [cifs] ? smb2_is_path_accessible+0x138/0x260 [cifs] smb2_is_path_accessible+0x138/0x260 [cifs] cifs_is_path_remote+0x8d/0x230 [cifs] cifs_mount+0x7e/0x350 [cifs] cifs_smb3_do_mount+0x128/0x780 [cifs] smb3_get_tree+0xd9/0x290 [cifs] vfs_get_tree+0x2c/0x100 ? capable+0x37/0x70 path_mount+0x2d7/0xb80 ? srso_alias_return_thunk+0x5/0xfbef5 ?
_raw_spin_unlock_irqrestore+0x44/0x60 __x64_sys_mount+0x11a/0x150 do_syscall_64+0x47/0xf0 entry_SYSCALL_64_after_hwframe+0x6f/0x77 RIP:0033:0x7f8737657b1e (CVE-2023-52434)

- 在 Linux 内核中,以下漏洞已得到解决:net:防止 skb_segment() 中的 mss 溢出导致 syzbot 能够再次造成 skb_segment() 中的内核崩溃 [1] GSO_BY_FRAGS 是禁止的值,但遗憾的是,skb_segment() 中的以下计算可以相当容易地达到该值:
mss = mss * partial_segs; 65535 = 3 * 5 * 17 * 257,因此有许多 mss 初始值可导致不良最终结果。确保限制分段,使新的 mss 值小于 GSO_BY_FRAGS。[1] 一般性保护错误,可能针对非规范地址 0xdffffc000000000e: 0000 [#1] PREEMPT SMP KASAN KASAN:null-ptr-deref in range [0x0000000000000070-0x0000000000000077] CPU:1 PID:5079 Comm:syz-executor993 Not tainted 6.7.0-rc4-syzkaller-00141-g1ae4cd3cbdd0 #0 硬件名称:Google Google Compute Engine/Google Compute Engine、BIOS Google 11/10/2023 RIP:0010:skb_segment+0x181d/0x3f30 net/core/skbuff.c:4551 代码:83 e3 02 e9 fb ed ff ff e8 90 68 1c f9 48 8b 84 24 f8 00 00 00 48 8d 78 70 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 08 3c 03 0f 8e 8a 21 00 00 48 8b 84 24 f8 00 RSP:0018:ffffc900043473d0 EFLAGS:00010202 RAX:dffffc0000000000 RBX:0000000000010046 RCX:
ffffffff886b1597 RDX:000000000000000e RSI:ffffffff886b2520 RDI:0000000000000070 RBP:ffffc90004347578 R08:0000000000000005 R09:000000000000ffff R10:000000000000ffff R11:0000000000000002 R12:
ffff888063202ac0 R13:0000000000010000 R14:000000000000ffff R15:0000000000000046 FS:
0000555556e7e380(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000 CS:0010 DS:0000 ES:0000 CR0:
0000000080050033 CR2:0000000020010000 CR3:0000000027ee2000 CR4:00000000003506f0 DR0:0000000000000000 DR1:0000000000000000 DR2:0000000000000000 DR3:0000000000000000 DR6:00000000fffe0ff0 DR7:
0000000000000400 调用跟踪:<TASK> udp6_ufo_fragment+0xa0e/0xd00 net/ipv6/udp_offload.c:109 ipv6_gso_segment+0x534/0x17e0 net/ipv6/ip6_offload.c:120 skb_mac_gso_segment+0x290/0x610 net/core/gso.c:53
__skb_gso_segment+0x339/0x710 net/core/gso.c:124 skb_gso_segment include/net/gso.h:83 [内联] validate_xmit_skb+0x36c/0xeb0 net/core/dev.c:3626 __dev_queue_xmit+0x6f3/0x3d60 net/core/dev.c:4338 dev_queue_xmit include/linux/netdevice.h:3134 [内联] packet_xmit+0x257/0x380 net/packet/af_packet.c:276 packet_snd net/packet/af_packet.c:3087 [内联] packet_sendmsg+0x24c6/0x5220 net/packet/af_packet.c:3119 sock_sendmsg_nosec net/socket.c:730 [内联] __sock_sendmsg+0xd5/0x180 net/socket.c:745
__sys_sendto+0x255/0x340 net/socket.c:2190 __do_sys_sendto net/socket.c:2202 [内联] __se_sys_sendto net/socket.c:2198 [内联] __x64_sys_sendto+0xe0/0x1b0 net/socket.c:2198 do_syscall_x64 arch/x86/entry/common.c:52 [内联] do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b RIP:0033:0x7f8692032aa9 代码:28 00 00 00 75 05 48 83 c4 28 c3 e8 d1 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:00007fff8d685418 EFLAGS:00000246 ORIG_RAX:000000000000002c RAX:ffffffffffffffda RBX:0000000000000003 RCX:00007f8692032aa9 RDX:
0000000000010048 RSI:00000000200000c0 RDI:0000000000000003 RBP:00000000000f4240 R08:0000000020000540 R09:0000000000000014 R10:0000000000000000 R11:0000000000000246 R12:00007fff8d685480 R13:
0000000000000001 R14:00007fff8d685480 R15:0000000000000003 </TASK> 链接的模块:---[ end trace 0000000000000000 ]--- RIP:0010:skb_segment+0x181d/0x3f30 net/core/skbuff.c:4551 代码:83 e3 02 e9 fb ed ff ff e8 90 68 1c f9 48 8b 84 24 f8 00 00 00 48 8d 78 70 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 08 3c 03 0f 8e 8a 21 00 00 48 8b 84 24 f8 00 RSP:0018:ffffc900043473d0 EFLAGS:
00010202 RAX:dffffc0000000000 RBX:0000000000010046 RCX:ffffffff886b1597 RDX:000000000000000e RSI:
ffffffff886b2520 RDI:0000000000000070 RBP:ffffc90004347578 R0 ---truncated--- (CVE-2023-52435)

- 在 Linux 内核中,以下漏洞已修复:f2fs:明确使 xattr 列表以 null 结尾 设置 xattr 时,明确使 xattr 列表以 null 结尾。这使得未使用的 xattr 空间始终为零这一经不起推敲的假设无效。(CVE-2023-52436)

- 在 Linux 内核中,以下漏洞已修复:binder:修复 shinker 回调中的释放后使用 在 shrinker 回调期间使用 mmap 读取锁定意味着使用 alloc->vma 指针不安全,因为它会与 munmap() 发生争用。自提交 dd2283f2605e(mm:mmap:munmap 中含有读取 mmap_sem 的 zap 页面)起,mmap 锁定在 vma 被隔离之后发生降级。通过 shrinker 的调试 sysfs,我能够手动添加一些延迟并触发页面回收来重现此问题。以下 KASAN 报告证实了 UAF:
================================================== ================ 缺陷:KASAN:zap_page_range_single+0x470/0x4b8 中存在 slab-use-after-free-with 读取大小为 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 内核 fs/smb/client/smb2ops.c 的 smb2_dump_detail 中发现越界读取漏洞。利用此问题,本地攻击者可造成系统崩溃或泄露内核内部信息。
(CVE-2023-6610)

- 在 Linux 内核 6.6.10 之前版本的 ksmbd 中发现一个问题。因为 Name 数据和 CreateContexts 数据之间的关系处理不正确,fs/smb/server/smb2misc.c 中的 smb2_get_data_area_len 可造成 smb_strndup_from_utf16 越界访问。(CVE-2024-22705)

- 在 6.7.1 及以下版本的 Linux 内核中,fs/btrfs/disk-io.c 的 btrfs_get_root_ref 中可能存在断言失败和崩溃,这是因为创建子卷时,插入其根项目后过早读取子卷所致。(CVE-2024-23850)

- 在 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-6724-1

插件详情

严重性: High

ID: 193085

文件名: ubuntu_USN-6724-1.nasl

版本: 1.0

类型: local

代理: unix

发布时间: 2024/4/9

最近更新时间: 2024/4/9

支持的传感器: Agentless Assessment, Frictionless Assessment Agent, Frictionless Assessment AWS, Frictionless Assessment Azure, Nessus Agent, Nessus

风险信息

VPR

风险因素: Medium

分数: 6.7

CVSS v2

风险因素: High

基本分数: 7.7

时间分数: 6

矢量: CVSS2#AV:A/AC:L/Au:S/C:C/I:C/A:C

CVSS 分数来源: CVE-2023-52434

CVSS v3

风险因素: High

基本分数: 8

时间分数: 7.2

矢量: CVSS:3.0/AV:A/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:22.04:-:lts, cpe:/o:canonical:ubuntu_linux:23.10, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1011-starfive, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1013-laptop, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1017-aws, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1017-gcp, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1018-azure, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1018-azure-fde, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1019-oem, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1020-oracle, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-1020-oracle-64k, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-27-generic, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-27-generic-64k, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-27-lowlatency, p-cpe:/a:canonical:ubuntu_linux:linux-image-6.5.0-27-lowlatency-64k

必需的 KB 项: Host/cpu, Host/Ubuntu, Host/Ubuntu/release, Host/Debian/dpkg-l

可利用: true

易利用性: Exploits are available

补丁发布日期: 2024/4/9

漏洞发布日期: 2023/12/8

参考资料信息

CVE: CVE-2023-46838, CVE-2023-50431, CVE-2023-52429, CVE-2023-52434, CVE-2023-52435, CVE-2023-52436, CVE-2023-52438, CVE-2023-52439, CVE-2023-6610, CVE-2024-22705, CVE-2024-23850, CVE-2024-23851

USN: 6724-1