安全研究员 Ozgun Kultekin 近日披露了 OpenSSH 的一个严重漏洞,该漏洞被命名为“*sshole”。攻击者可利用此缺陷,在特定基于 musl C 库的 Linux 系统上,通过提交超过 256 字节的密码,直接登录已禁用密码的账户。

据 Slashdot 读者 AlteredEgg 指出,Alpine、OpenWrt、Buildroot 和 Yocto 等采用 musl 库的 Linux 发行版受此影响已长达十年之久。Kultekin 确认,该漏洞自 2016 年起便存在于 OpenSSH 中,根源在于软件如何处理使用 musl C 库系统的密码验证错误。
在 Linux 系统中,管理员通常通过在 /etc/shadow文件中将密码哈希值替换为星号(*)来禁止特定账户进行密码登录。由于 * 并非有效的密码哈希格式,理论上任何密码都不应允许访问这些账户。然而,2016年引入的一项旨在修复用户名枚举漏洞(CVE-2016-6210)的补丁改变了这一逻辑。为了防止攻击者通过响应时间差异识别有效用户名,OpenSSH 被修改为即使账户没有可用的密码哈希(包括配置为 * 以阻止密码登录的账户),也会执行密码哈希运算。
问题出在 musl C 库的 crypt() 函数行为上。当密码哈希失败时——例如提交的密码长度超过其 256 字节的限制——该函数同样返回 *。这意味着,如果攻击者提交一个超长密码,OpenSSH 会将返回的 * 与账户中存储的 * 进行比较,从而判定匹配成功,导致未授权登录。
需要明确的是,该漏洞并不允许攻击者绕过具有有效密码哈希值的账户的密码保护。对于无法立即安装更新的管理员,可以通过在 SSH 服务器配置中设置 PasswordAuthentication no 并重启 SSH 服务来缓解风险。此外,Kultekin 建议管理员检查 SSH 认证日志,查找那些本不应允许密码登录的账户出现的基于密码的登录尝试,以排查是否已被利用。





