OpenSSH十年老漏洞 超长密码可登无密码账户
安全研究员 Özgün Kültekin 近日披露了一个代号「*sshole」的漏洞:在特定配置的 Linux 系统上,攻击者只需提交一个超过 256 字节的超长密码,就能登录那些被明确设置为「禁止密码登录」的账户。该漏洞已在 OpenSSH 10.6p2 中修复。

漏洞的根源是一场合持续十年的「误会」。Linux 管理员通常把账户在 /etc/shadow 中的密码哈希字段改成星号(*)来禁止密码登录。2016 年,OpenSSH 为封堵一个用户名枚举漏洞(CVE-2016-6210),改为对没有有效密码哈希的账户也执行「哑哈希」计算,让攻击者无法通过响应时间差异猜出哪些用户名真实存在。
问题出在 musl C 库这边。musl 是 Alpine Linux、OpenWrt、Buildroot、Yocto 等轻量级发行版使用的标准 C 库,它的 crypt() 函数在哈希失败时会返回一个星号——包括密码超过 256 字节上限的情况。于是攻击者提交一个超长密码,服务器算出的结果恰好是 *,与账户存储的 * 一比对,登录成功。
利用条件相当苛刻:系统必须使用 musl 库、关闭 PAM 认证、开启 SSH 密码登录,且至少存在一个星号账户和另一个有效哈希账户。Debian、Ubuntu、Fedora 等 glibc 系统以及启用 PAM 的系统均不受影响。但研究者指出,Alpine 官方 AWS 和 Azure 云镜像默认带有一个星号哈希的 alpine 账户,且该账户拥有免密 doas 提权能力,攻击者可能借此直接获得 root 权限。路由器和嵌入式设备上大量使用的 OpenWrt 等系统同样值得关注。
有意思的是,这个漏洞是研究者用 AI 智能体发现的:他让智能体围绕不同 OpenSSH 配置、畸形密码哈希和超长密码跑了约 1.76 万次认证测试,才定位到这个潜伏十年的交互缺陷。这个星号禁用密码的惯例本身可以追溯到 1980 年 BSD Unix 时代,由 Sun 联合创始人 Bill Joy 引入。
目前尚无在野利用的报告。OpenSSH 10.6p2 已于 11 月 5 日发布,Alpine 也为各支持分支提供了补丁包,管理员可运行 apk upgrade openssh 升级;暂时无法升级的,可关闭 SSH 密码登录作为缓解措施,并检查认证日志中是否存在本不该出现的密码登录记录。
这次漏洞也提醒所有云计算用户:轻量级镜像带来便利的同时,也让冷门组件之间的「组合拳」漏洞更容易被忽视。容器和嵌入式环境里跑着 musl 的机器,值得逐一排查。
编译自 BleepingComputer,原标题:"OpenSSH flaw lets attackers log into password-disabled Linux accounts"