十年老漏洞曝光 可免密登录Alpine系统
一款潜伏了十年的漏洞本周被公开:在特定配置下,攻击者向使用 musl 库的 Linux 系统发起一次 SSH 连接、输入一个超长密码,就能在完全不知道密码的情况下登录对方账号。发现者给它起名叫“*sshole”——星号正是 Linux 锁定账户的标记。

漏洞的根源要追溯到 2016 年。当时 OpenSSH 为防止通过响应时间差异枚举有效用户名(CVE-2016-6210),对密码字段无效的账户也会执行一次哈希计算。问题在于,轻量级 C 库 musl 的 crypt() 函数在失败时同样返回星号“*”,而“*”恰是 /etc/shadow 中锁定账户的密码标记。于是,只要提交一个超过 256 字节上限的密码让哈希计算失败,sshd 算出的“*”就会与文件里的“*”对上,认证被判定为成功。
利用该漏洞需要同时满足多个条件:系统基于 musl(如 Alpine、OpenWrt、Buildroot 或 Yocto)、SSH 服务未启用 PAM、开启了密码认证,且存在以星号锁定的账户,同时还有至少一个使用 SHA256 或 SHA512 哈希的活跃账户供 sshd 借用盐值。安全公司 Check Point 测试确认,默认设置下 root 账户仍是安全的,但拥有 doas 或 sudo 权限的可登录账户可以提权至 root。
即便条件苛刻,波及面仍然可观:Alpine 官方基础镜像在 Docker Hub 上的下载量超过 10 亿次,广泛用于容器和云端;这类系统还常见于路由器、智能电视和工控设备。安全公司 Detectify 则指出,Shodan 上约有 2200 万台设备的 22 端口对外开放 SSH。Alpine 官方 AWS 与 Azure 云镜像默认自带的 alpine 账户恰好命中所有条件,且该账户拥有无密码的 doas 提权,攻击者可直接获得 root。Alpine 维护团队警告:“只要能连上你的 SSH 端口,攻击者无需任何密码即可登录,一次连接就能成功,不需要重试。”
OpenSSH 与 Alpine 均已于周四发布修复,修复版本为 OpenSSH 10.6p2。对于暂无法升级的系统,官方建议直接禁用 SSH 密码认证,并排查认证日志中针对无密码账户的“Accepted password”记录。OpenSSH 团队表示,漏洞根源在 sshd 之外,但可通过 sshd 规避;musl 作者里奇·费尔克则认为这不是 musl 的缺陷,而是调用方误用。
值得一提的是,研究人员是借助 AI 智能体发现这个漏洞的:自动化测试跑了约 1.76 万次认证组合,才锁定 musl 加无 PAM 这一个异常分支。分析人士指出,随着 AI 大规模接管“枯燥的边缘用例测试”,这类潜伏多年的基础设施漏洞可能会被更密集地翻出来。
编译自 Ars Technica,原标题:"Meet *sshole, the vulnerability that lets hackers SSH into Linux devices"