11 月 5 日公开的 OpenSSH 与 musl 密码认证绕过(CVE-2026-123158),CVSS 9.8,影响量级千万级,PoC 与 EXP 均已公开,暂未发现在野利用。OpenSSH 10.6p2 已修复。
成因链条
musl libc 的 crypt() 失败时返回单字符星号,而 POSIX 要求返回 NULL。OpenSSH 在未启用 PAM 的认证路径里,对密码字段为星号的账户,会借用其他账户的真实盐值去做校验。当攻击者提交 257 到 1024 字节的超长密码时,musl 因 KEY_MAX 为 256 返回星号,与影子密码字段的星号比较相等,strcmp 判定通过。
后果
无需任何凭据即可登录那些只允许密钥登录、或已锁定密码的账户。如果该账户有免密 sudo 或 doas 权限,直接到 root。这个问题从 2016 年起潜伏了近十年。
自查
看 /etc/shadow 里有多少账户密码字段是星号;梳理有没有免密 sudo 的默认账户;查认证日志里有没有“无密码账户密码认证成功”的记录,社区提供了检测脚本。
处置
升级到 10.6p2。无法立即升级的,用 drop-in 配置关掉密码认证:PasswordAuthentication no、KbdInteractiveAuthentication no,然后重启 sshd。
长期做法
面向公网的 sshd 收敛为仅密钥认证并限制来源 IP。这条建议说了很多年,这次它真的救场。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。