Ubuntu 16.04 LTS:Linux 内核 (GCP) 漏洞 (USN-6777-3)

high Nessus 插件 ID 197600

简介

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

描述

远程 Ubuntu 16.04 LTS 主机上安装的一个程序包受到 USN-6777-3 公告中提及的多个漏洞影响。

- 在 Linux 内核中,以下漏洞已修复:nbd:修复 flush_workqueue 中的空指针 首先打开 /dev/nbdX,然后 config_refs 将为 1 且 nbd_device 中的指针仍然为空。断开 /dev/nbdX 的连接,然后引用空 recv_workq。nbd_genl_disconnect 中的 config_refs 保护无用。[ 656.366194] 错误:内核空指针取消引用,地址:
0000000000000020 [ 656.368943] #PF:内核模式中的 Supervisor 写入访问 [ 656.369844] #PF:
error_code(0x0002) - not-present 页面 [ 656.370717] PGD 10cc87067 P4D 10cc87067 PUD 1074b4067 PMD 0 [656.371693] Oops:0002 [#1] SMP [ 656.372242] CPU:5 PID:7977 命令:nbd-client 未感染 5.11.0-rc5-00040-g76c057c84d28 #1 [ 656.373661] 硬件名称:QEMU Standard PC(i440FX + PIIX,1996),BIOS ?-20190727_073836-buildvm-ppc64le-16.ppc.fedoraproject.org-3.fc31 04/01/2014 [ 656.375904] RIP:
0010:mutex_lock+0x29/0x60 [ 656.376627] 代码:00 0f 1f 44 00 00 55 48 89 fd 48 83 05 6f d7 fe 08 01 e8 7a c3 ff ff 48 83 05 6a d7 fe 08 01 31 c0 65 48 8b 14 25 00 6d 01 00 <f0> 48 0f b1 55 d [ 656.378934] RSP:
0018:ffffc900005eb9b0 EFLAGS:00010246 [ 656.379350] RAX:0000000000000000 RBX:0000000000000000 RCX:
0000000000000000 [ 656.379915] RDX:ffff888104cf2600 RSI:ffffffffaae8f452 RDI:0000000000000020 [656.380473] RBP:0000000000000020 R08:0000000000000000 R09:ffff88813bd6b318 [ 656.381039] R10:
00000000000000c7 R11:fefefefefefefeff R12:ffff888102710b40 [ 656.381599] R13:ffffc900005eb9e0 R14:
ffffffffb2930680 R15:ffff88810770ef00 [ 656.382166] FS:00007fdf117ebb40(0000) GS:ffff88813bd40000(0000) knlGS:0000000000000000 [ 656.382806] CS:0010 DS:0000 ES:0000 CR0:0000000080050033 [ 656.383261] CR2:
0000000000000020 CR3:0000000100c84000 CR4:00000000000006e0 [ 656.383819] DR0:0000000000000000 DR1:
0000000000000000 DR2:0000000000000000 [ 656.384370] DR3:0000000000000000 DR6:00000000fffe0ff0 DR7:
0000000000000400 [ 656.384927] 调用跟踪[ 656.385111] flush_workqueue+0x92/0x6c0 [ 656.385395] nbd_disconnect_and_put+0x81/0xd0 [ 656.385716] nbd_genl_disconnect+0x125/0x2a0 [ 656.386034] genl_family_rcv_msg_doit.isra.0+0x102/0x1b0 [ 656.386422] genl_rcv_msg+0xfc/0x2b0 [ 656.386685] ? nbd_ioctl+0x490/0x490 [ 656.386954] ? genl_family_rcv_msg_doit.isra.0+0x1b0/0x1b0 [ 656.387354] netlink_rcv_skb+0x62/0x180 [ 656.387638] genl_rcv+0x34/0x60 [ 656.387874] netlink_unicast+0x26d/0x590 [656.388162] netlink_sendmsg+0x398/0x6c0 [ 656.388451] ? netlink_rcv_skb+0x180/0x180 [ 656.388750]
____sys_sendmsg+0x1da/0x320 [ 656.389038] ? ____sys_recvmsg+0x130/0x220 [ 656.389334]
___sys_sendmsg+0x8e/0xf0 [ 656.389605] ? ___sys_recvmsg+0xa2/0xf0 [ 656.389889] ? handle_mm_fault+0x1671/0x21d0 [ 656.390201] __sys_sendmsg+0x6d/0xe0 [ 656.390464]
__x64_sys_sendmsg+0x23/0x30 [ 656.390751] do_syscall_64+0x45/0x70 [ 656.391017] entry_SYSCALL_64_after_hwframe+0x44/0xa9 要修复此漏洞,只需将 if (nbd->recv_workq) 添加到 nbd_disconnect_and_put() 即可。(CVE-2021-46981)

- 在 6.5.10 及之前版本的 Linux 内核中,brcm80211 组件的设备拔出(通过热插拔来断开 USB 的连接)代码中存在 brcmf_cfg80211_detach 释放后使用漏洞。拥有本地访问权限、物理位置邻近的攻击者可在真实场景中利用此漏洞。这与 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 中的 brcmf_cfg80211_escan_timeout_worker 相关。
(CVE-2023-47233)

- 在 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 内核中,以下漏洞已修复:net:nfc:llcp:修改设备列表时添加锁定 修改设备列表时,需要保持其关联的锁定,否则列表可能会损坏,正如 syzbot 所发现的那样。(CVE-2023-52524)

- 在 Linux 内核中,以下漏洞已修复:wifi:mac80211:修复潜在的密钥释放后使用 当 ieee80211_gtk_rekey_add() 调用 ieee80211_key_link(),但因 KRACK 保护(相同密钥重新安装)而返回 0 时,ieee80211_gtk_rekey_add( ) 仍将返回密钥指针,造成潜在的释放后使用问题。通常不会发生这种情况,因为它只在 WoWLAN 密钥更新卸载有专属 KRACK 保护的情况下由 iwlwifi 调用,但更好的修复方法是,返回错误代码并仅将其在 cfg80211 边界上转换为成功,从而将错误留给 ieee80211_gtk_rekey_add() 的不良调用程序。(CVE-2023-52530)

- 在 Linux 内核中,以下漏洞已修复:nilfs2:修复 nilfs_gccache_submit_read_data() 中可能存在的释放后使用问题 在 nilfs_gccache_submit_read_data() 中,如果调用 nilfs_dat_translate() 失败,系统会调用 brelse(bh) 来删除 bh 的引用计数。如果引用计数为 0 且其所有者页面被解锁,bh 则可能被释放。但是,系统会取消引用 bh->b_page,以将页面放在该页面之后,这可能导致释放后使用错误。此补丁在解锁并放置页面之后移动释放操作。注意:由于有问题的函数仅在 GC 中调用,并且得益于与当前的 userland 工具相结合,使用 DAT 的地址转换不会在该函数中发生,因此造成此问题的代码路径将不会被执行。但是,攻击者可以通过故意修改 userland GC 库或直接调用 GC ioctl 来运行该代码路径。[konishi.ryusuke@gmail.com:已添加注释到提交日志] (CVE-2023-52566)

- 在 Linux 内核中,以下漏洞已修复:ceph:修复因滥用 dget() 而造成的死锁或死代码 denty 与其父项之间的锁定顺序不正确,我们应始终确保父项先被锁定。但由于从未使用过此死代码且始终通过调用程序设置父目录,我们只需将其移除即可。(CVE-2023-52583)

- 在 Linux 内核中,以下漏洞已修复:jfs:修复 dbAdjTree 中的 array-index-out-of-bounds 当前,访问 dmt_stree 时,dbAdjTree 中缺少边界检查。要添加所需的检查,请根据以下提交中的建议添加确定大小所需的 bool is_ctl。https://lore.kernel.org/linux-kernel-mentees/f9475918-2186-49b8-b801-6f0f9e75f4fa@oracle.com/ (CVE-2023-52601)

- 在 Linux 内核中,以下漏洞已修复:jfs:修复 dtSearch 中的 slab-out-of-bounds 读取 目前,在页面的已排序条目表中搜索当前页面时,会发生越界访问。已添加边界检查来修复错误。Dave:将返回代码设置为 -EIO (CVE-2023-52602)

- 在 Linux 内核中,以下漏洞已修复:FS:JFS:UBSAN:array-index-out-of-boundsin dbAdjTree Syzkaller 报告了以下问题:UBSAN:fs/jfs/jfs_dmap.c:2867:6 索引 196694 中的 array-index-out-of-bounds 超出类型“s8[1365]”(也称为“signed char[1365]”)的范围 CPU:1 PID:109 命令:jfsCommit 未感染 6.6.0-rc3-syzkaller #0 硬件名称:Google Google Compute Engine/Google Compute Engine,BIOS Google 08/04/2023 调用跟踪:<TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 ubsan_epilogue lib/ubsan.c:217 [inline]
__ubsan_handle_out_of_bounds+0x11c/0x150 lib/ubsan.c:348 dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867 dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834 dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331 dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline] dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402 txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534 txUpdateMap+0x342/0x9e0 txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline] jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732 kthread+0x2d3/0x370 kernel/kthread.c:388 ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304 </TASK> ================================================================================ 内核错误 - 未同步:UBSAN:panic_on_warn 设置… CPU:1 PID:109 命令:jfsCommit 未感染 6.6.0-rc3-syzkaller #0 硬件名称:Google Google Compute Engine/Google Compute Engine,BIOS Google 08/04/2023 调用跟踪:
<TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 panic+0x30f/0x770 kernel/panic.c:340 check_panic_on_warn+0x82/0xa0 kernel/panic.c:236 ubsan_epilogue lib/ubsan.c:223 [inline] __ubsan_handle_out_of_bounds+0x13c/0x150 lib/ubsan.c:348 dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867 dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834 dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331 dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline] dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402 txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534 txUpdateMap+0x342/0x9e0 txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline] jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732 kthread+0x2d3/0x370 kernel/kthread.c:388 ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304 </TASK> 内核偏移:已禁用 86400 秒后重启… 如果 lp 的值大于 CLTREEESIZE(即 stree 的最大大小),则会导致此问题。添加一项简单的检查即可解决此问题。Dave:由于函数返回 void,如果要妥善处理错误,可能需要进行更激进的代码重组。由于缺少更明确的选项,所以我修改了目前所用的 Osama 补丁 WARN_ON_ONCE。补丁已经过 syzbot 测试。(CVE-2023-52604)

- 在 Linux 内核中,以下漏洞已修复:tcp:务必将 accept_queue 的旋转锁初始化一次 当我在本地运行 syz 的相同 C 程序时,导致出现以下问题:
pvqspinlock:锁定 0xffff9d181cd5c660 含损坏值 0x0!警告:CPU:19 PID:21160 在
__pv_queued_spin_unlock_slowpath (kernel/locking/qspinlock_paravirt.h:508) 硬件名称:Red Hat KVM,BIOS 0.5.1 01/01/2011 RIP:0010:__pv_queued_spin_unlock_slowpath (kernel/locking/qspinlock_paravirt.h:508) 代码:73 56 3a ff 90 c3 cc cc cc cc 8b 05 bb 1f 48 01 85 c0 74 05 c3 cc cc cc cc 8b 17 48 89 fe 48 c7 c7 30 20 ce 8f e8 ad 56 42 ff <0f> 0b c3 cc cc cc cc 0f 0b 0f 1f 40 00 90 90 90 90 90 90 90 90 90 RSP:
0018:ffffa8d200604cb8 EFLAGS:00010282 RAX:0000000000000000 RBX:0000000000000000 RCX:ffff9d1ef60e0908 RDX:00000000ffffffd8 RSI:0000000000000027 RDI:ffff9d1ef60e0900 RBP:ffff9d181cd5c280 R08:
0000000000000000 R09:00000000ffff7fff R10:ffffa8d200604b68 R11:ffffffff907dcdc8 R12:0000000000000000 R13:ffff9d181cd5c660 R14:ffff9d1813a3f330 R15:0000000000001000 FS:00007fa110184640(0000) GS:ffff9d1ef60c0000(0000) knlGS:0000000000000000 CS:0010 DS:0000 ES:0000 CR0:0000000080050033 CR2:
0000000020000000 CR3:000000011f65e000 CR4:00000000000006f0 调用跟踪:<IRQ> _raw_spin_unlock (kernel/locking/spinlock.c:186) inet_csk_reqsk_queue_add (net/ipv4/inet_connection_sock.c:1321) inet_csk_complete_hashdance (net/ipv4/inet_connection_sock.c:1358) tcp_check_req (net/ipv4/tcp_minisocks.c:868) tcp_v4_rcv (net/ipv4/tcp_ipv4.c:2260) ip_protocol_deliver_rcu (net/ipv4/ip_input.c:205) ip_local_deliver_finish (net/ipv4/ip_input.c:234) __netif_receive_skb_one_core (net/core/dev.c:5529) process_backlog (./include/linux/rcupdate.h:779) __napi_poll (net/core/dev.c:6533) net_rx_action (net/core/dev.c:6604) __do_softirq (./arch/x86/include/asm/jump_label.h:27) do_softirq (kernel/softirq.c:454 kernel/softirq.c:441) </IRQ> <TASK> __local_bh_enable_ip (kernel/softirq.c:381)
__dev_queue_xmit (net/core/dev.c:4374) ip_finish_output2 (./include/net/neighbour.h:540 net/ipv4/ip_output.c:235) __ip_queue_xmit (net/ipv4/ip_output.c:535) __tcp_transmit_skb (net/ipv4/tcp_output.c:1462) tcp_rcv_synsent_state_process (net/ipv4/tcp_input.c:6469) tcp_rcv_state_process (net/ipv4/tcp_input.c:6657) tcp_v4_do_rcv (net/ipv4/tcp_ipv4.c:1929) __release_sock (./include/net/sock.h:1121 net/core/sock.c:2968) release_sock (net/core/sock.c:3536) inet_wait_for_connect (net/ipv4/af_inet.c:609) __inet_stream_connect (net/ipv4/af_inet.c:702) inet_stream_connect (net/ipv4/af_inet.c:748) __sys_connect (./include/linux/file.h:45 net/socket.c:2064) __x64_sys_connect (net/socket.c:2073 net/socket.c:2070 net/socket.c:2070) do_syscall_64 (arch/x86/entry/common.c:51 arch/x86/entry/common.c:82) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:129) RIP:
0033:0x7fa10ff05a3d 代码:5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 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 8b 0d ab a3 0e 00 f7 d8 64 89 01 48 RSP:002b:00007fa110183de8 EFLAGS:00000202 ORIG_RAX:000000000000002a RAX:ffffffffffffffda RBX:
0000000020000054 RCX:00007fa10ff05a3d RDX:000000000000001c RSI:0000000020000040 RDI:0000000000000003 RBP:00007fa110183e20 R08:0000000000000000 R09:0000000000000000 R10:0000000000000000 R11:
0000000000000202 R12:00007fa110184640 R13:0000000000000000 R14:00007fa10fe8b060 R15:00007fff73e23b20 </TASK> 对问题触发流程的分析如下:线程 A 线程 B tcp_v4_rcv //receive ack TCP packet inet_shutdown tcp_check_req tcp_disconnect //disconnect sock ... tcp_set_state(sk, TCP_CLOSE) inet_csk_complete_hashdance ... inet_csk_reqsk_queue_add ---truncated--- (CVE-2024-26614)

- 在 Linux 内核中,以下漏洞已修复:tomoyo:修复 tomoyo_write_control() 中的 UAF 写入错误 由于请求获取长行的 write() 时,tomoyo_write_control() 会更新 head->write_buf,因此我们需要在保留 head->io_sem 之后获取 head->write_buf。否则,write() 并发请求会造成写入释放后使用和双重释放问题。(CVE-2024-26622)

- 在 Linux 内核中,以下漏洞已修复:llc:终止支持 ETH_P_TR_802_2。
syzbot 报告了下方的 uninit-value 错误。[0] llc 支持 ETH_P_802_2 (0x0004),并且用于支持 ETH_P_TR_802_2 (0x0011),syzbot 滥用后者触发了此错误。write$tun(r0, &(0x7f0000000040)={@val={0x0, 0x11}, @val, @mpls={[], @llc={@snap={0xaa, 0x1, ')', 90e5dd}}}}, 0x16) llc_conn_handler() 根据 llc_pdu_decode_sa()/llc_pdu_decode_da() 中的 skb 将本地变量 {saddr,daddr}.mac 初始化,并将这些变量传递给 __llc_lookup()。但是,仅当 skb->protocol 为 htons(ETH_P_802_2) 时才会完成初始化,否则,__llc_lookup_established() 和
__llc_lookup_listener() 将读取无用信息。提交 211ed865108e 之前缺少的初始化(net:删除令牌环特殊处理的所有实例)。它移除了用于去掉令牌环内容的部分,但却忘记关闭允许 ETH_P_TR_802_2 数据包混入 llc_rcv() 的门户。
让我们移除 llc_tr_packet_type 并完成弃用。[0]:错误:KMSAN:uninit-value 位于
__llc_lookup_established+0xe9d/0xf90 __llc_lookup_established+0xe9d/0xf90 __llc_lookup net/llc/llc_conn.c:611 中 [inline] llc_conn_handler+0x4bd/0x1360 net/llc/llc_conn.c:791 llc_rcv+0xfbb/0x14a0 net/llc/llc_input.c:206 __netif_receive_skb_one_core net/core/dev.c:5527 [inline]
__netif_receive_skb+0x1a6/0x5a0 net/core/dev.c:5641 netif_receive_skb_internal net/core/dev.c:5727 [inline] netif_receive_skb+0x58/0x660 net/core/dev.c:5786 tun_rx_batched+0x3ee/0x980 drivers/net/tun.c:1555 tun_get_user+0x53af/0x66d0 drivers/net/tun.c:2002 tun_chr_write_iter+0x3af/0x5d0 drivers/net/tun.c:2048 call_write_iter include/linux/fs.h:2020 [inline] new_sync_write fs/read_write.c:491 [inline] vfs_write+0x8ef/0x1490 fs/read_write.c:584 ksys_write+0x20f/0x4c0 fs/read_write.c:637
__do_sys_write fs/read_write.c:649 [inline] __se_sys_write fs/read_write.c:646 [inline]
__x64_sys_write+0x93/0xd0 fs/read_write.c:646 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_64+0x44/0x110 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x63/0x6b 本地变量 daddr 创建时间:llc_conn_handler+0x53/0x1360 net/llc/llc_conn.c:783 llc_rcv+0xfbb/0x14a0 net/llc/llc_input.c:206 CPU:1 PID:5004 命令:syz-executor994 未感染 6.6.0-syzkaller-14500-g1c41041124bd #0 硬件名称:Google Google Compute Engine/Google Compute Engine,BIOS Google 10/09/2023 (CVE-2024-26635)

- 在 Linux 内核中,以下漏洞已修复:ext4:修复 moved_len 范围错误引起的区块双重释放 在 ext4_move_extents() 中,moved_len 仅在所有移动均成功执行的情况下才会更新,并且仅在 moved_len 不为零的情况下才会丢弃 orig_inode 和 donor_inode 预分配。如果出现成功移动某些范围后无法退出循环的情况,moved_len 不会更新且仍然为 0,因此它不会丢弃预分配。如果移动的范围与预先分配的范围重叠,重叠的范围会在 ext4_mb_release_inode_pa() 和 ext4_process_freed_data() 中释放两次(如提交 94d7c16cbbbd 中所述(ext4:修复带有 EXT4_IOC_MOVE_EXT 的区块存在的双重释放问题)),并且 bb_free 会增加两次。因此,执行 trim 时,由于 bb_free 不为零且 bb_fragments 为零,因而 mb_update_avg_fragment_size() 中会触发除以零错误。因此,请在每次范围移动后更新 move_len,以避免此问题。(CVE-2024-26704)

- 在 Linux 内核中,下列漏洞已修复:ipv6:sr:修复可能发生的释放后使用和空指针取消引用问题 注册子系统的 pernet 操作结构的时间必须早于注册通用 netlink 系列的时间。(CVE-2024-26735)

- 在 Linux 内核中,下列漏洞已修复:蓝牙:避免可能出现的 hci_error_reset 释放后使用问题 处理 HCI_EV_HARDWARE_ERROR 事件时,如果底层 BT 控制器未响应,GPIO 重置机制会释放 hci_dev 并导致 hci_error_reset 发生释放后使用。以下是在采用 Intel AX201 的 ChromeOS 设备上观察到的调用跟踪:
queue_work_on+0x3e/0x6c __hci_cmd_sync_sk+0x2ee/0x4c0 [bluetooth <HASH:3b4a6>] ? init_wait_entry+0x31/0x31
__hci_cmd_sync+0x16/0x20 [bluetooth <HASH:3b4a 6>] hci_error_reset+0x4f/0xa4 [bluetooth <HASH:3b4a 6>] process_one_work+0x1d8/0x33f worker_thread+0x21b/0x373 kthread+0x13a/0x152 ? pr_cont_work+0x54/0x54 ? kthread_blkcg+0x31/0x31 ret_from_fork+0x1f/0x30 处理 HCI_EV_HARDWARE_ERROR 事件时,此补丁会保留 hci_dev 的引用计数,以免发生崩溃。(CVE-2024-26801)

- 在 Linux 内核中,下列漏洞已修复:netlink:修复 __skb_datagram_iter 中的 kernel-infoleak-after-free syzbot 报告了以下 uninit-value 访问问题 [1]:
netlink_to_full_skb() 会创建新的“skb”,并将“skb->data”作为 netlink_to_full_skb() 的第一个参数传递至新的“skb”。数据大小被指定为“len”并传递给 skb_put_data()。
此“len”基于不是数据偏移而是缓冲区偏移的“skb->end”。“skb->end”包含数据和 tailroom。由于创建新的“skb”时并未将 tailroom 初始化,因而 KMSAN 在复制数据时会检测未初始化的内存区域。此补丁通过将 len 从“skb->end”修正为“skb->len”(是实际数据偏移)解决了此问题。错误:KMSAN:instrument_copy_to_user include/linux/instrumented.h:114 中的 kernel-infoleak-after-free [inline] 错误:KMSAN:copy_to_user_iter lib/iov_iter.c:24 中的 kernel-infoleak-after-free [inline] 错误:KMSAN:iterate_ubuf include/linux/iov_iter.h:29 中的 kernel-infoleak-after-free [inline] 错误:KMSAN:iterate_and_advance2 include/linux/iov_iter.h:245 中的 kernel-infoleak-after-free [inline] 错误:KMSAN:iterate_and_advance include/linux/iov_iter.h:271 中的 kernel-infoleak-after-free [inline] 错误:KMSAN:_copy_to_iter+0x364/0x2520 lib/iov_iter.c:186 instrument_copy_to_user include/linux/instrumented.h:114 中的 kernel-infoleak-after-free [inline] copy_to_user_iter lib/iov_iter.c:24 [inline] iterate_ubuf include/linux/iov_iter.h:29 [inline] iterate_and_advance2 include/linux/iov_iter.h:245 [inline] iterate_and_advance include/linux/iov_iter.h:271 [inline]
_copy_to_iter+0x364/0x2520 lib/iov_iter.c:186 copy_to_iter include/linux/uio.h:197 [inline] simple_copy_to_iter+0x68/0xa0 net/core/datagram.c:532 __skb_datagram_iter+0x123/0xdc0 net/core/datagram.c:420 skb_copy_datagram_iter+0x5c/0x200 net/core/datagram.c:546 skb_copy_datagram_msg include/linux/skbuff.h:3960 [inline] packet_recvmsg+0xd9c/0x2000 net/packet/af_packet.c:3482 sock_recvmsg_nosec net/socket.c:1044 [inline] sock_recvmsg net/socket.c:1066 [inline] sock_read_iter+0x467/0x580 net/socket.c:1136 call_read_iter include/linux/fs.h:2014 [inline] new_sync_read fs/read_write.c:389 [inline] vfs_read+0x8f6/0xe00 fs/read_write.c:470 ksys_read+0x20f/0x4c0 fs/read_write.c:613 __do_sys_read fs/read_write.c:623 [inline] __se_sys_read fs/read_write.c:621 [inline]
__x64_sys_read+0x93/0xd0 fs/read_write.c:621 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 已存储到内存的以下位置:skb_put_data include/linux/skbuff.h:2622 [inline] netlink_to_full_skb net/netlink/af_netlink.c:181 [inline] __netlink_deliver_tap_skb net/netlink/af_netlink.c:298 [inline]
__netlink_deliver_tap+0x5be/0xc90 net/netlink/af_netlink.c:325 netlink_deliver_tap net/netlink/af_netlink.c:338 [inline] netlink_deliver_tap_kernel net/netlink/af_netlink.c:347 [inline] netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline] netlink_unicast+0x10f1/0x1250 net/netlink/af_netlink.c:1368 netlink_sendmsg+0x1238/0x13d0 net/netlink/af_netlink.c:1910 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 创建时间:free_pages_prepare mm/page_alloc.c:1087 [inline] free_unref_page_prepare+0xb0/0xa40 mm/page_alloc.c:2347 free_unref_page_list+0xeb/0x1100 mm/page_alloc.c:2533 release_pages+0x23d3/0x2410 mm/swap.c:1042 free_pages_and_swap_cache+0xd9/0xf0 mm/swap_state.c:316 tlb_batch_pages ---truncated--- (CVE-2024-26805)

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

解决方案

更新受影响的 kernel 程序包。

另见

https://ubuntu.com/security/notices/USN-6777-3

插件详情

严重性: High

ID: 197600

文件名: ubuntu_USN-6777-3.nasl

版本: 1.1

类型: local

代理: unix

发布时间: 2024/5/22

最近更新时间: 2024/5/23

支持的传感器: Frictionless Assessment AWS, Frictionless Assessment Azure, Frictionless Assessment Agent, Nessus Agent, Agentless Assessment, 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-52439

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: p-cpe:/a:canonical:ubuntu_linux:linux-image-4.15.0-1162-gcp, cpe:/o:canonical:ubuntu_linux:16.04:-:lts

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

易利用性: No known exploits are available

补丁发布日期: 2024/5/21

漏洞发布日期: 2023/11/3

参考资料信息

CVE: CVE-2021-46981, CVE-2023-47233, CVE-2023-52439, CVE-2023-52524, CVE-2023-52530, CVE-2023-52566, CVE-2023-52583, CVE-2023-52601, CVE-2023-52602, CVE-2023-52604, CVE-2024-26614, CVE-2024-26622, CVE-2024-26635, CVE-2024-26704, CVE-2024-26735, CVE-2024-26801, CVE-2024-26805

USN: 6777-3