OpenSSH 漏洞 *sshole:超长密码可入侵 Alpine Linux

OpenSSH 漏洞 *sshole 可让攻击者仅凭一串 257 至 1,024 个字符的超长密码入侵 Alpine Linux 服务器,以及其他基于 C 库 musl 的系统。该漏洞由安全公司 Wakefield 的研究员 Özgün Kültekin 于 2026 年 11 月 5 日披露,修复已包含在同一天发布的 OpenSSH 10.6p2 中。CSO Online 将该漏洞标识为 CVE-2026-123158。

此次攻击无需猜测凭据,也无需暴力破解:只需用一串超长密码对本不应接受密码的账户(如 root 用户或仅限 SSH 密钥的账户)进行一次登录尝试即可。

OpenSSH 漏洞如何产生

问题源于三项旧决策的叠加。2012 年,musl 开发者将密码长度限制为 256 字节,以防止利用缓慢的 SHA-512 哈希发动拒绝服务攻击,并让 crypt() 函数在无法计算哈希时返回一个星号(*)。2016 年,OpenSSH 开始“借用”其他账户的盐值来模拟对不存在用户的密码验证,以防御用户名枚举攻击(CVE-2016-6210)。而无密码账户在 /etc/shadow 文件的密码字段中恰好就是一个星号。

当攻击者向这类账户发送超过 256 个字符的密码时,musl 计算哈希失败并返回 *,与存储的星号相符,服务器便认为密码正确并放行。

哪些系统受影响

只有同时满足以下全部条件时,漏洞才可被利用:系统使用 musl(Alpine Linux 即属此类,广泛用于 Docker 容器和云环境);OpenSSH 未启用 PAM 模块;密码验证处于开启状态;存在密码字段为星号的账户;并且存在另一个拥有有效密码哈希($5$ 或 $6$)的账户可供借用盐值。

最严重的情况出现在 Alpine Linux 官方云镜像 3.18.11 至 3.24.3 版本中:默认用户 alpine 拥有免密码的 doas 权限(轻量版 sudo)。以 alpine 身份登录后,只需一条命令即可成为 root。直接 root 登录仍受默认配置 PermitRootLogin prohibit-password 的限制,但这条路径绕过了该保护。

Debian、Ubuntu 和 Fedora 等主流发行版不受影响,因为它们使用 glibc 而非 musl。据 The Register 报道,目前没有迹象表明已有易受攻击的系统遭到利用。

修复方法

11 月 5 日发布的 OpenSSH 10.6p2 已修复这一 OpenSSH 漏洞,Alpine 也为 3.16 以来的所有版本发布了修复包。运行 Alpine 服务器的管理员应尽快更新。无法更新的用户应在 OpenSSH 中禁用密码验证并重启守护进程,改用 SSH 密钥登录。研究员还公布了一条简单命令,用于检查无密码账户最近是否收到过密码登录。

图片来源:Alpine Linux 标志,来自 Wikimedia Commons。

来源

透明度声明:本文在人工智能的协助下完成,并与公开帖文及网络来源进行了交叉核对。请查阅原始来源以确认相关信息。

Muse