Linux Distros 未修补的漏洞:CVE-2026-98981

critical Nessus 插件 ID 371592

简介

Linux/Unix 主机上安装的一个或多个程序包存在漏洞,但供应商表示不会修补此漏洞。

描述

Linux/Unix 主机中安装的一个或多个程序包受到一个漏洞影响,而供应商没有提供补丁程序。

- namespace:在分离 dentry 上的挂载之前先对其进行反哈希 unlink()、rmdir() 和 rename() 从文件系统中删除该条目,在锁定了 inode 的条目上调用 detach_mounts(),然后在解锁 inode 后调用 d_delete()。问题是,在 detach_mounts() 和 d_delete() 之间,dentry 仍然是哈希的和正的。但在 detach_mounts() 之后,就没有任何东西覆盖了 dentry。在 dcache 中找到此 dentry 的查找可发现挂载隐藏的内容。断开作为其他挂载命名空间中挂载点的文件或目录的链接时,这是一个问题。覆盖了底层条目的每个人都可以争用 detach_mount() 调用,直到 d_delete() 运行。比赛窗口并不是那么小。它包含具有完整 synchronize_rcu_expedited() 宽限期的 namespace_unlock() 和条目的 inode_unlock()。在我的实验中,三个不断尝试的步行者在 11938 中读取了 16140 个取消链接中的一个过度挂载的文件,这些取消链接在一分钟内将其挂载点从文件系统的绑定挂载中删除。有趣的是,d_invalidate() 有相同的排序问题,但做对了。它首先反哈希 dentry,然后分离挂载。让我们在 __detach_mounts() 中做同样的事情: - 尚未找到 dentry 的查找会在 dcache 中缺失它,并等待调用程序持有的目录锁,直到名称永远消失。- 发现其已通过mount_lock检查的无锁查找,而 dentry 仍算作挂载点,一旦不算作挂载点,便会进行d_seq检查,然后重试。这修复了无锁路径。我们仍然需要在后续修补程序中修复引用计数查找。所以 d_drop() dentry。dentry 保持阳性并被持有,但再也找不到了。然后继续进行分离和取消链接。重现程序:读取次数使用以下程序进行计数,在具有 4 个 CPU 的 VM 中,三个遍历器持续 60 秒。通过在此处粘贴的调试修补程序,争用窗口将被拉伸。fs.detach_race_walk_us 在找到挂载点 dentry 时及交叉其挂载之前,会在 lookup_fast() 中休眠。fs.detach_race_unlink_us 在 detach_mounts() 与 d_delete() 之间的 vfs_unlink() 中休眠。spdx-license-identifier:GPL-2.0 /* * unlink_covered:针对通过该副本打开该文件的查找,取消作为挂载点的文件的链接 * 其挂载。 * * A 是包含文件 f1(内容SECRET_F)和普通文件 * MARK_A的 tmpfs。A' 是 A 的 open_tree(OPEN_TREE_CLONE) 副本,MARK_A在 A'/f1 上绑定为 *,一旦树 fd 被 * 关闭,通过其根上的 O_PATH fd 保持。遍历器通过该 fd 打开 f1,而驱动程序则取消链接 A/f1,*其上未挂载任何内容。步行者可能会阅读MARK_A或获得 ENOENT。* 读取 SECRET_F 很成功:在其挂载 * 消失后找到该名称。无锁遍历使用 openat2(RESOLVE_CACHED)。* * 用法:
unlink_covered [-t seconds] [-w walkers] */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include <errno.h> #include #include <fcntl.h> #include <stdatomic.h><pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include < sys/mount.h> #include <sys/stat.h> #include <sys/syscall.h> #include <linux/openat2.h> #ifndef __NR_open_tree #define __NR_open_tree 428 #endif #ifndef __NR_move_mount #define __NR_move_mount 429 #endif #ifndef __NR_openat2 #define __NR_openat2 437 #endif #ifndefOPEN_TREE_CLONE #define OPEN_TREE_CLONE 1 #endif #ifndef OPEN_TREE_CLOEXEC #define OPEN_TREE_CLOEXEC O_CLOEXEC #endif #ifndef MOVE_MOUNT_F_EMPTY_PATH #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 #endif #define WORK /tmp/uc #define ADIR WORK /A 静态 int 持续时间 = 60,nwalkers = 3;
静态atomic_int停止,writer_waiting;静态pthread_rwlock_t cur_lock = PTHREAD_RWLOCK_INITIALIZER;
静态 int cur_fd = -1;/* A' 的词根,-1 wh ---truncated--- (CVE-2026-98981)

请注意,Nessus 依赖供应商报告的程序包是否存在进行判断。

解决方案

目前尚未有任何已知的解决方案。

另见

https://security-tracker.debian.org/tracker/CVE-2026-98981

插件详情

严重性: Critical

ID: 371592

文件名: unpatched_CVE_2026_98981.nasl

版本: 1.1

类型: Local

代理: unix

系列: Misc.

发布时间: 2026/10/23

最近更新时间: 2026/10/23

支持的传感器: Frictionless Assessment Agent, Nessus Agent, Agentless Assessment, Tenable Cloud Security, Tenable Self-Hosted Container Security, Nessus

风险信息

VPR

风险因素: Medium

分数: 5

百分位: 92.98

CVSS v2

风险因素: High

基本分数: 7.5

时间分数: 6.4

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

CVSS 分数来源: CVE-2026-98981

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 9

矢量: 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:U/RC:C

漏洞信息

CPE: cpe:/o:debian:debian_linux:12.0, cpe:/o:debian:debian_linux:13.0, p-cpe:/a:debian:debian_linux:linux

必需的 KB 项: Host/local_checks_enabled, Host/cpu, global_settings/vendor_unpatched, Host/OS/identifier

易利用性: No known exploits are available

漏洞发布日期: 2026/10/23

参考资料信息

CVE: CVE-2026-98981