OpenSSH口令认证绕过安全通告-CVE-2026-123158
观安MSS运营团队
观安MSS运营团队
观安无相实验室
2026年11月6日 16:59
浙江
去阅读
一、漏洞概述
2026 年 11 月 5 日,OpenSSH 发布 10.6p2,修复口令认证绕过漏洞 CVE-2026-123158,研究者称为 sshhole。同日 Alpine Linux 发布安全公告。报告人为 Wakefield 的 Özgün Kültekin。
公开评分以 CVSS 3.1 的 8.1 为准,向量为 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H。部分厂商按更低攻击复杂度评为 9.8。
这个漏洞它只出现在链接 musl libc、并且没有走 PAM 的 sshd 上。glibc 发行版的常规安装,默认启用 PAM,不受本次漏洞影响。
二、漏洞原理
未启用 PAM 时,sshd 用 C 库的 crypt() 计算用户提交的口令,再与 shadow 中保存的字段比较。2016 年为缓解用户名枚举(CVE-2016-6210),OpenSSH 对短到放不下一个 salt 的字段会借用另一个账户的 salt。musl 的 crypt() 在口令超过 256 字节时返回字符串 \。这个返回值与“未设置口令”账户保存的 \ 相同,比较通过,认证成功。
一次利用需要下面四个条件同时成立。口令长度约在 257 至 1024 字节,一次连接即可成功,不需要正确口令。
| 条件 | 说明 |
| 运行环境 | sshd 链接 musl,且编译或配置为不使用 PAM。Alpine 默认包 openssh-server 属于此类 |
| 认证开关 | PasswordAuthentication 为 yes。这是 OpenSSH 默认值 |
| 目标账户 | 口令字段恰好为 \*。常见于未设口令的 root、仅密钥账户、目录服务映射用户,以及 tiny-cloud 镜像中的 alpine 用户 |
| 盐来源 | 本机至少还有一个账户的口令哈希以 $5$ 或 $6$ 开头 |
root 还受 PermitRootLogin 约束。默认 prohibit-password 时,不能直接登录 root。若另一个可登录账户能通过 doas 或 sudo 提权,攻击者仍可在登录后成为 root。口令字段为 ! 的锁定账户不在本次绕过范围内。OpenSSH 项目认为根因在 sshd 之外,但可通过 sshd 利用,因此在 10.6p2 的 sshd 中做了规避。Alpine 稳定分支回植了同一修复,包版本不一定升到 10.6p2。
三、影响版本
Alpine 已核查 3.16 至 3.24 以及 edge,含已停止常规更新的 3.16 至 3.20。3.21 已于 2026 年 11 月 1 日结束支持,项目仍回溯发布了修复包。修复包版本如下。
| 分支 | 修复后的 openssh 版本 | 发行版节点 |
| edge | 10.6\_p2-r0 | edge |
| 3.24 | 10.3\_p1-r2 | 3.24.4 |
| 3.23 | 10.2\_p1-r1 | 3.23.8 |
| 3.22 | 10.0\_p1-r11 | 3.22.8 |
| 3.21 | 9.9\_p2-r1 | 3.21.10 |
| 3.20 | 9.7\_p1-r6 | 已停止常规支持,仍有修复包 |
| 3.19 | 9.6\_p1-r3 | 同上 |
| 3.18 | 9.3\_p2-r4 | 同上 |
| 3.17 | 9.1\_p1-r7 | 同上 |
| 3.16 | 9.0\_p1-r6 | 同上 |
自行编译、且未启用 PAM 的 musl 版 OpenSSH,修复起点是上游 10.6p2。启用 PAM,或已经设置 PasswordAuthentication no 的系统,不在受影响范围内。OpenBSD 自带的 OpenSSH 和 Dropbear 也不受影响。Red Hat 已声明其产品中不存在相应代码。
四、复现过程
容器启动 sshd 时加上 PermitRootLogin=yes。随后对本机该端口以 root 发起认证。终端先返回 Permission denied, please try again.,紧接着出现 uid=0(root)
本地复现结果
在 musl、未启用 PAM、口令认证开启,并且允许 root 口令登录时,未持有正确口令也可以登录 root。
五、修复与缓解
对公网或跨安全域开放 22 端口、且四条条件都成立的主机,应立即升级并重启 sshd。只升级软件包不会替换已经在跑的守护进程。
1. 升级上游包。自行编译的 OpenSSH 升级到 10.6p2 或更新版本,然后重启 sshd。
2. 升级 Alpine。执行 apk upgrade -U -a,再执行 rc-service sshd restart。包版本对照上一节的表,不必强求显示为 10.6p2。
3. 更新容器。重新构建镜像并滚动发布,确认旧 Pod 或旧容器已经退出。只作应用运行、内部没有 sshd 的 Alpine 容器不必因本次漏洞紧急处置。
4. 暂时不能升级时关闭口令登录。在 sshd\_config 中设置 PasswordAuthentication no,执行 sshd -t 后重启。重启前先确认密钥登录可用,并保留当前会话。Alpine 自 3.19 起会读取 /etc/ssh/sshd\_config.d,更老版本会忽略该目录,必须改主配置。改完后执行 sshd -T,确认输出含 passwordauthentication no。该措施不代替升级。
六、修复核验与排查
升级完成后核对下面五项。对升级前已经对不可信网络开放 SSH 的 Alpine 或 musl 主机,同时检查是否已经有登录。
1. 核对版本。包版本不低于上一节的表,或 ssh -V 显示 OpenSSH\_10.6p2 及以上。Alpine 回植包可以低于 10.6p2,以发行版公告中的包版本为准。
2. 核对进程。sshd 的启动时间必须晚于软件包安装时间。rc-service sshd restart 或等价操作必须实际执行过。
3. 核对配置。有效配置为 passwordauthentication no,或四条影响条件里至少有一条不成立。容器镜像摘要已更新,线上不再保留升级前的副本。
4. 新增检测规则。在 /var/log/messages 或本机 sshd 日志中查找本不应有口令的账户出现 Accepted password for,重点看 alpine、root 和仅密钥用户。同时看这些账户下是否新增 authorized\_keys、计划任务或用户,以及 doas、sudo 是否有非预期提权。不能排除已经登录成功的,按失陷主机处理:隔离、取证、从可信镜像重建,并轮换该机使用过的密钥和口令。
5.升级检测规则并执行批量核查。已部署 EDR 或态势检测组件的,将规则库升级至覆盖 CVE-2026-123158 的版本,并对前款资产下发一次全量检查。
来源:观安MSS运营服务团队
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论