超长密码可绕过OpenSSH密码登录,Alpine容器和Docker镜像风险最高

来源:A5站长网 时间:2026-11-09

腾讯云在11月6日发出安全通告,OpenSSH存在一个密码认证绕过漏洞,编号CVE-2026-123158,代号sshole,影响10.6p2之前的所有版本,风险等级评为高。通告里写明漏洞细节和验证代码都已公开。不需要账号、不需要用户点击的远程漏洞,从公开到被扫描器批量试探通常只有几天,对外网开放了SSH的机器要先把范围划出来,再按结果排升级顺序。

成因不在OpenSSH本体,在musl libc的crypt()函数。2012年的一次提交(b3c4cc12)把密码哈希失败时的返回值从空指针改成星号字符。之后补进来的SHA512实现为防拒绝服务,把输入长度上限设在256字节。超过上限的输入一律走失败分支,返回的同样是星号。两处改动分开看都合理,落在同一条校验路径上就出了问题。

两个星号撞在一起,校验就被骗过去了。/etc/shadow里禁止密码登录的账户,密码字段本身就是一个星号。攻击者提交257到1024字节的任意密码,crypt()因超长直接返回星号,与shadow里的星号比对成功。这一步不需要知道任何密码,256字节以上随便填什么都能过。原本用来禁止登录的星号,反过来成了通行证。这个漏洞的成立不依赖具体密码,只依赖字符串长度。

Alpine官方的AWS和Azure镜像里,默认的alpine用户正是这种星号账户,并且带免密doas权限。Docker镜像里用Alpine做基础镜像的占比很高,容器平台上很常见。借它登录,拿到的是直通root的一条路径,整个过程不需要任何凭据。

哪些系统不受影响

要利用成功,四个条件必须同时满足,缺一个都不成立。把条件逐条对上再判断,比看到通告就整体升级省事,也免得把不受影响的机器一起动。四条里最容易被忽略的是第四条。

一是目标运行在musl libc环境,比如Alpine、OpenWrt、Buildroot、Yocto;二是没启用PAM,Alpine的openssh-server默认不走PAM;三是系统里存在密码字段为星号的账户;四是另有账户带真实密码哈希。第四条说的是借来的salt本身要有值。

主流云镜像多用glibc加PAM,前两条都不满足。TencentOS、腾讯云公有云镜像里的RHEL 7到10、Ubuntu 20.04到26.04、Debian 11到13,以及CentOS、Rocky、AlmaLinux,都不在受影响范围内,手上是这些系统的可以先把注意力放到容器侧。

查法很直接:进容器跑ssh -V看版本号,低于10.6p2就在范围内;再翻一遍/etc/shadow里带星号的行,用sshd -T看usePAM的值。三项都对上,这台机器就是可利用的,缺一项都不用按这个漏洞处置。

修复有两条路。一是升到10.6p2;二是先关掉密码登录,在/etc/ssh/sshd_config.d/下新建一个配置文件写PasswordAuthentication no,再重启sshd。容器场景要注意,基础镜像升级了,正在跑的容器不会自动跟着变,要重新构建镜像再滚动替换。

相关文章

标签:

A5创业网 版权所有