Ubuntu 20.04 LTS / 22.04 LTS:Linux kernel (AWS) 漏洞 (USN-6725-2)

critical Nessus 插件 ID 193375

简介

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

描述

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

- 在 Linux 内核中,在通过 KSMBD 实施内核内 samba 服务器和 CIFS 的过程中,在 parse_lease_state 中发现越界 (OOB) 内存读取缺陷。当攻击者向 KSMBD 发送带有畸形负载的 CREATE 命令时,由于缺少对“parse_lease_state()”函数中的“NameOffset”的检查,“create_context”对象可以访问无效的内存。(CVE-2023-1194)

- 在 Linux 内核的高性能内核内 SMB 服务器 ksmbd 中发现一个缺陷。处理 SMB2_TREE_DISCONNECT 命令时存在特定缺陷。出现该问题的原因在于对对象执行操作时缺少正确的锁定。攻击者可利用此漏洞在内核环境中执行代码。(CVE-2023-32254)

- 在 Linux 内核的高性能内核内 SMB 服务器 ksmbd 中发现一个缺陷。处理 SMB2_LOGOFF 和 SMB2_CLOSE 命令时存在特定缺陷。出现该问题的原因在于对对象执行操作时缺少正确的锁定。攻击者可利用此漏洞在内核环境中执行代码。(CVE-2023-32258)

- 在 6.3.8 版本之前的 Linux 内核中发现了一个问题。在 deassemble_neg_contexts 中,ksmbd 中的 fs/smb/server/smb2pdu.c 存在整数下溢和越界读取。(CVE-2023-38427)

- 在 6.3.9 之前的 Linux 内核中发现一个问题。ksmbd 未验证 SMB 请求协议 ID,从而导致越界读取。(CVE-2023-38430)

- 在 6.3.8 之前的 Linux 内核中发现一个问题。ksmbd 中的 fs/smb/server/connection.c 未通过 pdu_size in ksmbd_conn_handler_loop 验证 NetBIOS 标题长度字段和 SMB 标题大小之间的关系,导致发生越界读取。(CVE-2023-38431)

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

- 在 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 内核中,以下漏洞已修复: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 内核中,以下漏洞已修复:ksmbd:修复 init_smb2_rsp_hdr() 中的越界问题 如果客户端发送 smb2 negotiate 请求,然后再发送 smb1 negotiate 请求,系统会为 smb1 negotiate 请求调用 init_smb2_rsp_hdr,因为 need_neg 已设置为 false。此补丁会忽略在 ->need_neg 被设置为 false 之后使用的 smb1 数据包。(CVE-2023-52441)

- 在 Linux 内核中,以下漏洞已修复:ksmbd:验证复合请求中的会话 ID 和树 ID smb2_get_ksmbd_tcon() 和 smb2_check_user_session() 中的“smb2_get_msg()”将始终返回复合请求中的第一个请求 smb2 标头。如果“SMB2_TREE_CONNECT_HE”是复合请求中的第一条命令,系统将返回 0,即已跳过树 ID 检查。此补丁使用 ksmbd_req_buf_next() 获取复合请求中的当前命令。(CVE-2023-52442)

- 在 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 验证中心 (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_dentry: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 中的内核空指针取消引用 据 Syzkaller 报告,访问 gfs2_rgrp_dump() 中的 rgd->rd_rgl 时发生空指针取消引用。在 read_rindex_entry() 中创建 rgd->rd_gl 失败时,会发生这种情况。在 gfs2_rgrp_dump() 中添加空指针检查,以防出现该问题。(CVE-2023-52448)

- 在 Linux 内核中,以下漏洞已修复:mtd:修复 ftl 通知程序造成的 gluebi 空指针取消引用 如果 ftl.ko 和 gluebi.ko 都已加载,尝试访问 gluebi_read() 中的 gluebi->desc' 时,ftl 的通知程序会触发空指针取消引用。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() 进程中执行,导致发生空指针取消引用。适用于 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 中发生的内核空指针取消引用 lr:nvmet_tcp_io_work+0x6ac/0x718 [nvmet_tcp] 调用跟踪:
process_one_work+0x174/0x3c8 worker_thread+0x2d0/0x3e8 kthread+0x104/0x110 如果 DATAL 与数据包大小不一致,则通过触发致命错误来修复此缺陷。此外,PDU 长度不应超过 MAXH2CDATA 参数,该参数已在 nvmet_tcp_handle_icreq() 中传递给主机。(CVE-2023-52454)

- 在 Linux 内核中,以下漏洞已修复:serial:imx:修复 tx 状态机死锁 串行端口用作 RS485 端口时,tx 状态机用于控制 RTS pin,以驱动 RS485 收发器 TX_EN pin。如果 TTY 端口在传输过程中关闭(例如,在 userland 应用程序崩溃期间),imx_uart_shutdown 会禁用接口并禁用“传输完成”中断。之后,imx_uart_stop_tx 会结束 TC 中断重新触发的不完整传输。此中断已禁用,因此 tx 状态机永不转换出 SEND。状态机现在处于死锁状态,并且 TX_EN 仍然很低,导致接口无法使用。imx_uart_stop_tx 现在会在重新触发退出之前检查是否有不完整的传输以及 TC 中断是否已启用。这可确保状态机被处理并正确设置为 WAIT_AFTER_SEND。(CVE-2023-52456)

- 在 Linux 内核中,以下漏洞已修复:serial:8250:omap:如果 pm_runtime_resume_and_get() 失败,则不跳过资源释放 从 .remove() 返回错误代码可使驱动程序核心发出“几乎无用”的错误消息:移除回调返回了非零值。系统会忽略此消息,然后仍然移除设备。因此,在这种情况下,所有未释放的资源都会被泄露。
跳过 serial8250_unregister_port() 可能会保留足够的 UART,从而触发释放后使用。因此,以更有用的错误消息替换返回的错误(以及“几乎无用”的错误消息)并继续清理。(CVE-2023-52457)

- 在 Linux 内核中,以下漏洞已修复:block:添加对分区长度是否需要与区块大小保持一致的检查 调用“添加分区”或“调整分区大小”之前,未检查长度是否与逻辑区块大小保持一致。如果磁盘的逻辑区块大小超过 512 字节,则分区大小可能不是逻辑区块大小的倍数。此外,读取最后一个扇区时,bio_truncate() 将调整 bio 大小,如果读取命令的大小小于逻辑区块大小,则会导致 IO 错误。如果支持完整性数据,这还将导致调用 bio_integrity_free 时发生空指针取消引用。(CVE-2023-52458)

- 在 Linux 内核中,以下漏洞已修复:bpf:修复对尝试损坏溢出指针的检查 当寄存器作为 1/2/4 字节寄存器在堆栈上溢出时,我们会设置 slot_type[BPF_REG_SIZE - 1](以及其下方可能发生更多少量溢出,具体取决于实际溢出大小)。因此,要检查某个堆栈槽是否发生了寄存器溢出,我们需要查询 slot_type[7],而非 slot_type[0]。为避免以后需要记住和仔细检查此项,只需使用 is_spilled_reg() 辅助函数即可。
(CVE-2023-52462)

- 在 Linux 内核中,以下漏洞已修复:efivarfs:如果不支持 SetVariable,在重新挂载时会强制执行 RO 如果固件不支持运行时的 SetVariable,我们绝不会为该函数分配回调。同时将 efivarfs 挂载为 RO,让任何人都无法调用。但是,我们从不会检查权限标记,除非有人将文件系统重新挂载为 RW。因此,这会导致崩溃,具体如下所示:$ mount -o remount,rw /sys/firmware/efi/efivars $ efi-updatevar -f PK.auth PK [303.279166] 无法处理虚拟地址 0000000000000000 的内核空指针取消引用 [303.280482] 内存中止信息:[ 303.280854] ESR = 0x0000000086000004 [ 303.281338] EC = 0x21:IABT(当前 EL),IL = 32 位 [ 303.282016] SET = 0,FnV = 0 [ 303.282414] EA = 0,S1PTW = 0 [ 303.282821] FSC = 0x04:
0 级转换错误 [ 303.283771] 用户 pgtable:4k 页面,48 位虚拟机,pgdp=000000004258c000 [303.284913] [0000000000000000] pgd=0000000000000000、p4d=0000000000000000 [ 303.286076] 内部错误:
Oops:0000000086000004 [#1] PREEMPT SMP [ 303.286936] 模块链接位置:qrtr tpm_tis tpm_tis_core crct10dif_ce arm_smccc_trng rng_core drm fuse ip_tables x_tables ipv6 [ 303.288586] CPU:1 PID:755 命令:
efi-updatevar 未感染 6.3.0-rc1-00108-gc7d0c4695c68 #1 [ 303.289748] 硬件名称:未知 未知产品/未知产品,BIOS 2023.04-00627-g88336918701d 04/01/2023 [ 303.291150] pstate:60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 303.292123] pc:0x0 [ 303.292443] lr:
efivar_set_variable_locked+0x74/0xec [ 303.293156] sp:ffff800008673c10 [ 303.293619] x29:
ffff800008673c10 x28:ffff0000037e8000 x27:0000000000000000 [ 303.294592] x26:0000000000000800 x25:
ffff000002467400 x24:0000000000000027 [ 303.295572] x23:ffffd49ea9832000 x22:ffff0000020c9800 x21:
ffff000002467000 [ 303.296566] x20:0000000000000001 x19:00000000000007fc x18:0000000000000000 [303.297531] x17:0000000000000000 x16:0000000000000000 x15:0000aaaac807ab54 [ 303.298495] x14:
ed37489f673633c0 x13:71c45c606de13f80 x12:47464259e219acf4 [ 303.299453] x11:ffff000002af7b01 x10:
0000000000000003 x9:0000000000000002 [ 303.300431] x8:0000000000000010 x7:ffffd49ea8973230 x6:
0000000000a85201 [ 303.301412] x5:0000000000000000 x4:ffff0000020c9800 x3:00000000000007fc [303.302370] x2:0000000000000027 x1:ffff000002467400 x0:ffff000002467000 [ 303.303341] 调用跟踪:[303.303679] 0x0 [ 303.303938] efivar_entry_set_get_size+0x98/0x16c [ 303.304585] efivarfs_file_write+0xd0/0x1a4 [ 303.305148] vfs_write+0xc4/0x2e4 [ 303.305601] ksys_write+0x70/0x104 [303.306073] __arm64_sys_write+0x1c/0x28 [ 303.306622] invoke_syscall+0x48/0x114 [ 303.307156] el0_svc_common.constprop.0+0x44/0xec [ 303.307803] do_el0_svc+0x38/0x98 [ 303.308268] el0_svc+0x2c/0x84 [303.308702] el0t_64_sync_handler+0xf4/0x120 [ 303.309293] el0t_64_sync+0x190/0x194 [ 303.309794] 代码:
???????? ???????? ???????? ???????? (????????) [ 303.310612] ---[结束跟踪 0000000000000000]--- 通过向 fs 操作添加 .reconfigure() 函数修复此漏洞,我们可以使用此函数检查请求的标记,并拒绝不是 RO 的任何内容(前提是固件在运行时未实施 SetVariable)。(CVE-2023-52463)

- 在 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 内核中,以下漏洞已修复:mfd:syscon:修复 of_syscon_register() 中的空指针取消引用 kasprintf() 会向动态分配内存返回一个指针,此指针在发生故障时会变为空。(CVE-2023-52467)

- 在 Linux 内核中,以下漏洞已修复:drivers/amd/pm:修复 kv_parse_power_table 中的释放后使用 如果 kzalloc 分配的 ps 为空,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 内核中,以下漏洞已修复:ksmbd:修复会话查找和到期之间的争用条件 线程 A + 线程 B ksmbd_session_lookup | smb2_sess_setup sess = xa_load | | | xa_erase(&conn->sessions, sess->id);| | ksmbd_session_destroy(sess) --> kfree(sess) | // UAF! | sess->last_active = jiffies | + 此补丁添加 rwsem 来修复 ksmbd_session_lookup 和 ksmbd_expire_session 之间的争用条件。(CVE-2023-52480)

- 在 Linux 内核中,以下漏洞已修复:binder:修复 mmput() 和 do_exit() 之间的争用 任务 A 需要调用 binder_update_page_range() 才能在任务 B 的远程地址空间中分配和插入页面。为此,任务 A 需要先通过 mmget_not_zero() 固定远程 mm。这可能与任务 B do_exit() 发生争用,并且任务 A 最终会发生 mmput() 引用计数减少。任务 B
-----------------+-------------------- mmget_not_zero() | | do_exit() | | exit_mm() | mmput() mmput() | | exit_mmap() | remove_vma() | fput() | 在这种情况下,任务 B 中的 ____fput() 工作会以 TWA_RESUME 的形式出现在任务 A 的队列中。因此,理论上,任务 A 会返回用户空间并执行清理工作。
然而,任务 A 却进入了休眠状态,等待任务 B 回复,但是任务 B 从未回复(处于无效状态)。这意味着 binder_deferred_release() 会遭到拦截,直到不相关的 binder 事件强制任务 A 返回用户空间。所有相关的无效通知也将延迟到那个时候。为了修复此问题,请使用 mmput_async()(而非任务 A)在相应的 mm->async_put_work WQ 中安排工作。(CVE-2023-52609)

- 在 Linux 内核中,以下漏洞已修复:net/sched: act_ct:修复 ooo frags 上的 skb 泄漏和崩溃 act_ct 在碎片整理之前添加了 skb->users。如果 frag 依序到达,最后一个 frag 的引用会在以下位置重置:非直接引用的 inet_frag_reasm_prepare skb_morph。然而,如果 frags 无序到达,没有人会 unref 最后的 frag,并且所有 frags 都会被泄露。情况会更糟糕,因为同时克隆和共享 skb 时,启动数据包捕获可导致崩溃[0]。通过在整理碎片之前移除 skb_get() 来解决问题。如果碎片整理失败或正在进行中,act_ct 会返回 TC_ACT_CONSUMED。[0]:[ 843.804823]------------[在此处剪切]------------ [843.809659] net/core/skbuff.c:2091 中的内核缺陷![843.814516] 无效的操作码:0000 [#1] PREEMPT SMP [843.819296] CPU:7 PID:0 命令:swapper/7 Kdump:已加载 已感染:GS 6.7.0-rc3 #2 [843.824107] 硬件名称:XFUSION 1288H V6/BC13MBSBD,BIOS 1.29 11/25/2022 [ 843.828953] RIP:0010:pskb_expand_head+0x2ac/0x300 [843.833805] 代码:8b 70 28 48 85 f6 74 82 48 83 c6 08 bf 01 00 00 00 e8 38 bd ff ff 8b 83 c0 00 00 00 48 03 83 c8 00 00 00 e9 62 ff ff ff 0f 0b <0f> 0b e8 8d d0 ff ff e9 b3 fd ff ff 81 7c 24 14 40 01 00 00 4c 89 [843.843698] RSP:0018:ffffc9000cce07c0 EFLAGS:00010202 [ 843.848524] RAX:0000000000000002 RBX:
ffff88811a211d00 RCX:0000000000000820 [843.853299] RDX:0000000000000640 RSI:0000000000000000 RDI:
ffff88811a211d00 [843.857974] RBP:ffff888127d39518 R08:00000000bee97314 R09:0000000000000000 [843.862584] R10:0000000000000000 R11:ffff8881109f0000 R12:0000000000000880 [843.867147] R13:
ffff888127d39580 R14:0000000000000640 R15:ffff888170f7b900 [843.871680] FS:0000000000000000(0000) GS:ffff889ffffc0000(0000) knlGS:0000000000000000 [ 843.876242] CS:0010 DS:0000 ES:0000 CR0:
0000000080050033 [ 843.880778] CR2:00007fa42affcfb8 CR3:000000011433a002 CR4:0000000000770ef0 [843.885336] DR0:0000000000000000 DR1:0000000000000000 DR2:0000000000000000 [ 843.889809] DR3:
0000000000000000 DR6:00000000fffe0ff0 DR7:0000000000000400 [843.894229] PKRU:55555554 [843.898539] 调用跟踪:[843.902772] <IRQ> [843.906922] ? __die_body+0x1e/0x60 [ 843.911032] ? die+0x3c/0x60 [843.915037] ? do_trap+0xe2/0x110 [843.918911] ? pskb_expand_head+0x2ac/0x300 [ 843.922687] ? do_error_trap+0x65/0x80 [ 843.926342] ? pskb_expand_head+0x2ac/0x300 [843.929905] ? exc_invalid_op+0x50/0x60 [843.933398] ? pskb_expand_head+0x2ac/0x300 [843.936835] ? asm_exc_invalid_op+0x1a/0x20 [843.940226] ? pskb_expand_head+0x2ac/0x300 [843.943580] inet_frag_reasm_prepare+0xd1/0x240 [843.946904] ip_defrag+0x5d4/0x870 [843.950132] nf_ct_handle_fragments+0xec/0x130 [nf_conntrack] [843.953334] tcf_ct_act+0x252/0xd90 [act_ct] [843.956473] ? tcf_mirred_act+0x516/0x5a0 [act_mirred] [843.959657] tcf_action_exec+0xa1/0x160 [843.962823] fl_classify+0x1db/0x1f0 [cls_flower] [843.966010] ? skb_clone+0x53/0xc0 [843.969173] tcf_classify+0x24d/0x420 [843.972333] tc_run+0x8f/0xf0 [843.975465]
__netif_receive_skb_core+0x67a/0x1080 [843.978634] ? dev_gro_receive+0x249/0x730 [843.981759]
__netif_receive_skb_list_core+0x12d/0x260 [843.984869] netif_receive_skb_list_internal+0x1cb/0x2f0 [843.987957] ? mlx5e_handle_rx_cqe_mpwrq_rep+0xfa/0x1a0 [mlx5_core] [843.991170] napi_complete_done+0x72/0x1a0 [843.994305] mlx5e_napi_poll+0x28c/0x6d0 [mlx5_core] [843.997501]
__napi_poll+0x25/0x1b0 [844.000627] net_rx_action+0x256/0x330 [844.003705] __do_softirq+0xb3/0x29b [844.006718] irq_exit_rcu+0x9e/0xc0 [844.009672] common_interrupt+0x86/0xa0 [844.012537] </IRQ> [844.015285] <TASK> [844.017937] asm_common_interrupt+0x26/0x40 [844.020591] RIP:
0010:acpi_safe_halt+0x1b/0x20 [844.023247] 代码:ff 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 65 48 8b 04 25 00 18 03 00 48 8b 00 a8 08 75 0c 66 90 0f 00 2d 81 d0 44 00 fb ---truncated--- (CVE-2023-52610)

- 在 Linux 内核中,以下漏洞已修复:crypto:scomp - 修复 req->dst 缓冲区溢出 从 scomp_scratch->dst 复制 req->dst 缓冲区之前,应检查其大小,以免出现 req->dst 缓冲区溢出问题。(CVE-2023-52612)

- 在 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)

- 在 Linux 内核的蓝牙设备驱动程序的 {min,max}_key_size_set() 函数中发现争用条件漏洞。这可导致空指针取消引用问题,进而可能导致内核错误或拒绝服务问题。(CVE-2024-24860)

- 在 Linux 内核中,以下漏洞已修复:mlxsw:spectrum_acl_tcam:修复堆栈损坏 首次将 tc 筛选条件添加到 net 设备时,相应的本地端口会绑定到设备中的 ACL 组。该组包含 ACL 的列表。反过来,每个 ACL 都指向存储筛选条件的不同 TCAM 区域。在转发期间,系统会按顺序评估 ACL,直到找到匹配项。之所以将筛选条件放置在不同区域中,其中一项原因在于,只有以优先级递减及交替顺序添加筛选条件,两个连续的筛选条件才永远不会因其密钥用法而适合放入同一区域中。在 Spectrum-2 和更新的 ASIC 中,固件开始报告一个组中的最大 ACL 数量是否超过 16,但是配置 ACL 组 (PAGT) 的寄存器的布局未被更新以解决该问题。因此,如果出现某个组中需要 16 个以上 ACL 的极少情况,可能会造成堆栈损坏 [1]。如需解决此问题,请将最大 ACL 组大小限制为固件报告的大小与 PAGT 寄存器适合的最大 ACL 数量之间的最小值。添加测试,以确保计算机在遇到此情况时不会崩溃。[1] 内核错误 - 未同步:stack-protector:内核堆栈在以下位置发生损坏:mlxsw_sp_acl_tcam_group_update+0x116/0x120 [...] dump_stack_lvl+0x36/0x50 panic+0x305/0x330 __stack_chk_fail+0x15/0x20 mlxsw_sp_acl_tcam_group_update+0x116/0x120 mlxsw_sp_acl_tcam_group_region_attach+0x69/0x110 mlxsw_sp_acl_tcam_vchunk_get+0x492/0xa20 mlxsw_sp_acl_tcam_ventry_add+0x25/0xe0 mlxsw_sp_acl_rule_add+0x47/0x240 mlxsw_sp_flower_replace+0x1a9/0x1d0 tc_setup_cb_add+0xdc/0x1c0 fl_hw_replace_filter+0x146/0x1f0 fl_change+0xc17/0x1360 tc_new_tfilter+0x472/0xb90 rtnetlink_rcv_msg+0x313/0x3b0 netlink_rcv_skb+0x58/0x100 netlink_unicast+0x244/0x390 netlink_sendmsg+0x1e4/0x440 ____sys_sendmsg+0x164/0x260 ___sys_sendmsg+0x9a/0xe0 __sys_sendmsg+0x7a/0xc0 do_syscall_64+0x40/0xe0 entry_SYSCALL_64_after_hwframe+0x63/0x6b (CVE-2024-26586)

- 在 Linux 内核中,以下漏洞已修复:bpf:拒绝 PTR_TO_FLOW_KEYS 上的变量偏移 alu 对于 PTR_TO_FLOW_KEYS,check_flow_keys_access() 仅使用修复的 off 进行验证。
但是,未针对此 ptr 种类禁止变量偏移 ptr alu。因此系统不会检查变量偏移。已接受以下 prog:func#0 @0 0:R1=ctx() R10=fp0 0:(bf) r6 = r1 ; R1=ctx() R6_w=ctx() 1:(79) r7 = *(u64 *)(r6 +144) ; R6_w=ctx() R7_w=flow_keys() 2:(b7) r8 = 1024 ; R8_w=1024 3:
(37) r8 /= 1 ; R8_w=scalar() 4:(57) r8 &= 1024 ; R8_w=scalar(smin=smin32=0, smax=umax=smax32=umax32=1024,var_off=(0x0; 0x400)) 5:(0f) r7 += r8 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r8 stack= before 4:(57) r8 &= 1024 mark_precise:
frame0: regs=r8 stack= before 3:(37) r8 /= 1 mark_precise: frame0: regs=r8 stack= before 2:(b7) r8 = 1024 6: R7_w=flow_keys(smin=smin32=0,smax=umax=smax32=umax32=1024,var_off =(0x0; 0x400)) R8_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=1024, var_off=(0x0; 0x400)) 6:(79) r0 = *(u64 *)(r7 +0) ; R0_w=scalar() 7:(95) exit 此 prog 将 flow_keys 加载到 r7,并将变量偏移 r8 增加到 r7,最终导致越界访问:缺陷:无法处理地址页面错误:ffffc90014c80038 [...] 调用跟踪:<TASK> bpf_dispatcher_nop_func include/linux/bpf.h:1231 [inline] __bpf_prog_run include/linux/filter.h:651 [inline] bpf_prog_run include/linux/filter.h:658 [inline] bpf_prog_run_pin_on_cpu include/linux/filter.h:675 [inline] bpf_flow_dissect+0x15f/0x350 net/core/flow_dissector.c:991 bpf_prog_test_run_flow_dissector+0x39d/0x620 net/bpf/test_run.c:1359 bpf_prog_test_run kernel/bpf/syscall.c:4107 [inline] __sys_bpf+0xf8f/0x4560 kernel/bpf/syscall.c:5475
__do_sys_bpf kernel/bpf/syscall.c:5561 [inline] __se_sys_bpf kernel/bpf/syscall.c:5559 [inline]
__x64_sys_bpf+0x73/0xb0 kernel/bpf/syscall.c:5559 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0x3f/0x110 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b 通过在 flow_keys 上拒绝使用变量偏移的 ptr alu 来修复此漏洞。应用补丁,拒绝运行“禁止在 flow_keys 上使用 R7 指针算法”的程序。(CVE-2024-26589)

- 在 Linux 内核中,以下漏洞已修复:bpf:修复 bpf_tracing_prog_attach 中的重新附加分支 由于缺少 attach_btf,以下情况会造成崩溃:1) 加载 rawtp 程序 2) 加载将 rawtp 作为 target_fd 的 fentry 程序 3) 利用 target_fd = 0 为 fentry 程序创建跟踪链接 4) 重复 3 最后,我们有:- prog->aux->dst_trampoline == NULL - tgt_prog == NULL(因为我们没有为 link_create 提供 target_fd)- prog->aux->attach_btf == NULL(程序使用 attach_prog_fd=X 加载而来)- 已为 tgt_prog 加载程序,但我们无法找出具体是哪一个 缺陷:内核空指针取消引用,地址:0000000000000058 调用跟踪:<TASK> ? __die+0x20/0x70 ? page_fault_oops+0x15b/0x430 ? fixup_exception+0x22/0x330 ? exc_page_fault+0x6f/0x170 ? asm_exc_page_fault+0x22/0x30 ? bpf_tracing_prog_attach+0x279/0x560 ? btf_obj_id+0x5/0x10 bpf_tracing_prog_attach+0x439/0x560 __sys_bpf+0x1cf4/0x2de0 __x64_sys_bpf+0x1c/0x30 do_syscall_64+0x41/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 在此情况下返回 -EINVAL。
(CVE-2024-26591)

- 在 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 内核中,以下漏洞已修复:KVM:arm64:vgic-its:避免 LPI 转换缓存中出现潜在 UAF,即如果 LPI 转换缓存与使缓存无效的操作(例如 DISCARD ITS 命令)之间存在争用,会出现潜在的 UAF。问题的根源在于 vgic_its_check_cache() 在删除可将引用计数变更序列化的锁定之前未提升 vgic_irq 上的引用计数。使 vgic_its_check_cache() 增加返回的 vgic_irq 的引用计数,并在将中断排入队列后添加相应的减少量。(CVE-2024-26598)

- 在 Linux 内核中,以下漏洞已修复:ipv6:mcast:修复了 ipv6_mc_down/mld_ifc_work 中的数据争用问题 idev->mc_ifc_count 可在未正确锁定的情况下被改写。最初由 syzbot [1] 发现。为解决此问题,请相应地利用 mutex_lock() 和 mutex_unlock() 封装对 mld_ifc_stop_work()(以及为取得更佳效果而使用的 mld_gq_stop_work())的调用,因为根据这些函数的声明,只应利用 mc_lock 进行调用。[1] 缺陷:KCSAN:ipv6_mc_down/mld_ifc_work 中的数据争用 根据任务 3771 的要求,在 cpu 0 上写入 1 字节的 0xffff88813a80c832:mld_ifc_stop_work net/ipv6/mcast.c:1080 [inline] ipv6_mc_down+0x10a/0x280 net/ipv6/mcast.c:2725 addrconf_ifdown+0xe32/0xf10 net/ipv6/addrconf.c:3949 addrconf_notify+0x310/0x980 notifier_call_chain kernel/notifier.c:93 [inline] raw_notifier_call_chain+0x6b/0x1c0 kernel/notifier.c:461 __dev_notify_flags+0x205/0x3d0 dev_change_flags+0xab/0xd0 net/core/dev.c:8685 do_setlink+0x9f6/0x2430 net/core/rtnetlink.c:2916 rtnl_group_changelink net/core/rtnetlink.c:3458 [inline] __rtnl_newlink net/core/rtnetlink.c:3717 [inline] rtnl_newlink+0xbb3/0x1670 net/core/rtnetlink.c:3754 rtnetlink_rcv_msg+0x807/0x8c0 net/core/rtnetlink.c:6558 netlink_rcv_skb+0x126/0x220 net/netlink/af_netlink.c:2545 rtnetlink_rcv+0x1c/0x20 net/core/rtnetlink.c:6576 netlink_unicast_kernel net/netlink/af_netlink.c:1342 [inline] netlink_unicast+0x589/0x650 net/netlink/af_netlink.c:1368 netlink_sendmsg+0x66e/0x770 net/netlink/af_netlink.c:1910 ... 根据任务 22 的要求,在 cpu 1 上写入 1 字节的 0xffff88813a80c832:
mld_ifc_work+0x54c/0x7b0 net/ipv6/mcast.c:2653 process_one_work kernel/workqueue.c:2627 [inline] process_scheduled_works+0x5b8/0xa30 kernel/workqueue.c:2700 worker_thread+0x525/0x730 kernel/workqueue.c:2781 ... (CVE-2024-26631)

- 在 Linux 内核中,以下漏洞已修复:ip6_tunnel:修复 ip6_tnl_parse_tlv_enc_lim() 中的 NEXTHDR_FRAGMENT 处理 syzbot 指出 [1],NEXTHDR_FRAGMENT 处理已中断。
只有提取足够的字节到 skb->head 才能读取 frag_off。目前,我们可能会访问垃圾邮件。[1] 缺陷: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 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] 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 [inline] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [inline] 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 [inline] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [inline] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [inline] 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 [inline] __sock_sendmsg net/socket.c:745 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [inline] __do_sys_sendmsg net/socket.c:2676 [inline] __se_sys_sendmsg net/socket.c:2674 [inline] __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674 do_syscall_x64 arch/x86/entry/common.c:52 [inline] 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 [inline] __kmem_cache_alloc_node+0x5c9/0x970 mm/slub.c:3517
__do_kmalloc_node mm/slab_common.c:1006 [inline] __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 [inline] pskb_may_pull include/linux/skbuff.h:2681 [inline] ip6_tnl_parse_tlv_enc_lim+0x901/0xbb0 net/ipv6/ip6_tunnel.c:408 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 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] 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 [inline] neigh_connected_output+0x569/0x660 net/core/neighbour.c:1592 neigh_output include/net/neighbour.h:542 [inline] 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 [inline] ip6_output+0x323/0x610 net/ipv6/ip6_output.c:243 dst_output include/net/dst.h:451 [inline] ip6_local_out+0xe9/0x140 net/ipv6/output_core.c:155 ip6_send_skb net/ipv6/ip6_output.c:1952 [inline] 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 [inline] __sock_sendmsg net/socket.c:745 [inline] ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
__sys_sendmsg net/socket.c:2667 [inline] __do_sys_sendms ---truncated--- (CVE-2024-26633)

- 当路由器遇到太大而无法传输到下一跃点的 IPv6 数据包时,它将向发送方返回“ICMP6 数据包过大 (PTB)”消息。发送方会缓存更新后的最大传输单元 (MTU),以便了解在随后路由到同一主机时不要超过此值。(CVE-2023-52340)

请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。

解决方案

更新受影响的 kernel 程序包。

另见

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

插件详情

严重性: Critical

ID: 193375

文件名: ubuntu_USN-6725-2.nasl

版本: 1.0

类型: local

代理: unix

发布时间: 2024/4/17

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

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

风险信息

VPR

风险因素: High

分数: 7.4

CVSS v2

风险因素: Critical

基本分数: 10

时间分数: 7.4

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

CVSS 分数来源: CVE-2023-38427

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 8.5

矢量: CVSS:3.0/AV:N/AC:L/PR:N/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, cpe:/o:canonical:ubuntu_linux:22.04:-:lts, p-cpe:/a:canonical:ubuntu_linux:linux-image-5.15.0-1057-aws

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

易利用性: No known exploits are available

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

漏洞发布日期: 2023/7/10

参考资料信息

CVE: CVE-2023-1194, CVE-2023-32254, CVE-2023-32258, CVE-2023-38427, CVE-2023-38430, CVE-2023-38431, CVE-2023-3867, CVE-2023-46838, CVE-2023-52340, CVE-2023-52429, CVE-2023-52436, CVE-2023-52438, CVE-2023-52439, CVE-2023-52441, CVE-2023-52442, CVE-2023-52443, CVE-2023-52444, CVE-2023-52445, CVE-2023-52448, CVE-2023-52449, CVE-2023-52451, CVE-2023-52454, CVE-2023-52456, CVE-2023-52457, CVE-2023-52458, CVE-2023-52462, CVE-2023-52463, CVE-2023-52464, CVE-2023-52467, CVE-2023-52469, CVE-2023-52470, CVE-2023-52480, CVE-2023-52609, CVE-2023-52610, CVE-2023-52612, CVE-2024-22705, CVE-2024-23850, CVE-2024-23851, CVE-2024-24860, CVE-2024-26586, CVE-2024-26589, CVE-2024-26591, CVE-2024-26597, CVE-2024-26598, CVE-2024-26631, CVE-2024-26633

USN: 6725-2