快速摘要
- Linux 内核存在一个逻辑缺陷,允许非特权用户“窃取”受 root 保护的文件(如 SSH 私钥和
/etc/shadow文件)的文件描述符。 - 通过利用进程退出时的一个短暂时间窗口(内存已清除但文件尚未关闭),攻击者可以使用
pidfd_getfd系统调用来绕过通常保护敏感 SUID 进程的安全检查。 - 这个特定的
CVE-2026-41651设计缺陷在 2020 年 10 月被安全研究员明确标记,但在稳定版 Linux 内核中未修补约六年。此外,ssh-keysign工具中允许其被用作此漏洞目标的特定编码模式自 2002 年以来一直未变。
FD 窃取漏洞:存在 6 年的 Linux 内核缺陷
Linux 内核刚刚发布了一个新的安全补丁。这不是一个典型的“立即获取 root”漏洞,而是一个巧妙的“文件描述符(FD)窃取”漏洞,它作为内核设计的一部分已经存在了 6 年。
Linus Torvalds 最近推送了一个修复,针对内核处理退出进程时的逻辑错误。虽然补丁现已正式发布,但这个漏洞的工作原理以及它隐藏了多久,是一个关于内核内部的引人入胜的故事。
什么是文件描述符(FD)窃取漏洞?
大多数 Linux 安全新闻关注的是“权限提升”,即用户成为 root。这个漏洞不同,它是一个文件访问漏洞。
FD 窃取(文件描述符窃取)指的是攻击者在特权进程退出过程中“窃取”或复制其活动文件描述符的过程。这种技术允许非特权用户访问目标进程在仍拥有 root 权限时打开的敏感文件。
攻击者可以利用此缺陷在特权程序尝试关闭敏感文件(如 SSH 私钥或 /etc/shadow 密码文件)时“窃取”这些文件的活跃链接。
如果攻击者获取了您的 shadow 文件,他们可以获取密码哈希并离线破解,最终获得完全 root 访问权限。
内核中的安全窗口
要理解这个 fd 窃取漏洞,必须了解程序如何退出。当程序结束时,Linux 内核按特定顺序清理其资源。此漏洞利用了该序列中的一个微小时间间隙:
- 首先清除内存(
exit_mm): 内核清除程序的内存。 - 检查失败: 通常,内核保护 root 拥有的程序不被普通用户探查。这称为“可转储”检查。但多年来,内核有一个“失败开放”策略:如果内存已经消失,内核就假定该程序可以安全访问。
- 文件保持打开一瞬间(
exit_files): 即使内存已消失,程序的文件尚未关闭。
在这个微小的时间窗口内,攻击者可以使用 pidfd_getfd 工具来复制那些打开的文件。由于程序最初以 root 权限打开了这些文件,攻击者会获得一个可用的副本。
现实世界目标:ssh-keysign 和 chage
此攻击针对一种非常特定的程序“形状”。它需要一个 root 拥有的工具,该工具打开一个敏感文件,然后将其权限降级为普通用户,最后退出。
ssh-keysign: 此工具打开 SSH 主机私钥。由于此漏洞,攻击者可以捕获密钥,然后冒充您的服务器欺骗其他用户。chage: 此工具管理用户密码并打开/etc/shadow。攻击者可以在程序关闭时“竞态”以窃取您的密码哈希。
令人惊讶的是,ssh-keysign 中使此漏洞成为可能的代码自 2002 年以来一直完全相同。安全研究员 Jann Horn 甚至在 2020 年 10 月就警告过这个设计缺陷,称内核的逻辑“从安全角度来看是可疑的”。
如果您想测试此漏洞,请查看 GitHub 上的 ssh-keysign-pwn 仓库。它提供了必要的代码,用于演示 2025 年 5 月之前发布的内核上的漏洞。
Linus Torvalds 发布新补丁修复缺陷
Linus Torvalds 的新补丁,标识为 Commit 31e62c2ebbfd,引入了他所谓的“稍微更合理”的逻辑。
内核不再在内存被清除时“忘记”程序的安全状态,而是使用一个称为 user_dumpable 的缓存标志。
此标志记住程序在存活时是否受到保护。现在,如果攻击者试图在该退出窗口期间获取文件描述符,内核会看到缓存标志并阻止访问,除非用户具有高级别的 CAP_SYS_PTRACE 权限。
受影响的 Linux 系统
该漏洞影响几乎所有在 2025 年 5 月之前发布内核的主要 Linux 发行版。确认受影响的版本包括:
- Ubuntu(20.04、22.04、24.04)
- Debian 12
- Arch Linux
- CentOS 7
- Raspberry Pi OS(Bookworm)
修复 FD 窃取漏洞
一旦您的发行版提供最新的安全补丁,请尽快更新内核。一旦您运行包含 Torvalds 修复的版本,那个“安全窗口”将永久关闭。
建议阅读:




