Alpine Linux 发布了一项关于其 `openssh-server` 软件包漏洞的安全公告,该漏洞允许攻击者绕过密码认证。此缺陷影响到 OpenSSH 在构建时未包含可插拔认证模块 (PAM) 或禁用了 `UsePAM` 设置的系统。在这些条件下,能够访问 SSH 端口的攻击者可以在不知道密码的情况下,登录到任何密码字段设置为 `*`(这是仅限密钥登录账户的常见配置)的账户。此绕过操作在单次连接中始终有效,且无需重试。

该问题的技术根源在于 OpenSSH 与 `musl` C 库之间的交互。当 `sshd` 在没有 PAM 的情况下构建时,它通过使用 `crypt()` 函数对尝试进行的密码进行哈希处理,并将其与存储的密码字段进行比较。如果账户的存储字段太短以包含盐值,`sshd` 会从系统上的另一个账户中借用盐值。由于 `musl` 库的 `crypt()` 函数在密码超过 256 字节时会返回 `*` 作为错误指示,因此提供 257 到 1024 字节之间字符串的攻击者会触发此错误。由于 `*` 也是无密码账户存储的精确值,系统会错误地将登录验证为成功。

此漏洞影响广泛的 Alpine Linux 版本,包括 3.16 到 3.24 版本以及 'edge' 分支。具体而言,它影响到启用了 `PasswordAuthentication` 且至少有一个其他本地账户拥有标准 `$5$` 或 `$6$` 密码哈希的系统。为了修复此问题,Alpine 建议升级到修复后的软件包版本(如 3.21.10、3.22.8、3.23.8 或 3.24.4)并重启 `sshd` 守护进程。或者,用户可以通过在 SSH 配置中设置 `PasswordAuthentication no` 来关闭此安全漏洞。建议用户检查 `/var/log/messages` 中仅应允许密钥访问的账户是否存在 'Accepted password' 条目,以确定是否发生了入侵。