Linux系统发现*sshole漏洞,可绕过认证获Root权限

研究人员发现Linux系统存在*sshole漏洞,攻击者可通过超长密码绕过认证获取Root权限。该问题主要影响使用musl libc且未启用PAM的系统,包括部分Alpine Linux云镜像环境。

研究人员 Özgün Kültekin 发现了一个名为 *sshole 的 Linux 系统漏洞。在某些特定配置下,攻击者可通过输入超过 256 字节的密码获取 root 访问权限。

超256字节密码可绕过认证

该漏洞主要影响使用 musl libc 而非传统 GNU C 库的 Linux 系统。具体而言,受影响的系统需同时满足以下条件:运行 OpenSSH、未启用可插拔认证模块 (PAM)、开启密码认证,且至少存在一个拥有有效密码哈希值的账户。

在上述条件下,若目标账户(如 root、仅密钥部署用户或 LDAP 用户)在密码字段中标记为星号 (*),攻击者即可通过提供长度介于 257 至 1,024 个字符之间的密码绕过认证限制。尽管直接以 root 身份登录仍受 OpenSSH 配置约束,但这一机制使得本应禁用密码认证的账户变得可被访问。

Musl libc 因其较小的足迹而在嵌入式 Linux 系统中广泛使用,同时也是 Alpine Linux 的标准 C 库。由于 AWS 和 Azure 均提供基于 Alpine Linux 的官方云镜像,因此部分配置不当的云环境可能面临安全风险。

历史根源与技术原理

Kültekin 指出,该漏洞的技术根源可追溯至 BSD Unix 时代。早在 1980 年,Sun Microsystems 联合创始人 Bill Joy 参与开发的 BSD Unix 中,便采用在 /etc/passwd 文件中将 daemon 用户的密码字段设为星号 (*) 的方式,以此标记该账户禁用密码认证。如今,虽然密码哈希值通常存储于 /etc/shadow 文件中,但星号作为一种特殊的“无效”标识符,其处理逻辑在不同实现中存在差异。

当 crypt() 函数无法计算哈希值时,可能会返回 NULL。为防止应用程序崩溃,开发者曾选择使用星号作为占位符。与此同时,Musl 引入了基于 SHA-512 的密码散列算法。由于密码越长,哈希计算耗时越久,为防止拒绝服务攻击,Musl 将密码长度限制为 256 字节。

2016 年,OpenSSH 引入了一项防护机制,旨在防止攻击者通过响应时间差异枚举有效账户名称。此前,sshd 对不存在用户的拒绝速度快于对存在用户进行密码哈希验证的速度。为解决这一问题,OpenSSH 改为对无效用户执行虚拟密码散列,以平衡响应时间。

*sshole 漏洞正是源于这一机制与 Musl 长度限制的交互缺陷。在受影响的基于 Musl 的系统上,针对标记为星号的账户提供超长密码(超过 256 字节),会触发特定的代码路径,从而允许绕过认证检查。该问题自 2016 年起便存在于特定配置环境中。

目前尚无证据表明该漏洞已被利用。Kültekin 在其文章中提供了用于检测系统是否易受攻击的命令行工具。

OpenSSH 已迅速修复此问题。从周四发布的 OpenSSH 版本 10.6p2 及更新版本均已包含补丁。对于暂时无法升级的系统,管理员可通过禁用密码认证并重启 SSH 服务来规避风险。

评论 0

0/500

评论需审核后展示,请文明发言

💬
还没有评论,来说两句

相关阅读