只要一次连接,不需要反复尝试,远程攻击者就可能进入受影响的Alpine Linux服务器——前提是目标环境满足一组相当具体的条件。Alpine发布的安全公告给出了这个结论,并提醒在条件具备时利用门槛极低。
官方的解决方法就是升级到OpenSSH 10.6p2版本。
veketx系统用户更新到20261106之后的版本。

受影响的是在关闭PAM支持、使用musl libc的特定Linux系统上运行的OpenSSH。2026年11月5日发布的Portable OpenSSH 10.6p2加入了一个规避方案,堵住攻击者经由sshd触发该问题的路径。OpenSSH开发者认为根因在sshd之外,但攻击者可以通过sshd把它触发出来,因此新版本选择封路,而不是把问题定性为影响所有OpenSSH安装的缺陷。
问题由Wakefield的Özgün Kültekin报告。Alpine在发布公告时尚未分配CVE编号。
触发链条拆开看
Alpine的标准openssh-server包在构建时不含PAM,而PAM正是处理登录校验的框架。运行openssh-server-pam、但配置为UsePAM no的服务器同样暴露。此外,密码认证必须处于开启状态,且特定的密码记录必须存在。
按Alpine安全公告的描述,目标账户的密码字段必须是*。同时,本地至少还要有另一个账户存有$5$或$6$开头的密码哈希。这意味着为纯密钥登录创建的账户也可能成为目标,尽管其用户从未设置过密码。
没有PAM时,sshd调用C库的crypt()函数校验密码。当存储字段短到放不下一个salt时,它会借用另一个账户的salt。此时若输入一个超长密码,musl会把*作为错误值返回,而这个值恰好与目标账户存储的字段相同,认证就此通过。
风险还延伸到Alpine 3.18.11至3.24.3的官方tiny-cloud镜像。这些镜像的alpine账户密码字段为*,并带有免密doas权限。一旦加入符合条件的密码哈希,镜像就进入可利用状态,攻击者登录后可能拿到root权限。
与早前OpenSSH客户端和服务端的漏洞不同,这个问题直接作用于密码校验环节。配置了PasswordAuthentication no的系统,或启用PAM并使用UsePAM yes的服务器不受影响;不运行sshd的容器也不在受影响范围内。
修复与排查
管理员应安装Alpine的修复包并重启sshd。只更新而不重启,旧的服务器进程仍在运行。已修复的版本包括Alpine 3.21.10、3.22.8、3.23.8和3.24.4。较旧的分支也收到了补丁包,因此OpenSSH版本号较低并不自动等于仍然存在漏洞。
如果补丁必须延后,可先设置PasswordAuthentication no,确认密钥登录可用,并在保留现有会话的情况下重启sshd。随后检查/var/log/messages中涉及无密码账户的Accepted password for记录,再排查异常的doas活动和新出现的authorized keys。
OpenSSH的发布说明确认了上游的规避方案。Alpine建议,在无法排除未授权访问的情况下,应把相关机器视为已被入侵。
257字节密码就能登进无密码账户,OpenSSH紧急发版
攻击者可以登录那些没有设置密码的账户,比如只允许SSH密钥登录的账号。前提是这台服务器跑着标准的 openssh-server 包,并且是 Alpine Linux。攻击者需要能访问到服务器、知道一个账户名,再配上一段长度在 257 到 1,024 字节之间的密码。

OpenSSH 把这个漏洞定为严重级别,今天发布 10.6p2 版本堵住它。Alpine 也为一路回溯到 3.16 的每个发行版发布了修复包。
触发条件并不复杂:OpenSSH 服务端(sshd)在不经过 PAM 接口的情况下自行校验密码、密码登录处于开启状态、机器上至少还有一个别的账户设了密码。Alpine 的 openssh-server 包正是在不带 PAM 的情况下构建的,而密码登录默认开着。
问题出在 sshd 与 musl 的配合上,musl 是 Alpine 所基于的 C 库。OpenSSH 项目的 Damien Miller 说,非 Linux 系统、基于 glibc 构建的 Linux 系统,以及通过 PAM 校验密码的系统都不受影响。
他对所有运行受影响系统的人给出的建议很直接:“立刻设置 PasswordAuthentication=no,或者直接关掉这些机器上的 SSH。”目前还没有报告显示该漏洞被实际利用。
哪些机器暴露在外
Alpine 的安全公告列了四个条件,四条同时成立才算暴露:
运行 openssh-server 包(不带 PAM 构建),或者运行 openssh-server-pam 但把 UsePAM 设为 no;
PasswordAuthentication 为 yes,这也是 OpenSSH 的默认值;
某个账户的密码字段是 *,意味着没有设置密码;
至少还有一个本地账户的密码哈希以 $5$ 或 $6$ 开头。
攻击者还需要知道那个无密码账户的名字。只要有一个账户设了密码,就足以让所有无密码账户暴露。公告称,这种攻击单次连接、每次尝试都能成功。
在 Alpine 上,没有设置密码的账户包括:用 adduser 创建时未设密码、或用 usermod -p '*' 处理的仅密钥用户;通过 musl-nscd 从目录服务来的用户,因为他们没有 shadow 条目;root,自大约 Alpine 3.16 起基础镜像里就是 root:*;以及用 tiny-cloud 构建的官方云镜像里的 alpine 用户。
root 受默认的 PermitRootLogin prohibit-password 设置保护,只有把 PermitRootLogin 设为 yes 才能直接登录。但如果一个暴露的账户能提权到 root,比如通过 doas,这层保护就失效了。
3.18.11 到 3.24.3 的 tiny-cloud 镜像给 alpine 用户配了免密 doas。它们首次启动时是安全的,可一旦机器上出现任何 $6$ 哈希——比如管理员设了一个控制台密码——就会变得可被攻击。攻击者随后能以 alpine 登录,再用 doas 变成 root。
不运行 sshd 的容器、PasswordAuthentication 设为 no 的系统、通过 cloud-init 配置过该设置的云镜像都不受影响。/etc/shadow 里用 ! 锁定的账户也不受影响,机器上没有任何账户带 $ 开头哈希的情况同样不受影响。
这个漏洞不限于 Alpine。报告者、Wakefield 的 Özgün Kültekin 在技术文章里点名 OpenWrt、Buildroot 和 Yocto 是其他值得检查的 musl 系统。OpenWrt 默认用 Dropbear 处理 SSH,Kültekin 说 Dropbear 不受影响;在 OpenWrt 上,只有管理员装了 OpenSSH 服务端时这个问题才有意义。
怎么修
在 Alpine 上,修复就是更新包再重启,因为升级包不会重启正在运行的 sshd:
更新包:apk upgrade -U -a
重启服务:rc-service sshd restart
点版本 3.21.10、3.22.8、3.23.8 和 3.24.4 已包含修复包。3.16 到 3.21 分支虽已过支持期,也拿到了修复包。从更早的 tiny-cloud 镜像启动的云实例仍需更新,或者改下面的设置。
自己构建 OpenSSH 的话,10.6p2 版本包含这项改动。暂时无法更新,关掉密码登录同样能挡住攻击。先确认密钥登录可用,并保持当前会话不关,直到新登录成功。然后把 PasswordAuthentication 设为 no,用 sshd -t 检查配置,再重启 sshd。
公告给出了在 /etc/ssh/sshd_config.d 下 drop-in 文件里添加该设置的命令,Alpine 从 3.19 起的默认配置会读取这个目录。这些命令还会把 /etc/ssh/sshd_config 里每一行 PasswordAuthentication 从 yes 改成 no,包括 Match 块里的行。之后 sshd -T | grep -i passwordauthentication 应输出 passwordauthentication no。
公告建议到 /var/log/messages 里找 sshd 的 Accepted password for 记录,看是否出现了本无密码的账户,比如 alpine、root 或仅密钥用户。在暴露的机器上,还要检查 doas 的使用、近期新建的用户、文件以及 authorized keys。
公告的原话是:“如果你无法排除某次登录,就把这台机器当作已被入侵处理。”
长密码为什么能奏效
没有 PAM 时,sshd 自己校验密码。它用 crypt() 对尝试的密码做哈希,再与存储字段比对。无密码账户的字段里只有一个 *,太短,放不下盐值,于是 sshd 借用另一个有真实哈希账户的盐。
对 $5$ 和 $6$ 两种哈希类型,musl 的 crypt() 拒绝超过 256 字节的密码,并返回 * 表示出错。这个 * 与存储的 * 匹配,sshd 便接受了登录。区间上限 1,024 字节是 sshd 自身对单个密码的限制。
这一行为源自 musl 在 2012 年 8 月 9 日的一次改动,让失败的 crypt() 调用返回“一个无法匹配的哈希而不是 NULL”,因为很多程序不检查失败。256 字节的上限在 2012 年 8 月 29 日跟进,用于保护服务器免受拒绝服务攻击。
借用盐的做法来自 OpenSSH 2016 年 7 月 15 日的一次改动,当时是为了修 CVE-2016-6210,那个漏洞会让攻击者探知哪些用户名存在。Kültekin 说问题从那时起就存在了。
10.6p2 的代码改动让 sshd 在存储字段短于四个字符时拒绝匹配。OpenSSH 称这是一个权宜之计,根本原因在 sshd 之外。Alpine 的稳定版包也带了针对同一问题的补丁。
修复为什么第二天就到
Miller 的团队本周早些时候得知这个漏洞,并以最快速度发布了修复。在发布公告里他说,团队现在认为长时间的保密期是危险的,主要帮的是攻击者,因为最近看到 AI 智能体把同样的 bug 又找了出来,有时只用几个小时。
截至今天,这个漏洞还没有分配 CVE 编号。
OpenSSH组合漏洞可让任何人登入系统
安全研究人员披露OpenSSH与musl-libc的一项组合缺陷,在满足条件的系统上,攻击者只需将任意超过256字符的字符串当作密码输入,即可登入系统,多家发行版与容器镜像受影响。
该缺陷在Buildroot、Yocto和Void Linux等项目中存在(未必默认启用)。最受关注的是Alpine Linux,它被大量用于Docker、Kubernetes、Proxmox容器及云主机等场景,且默认开启密码认证,需要立即修补。
漏洞组合条件为:使用OpenSSH、未显式关闭密码认证、未使用PAM,且存在一个设置了SHA-512/256哈希密码的任意用户。项目已发布紧急修复。
最简便的缓解措施是管理员在OpenSSH配置中将“PasswordAuthentication”显式设为“no”并重启服务。尽管多数Alpine等安装并不直接暴露在互联网,但企业内网、家庭实验室、云网络或VPN中的攻击者一旦获得一个有效账户即可长驱直入。
官方的解决方法就是升级到OpenSSH 10.6p2版本。
veketx系统用户更新到20261106之后的版本。

受影响的是在关闭PAM支持、使用musl libc的特定Linux系统上运行的OpenSSH。2026年11月5日发布的Portable OpenSSH 10.6p2加入了一个规避方案,堵住攻击者经由sshd触发该问题的路径。OpenSSH开发者认为根因在sshd之外,但攻击者可以通过sshd把它触发出来,因此新版本选择封路,而不是把问题定性为影响所有OpenSSH安装的缺陷。
问题由Wakefield的Özgün Kültekin报告。Alpine在发布公告时尚未分配CVE编号。
触发链条拆开看
Alpine的标准openssh-server包在构建时不含PAM,而PAM正是处理登录校验的框架。运行openssh-server-pam、但配置为UsePAM no的服务器同样暴露。此外,密码认证必须处于开启状态,且特定的密码记录必须存在。
按Alpine安全公告的描述,目标账户的密码字段必须是*。同时,本地至少还要有另一个账户存有$5$或$6$开头的密码哈希。这意味着为纯密钥登录创建的账户也可能成为目标,尽管其用户从未设置过密码。
没有PAM时,sshd调用C库的crypt()函数校验密码。当存储字段短到放不下一个salt时,它会借用另一个账户的salt。此时若输入一个超长密码,musl会把*作为错误值返回,而这个值恰好与目标账户存储的字段相同,认证就此通过。
风险还延伸到Alpine 3.18.11至3.24.3的官方tiny-cloud镜像。这些镜像的alpine账户密码字段为*,并带有免密doas权限。一旦加入符合条件的密码哈希,镜像就进入可利用状态,攻击者登录后可能拿到root权限。
与早前OpenSSH客户端和服务端的漏洞不同,这个问题直接作用于密码校验环节。配置了PasswordAuthentication no的系统,或启用PAM并使用UsePAM yes的服务器不受影响;不运行sshd的容器也不在受影响范围内。
修复与排查
管理员应安装Alpine的修复包并重启sshd。只更新而不重启,旧的服务器进程仍在运行。已修复的版本包括Alpine 3.21.10、3.22.8、3.23.8和3.24.4。较旧的分支也收到了补丁包,因此OpenSSH版本号较低并不自动等于仍然存在漏洞。
如果补丁必须延后,可先设置PasswordAuthentication no,确认密钥登录可用,并在保留现有会话的情况下重启sshd。随后检查/var/log/messages中涉及无密码账户的Accepted password for记录,再排查异常的doas活动和新出现的authorized keys。
OpenSSH的发布说明确认了上游的规避方案。Alpine建议,在无法排除未授权访问的情况下,应把相关机器视为已被入侵。
257字节密码就能登进无密码账户,OpenSSH紧急发版
攻击者可以登录那些没有设置密码的账户,比如只允许SSH密钥登录的账号。前提是这台服务器跑着标准的 openssh-server 包,并且是 Alpine Linux。攻击者需要能访问到服务器、知道一个账户名,再配上一段长度在 257 到 1,024 字节之间的密码。

OpenSSH 把这个漏洞定为严重级别,今天发布 10.6p2 版本堵住它。Alpine 也为一路回溯到 3.16 的每个发行版发布了修复包。
触发条件并不复杂:OpenSSH 服务端(sshd)在不经过 PAM 接口的情况下自行校验密码、密码登录处于开启状态、机器上至少还有一个别的账户设了密码。Alpine 的 openssh-server 包正是在不带 PAM 的情况下构建的,而密码登录默认开着。
问题出在 sshd 与 musl 的配合上,musl 是 Alpine 所基于的 C 库。OpenSSH 项目的 Damien Miller 说,非 Linux 系统、基于 glibc 构建的 Linux 系统,以及通过 PAM 校验密码的系统都不受影响。
他对所有运行受影响系统的人给出的建议很直接:“立刻设置 PasswordAuthentication=no,或者直接关掉这些机器上的 SSH。”目前还没有报告显示该漏洞被实际利用。
哪些机器暴露在外
Alpine 的安全公告列了四个条件,四条同时成立才算暴露:
运行 openssh-server 包(不带 PAM 构建),或者运行 openssh-server-pam 但把 UsePAM 设为 no;
PasswordAuthentication 为 yes,这也是 OpenSSH 的默认值;
某个账户的密码字段是 *,意味着没有设置密码;
至少还有一个本地账户的密码哈希以 $5$ 或 $6$ 开头。
攻击者还需要知道那个无密码账户的名字。只要有一个账户设了密码,就足以让所有无密码账户暴露。公告称,这种攻击单次连接、每次尝试都能成功。
在 Alpine 上,没有设置密码的账户包括:用 adduser 创建时未设密码、或用 usermod -p '*' 处理的仅密钥用户;通过 musl-nscd 从目录服务来的用户,因为他们没有 shadow 条目;root,自大约 Alpine 3.16 起基础镜像里就是 root:*;以及用 tiny-cloud 构建的官方云镜像里的 alpine 用户。
root 受默认的 PermitRootLogin prohibit-password 设置保护,只有把 PermitRootLogin 设为 yes 才能直接登录。但如果一个暴露的账户能提权到 root,比如通过 doas,这层保护就失效了。
3.18.11 到 3.24.3 的 tiny-cloud 镜像给 alpine 用户配了免密 doas。它们首次启动时是安全的,可一旦机器上出现任何 $6$ 哈希——比如管理员设了一个控制台密码——就会变得可被攻击。攻击者随后能以 alpine 登录,再用 doas 变成 root。
不运行 sshd 的容器、PasswordAuthentication 设为 no 的系统、通过 cloud-init 配置过该设置的云镜像都不受影响。/etc/shadow 里用 ! 锁定的账户也不受影响,机器上没有任何账户带 $ 开头哈希的情况同样不受影响。
这个漏洞不限于 Alpine。报告者、Wakefield 的 Özgün Kültekin 在技术文章里点名 OpenWrt、Buildroot 和 Yocto 是其他值得检查的 musl 系统。OpenWrt 默认用 Dropbear 处理 SSH,Kültekin 说 Dropbear 不受影响;在 OpenWrt 上,只有管理员装了 OpenSSH 服务端时这个问题才有意义。
怎么修
在 Alpine 上,修复就是更新包再重启,因为升级包不会重启正在运行的 sshd:
更新包:apk upgrade -U -a
重启服务:rc-service sshd restart
点版本 3.21.10、3.22.8、3.23.8 和 3.24.4 已包含修复包。3.16 到 3.21 分支虽已过支持期,也拿到了修复包。从更早的 tiny-cloud 镜像启动的云实例仍需更新,或者改下面的设置。
自己构建 OpenSSH 的话,10.6p2 版本包含这项改动。暂时无法更新,关掉密码登录同样能挡住攻击。先确认密钥登录可用,并保持当前会话不关,直到新登录成功。然后把 PasswordAuthentication 设为 no,用 sshd -t 检查配置,再重启 sshd。
公告给出了在 /etc/ssh/sshd_config.d 下 drop-in 文件里添加该设置的命令,Alpine 从 3.19 起的默认配置会读取这个目录。这些命令还会把 /etc/ssh/sshd_config 里每一行 PasswordAuthentication 从 yes 改成 no,包括 Match 块里的行。之后 sshd -T | grep -i passwordauthentication 应输出 passwordauthentication no。
公告建议到 /var/log/messages 里找 sshd 的 Accepted password for 记录,看是否出现了本无密码的账户,比如 alpine、root 或仅密钥用户。在暴露的机器上,还要检查 doas 的使用、近期新建的用户、文件以及 authorized keys。
公告的原话是:“如果你无法排除某次登录,就把这台机器当作已被入侵处理。”
长密码为什么能奏效
没有 PAM 时,sshd 自己校验密码。它用 crypt() 对尝试的密码做哈希,再与存储字段比对。无密码账户的字段里只有一个 *,太短,放不下盐值,于是 sshd 借用另一个有真实哈希账户的盐。
对 $5$ 和 $6$ 两种哈希类型,musl 的 crypt() 拒绝超过 256 字节的密码,并返回 * 表示出错。这个 * 与存储的 * 匹配,sshd 便接受了登录。区间上限 1,024 字节是 sshd 自身对单个密码的限制。
这一行为源自 musl 在 2012 年 8 月 9 日的一次改动,让失败的 crypt() 调用返回“一个无法匹配的哈希而不是 NULL”,因为很多程序不检查失败。256 字节的上限在 2012 年 8 月 29 日跟进,用于保护服务器免受拒绝服务攻击。
借用盐的做法来自 OpenSSH 2016 年 7 月 15 日的一次改动,当时是为了修 CVE-2016-6210,那个漏洞会让攻击者探知哪些用户名存在。Kültekin 说问题从那时起就存在了。
10.6p2 的代码改动让 sshd 在存储字段短于四个字符时拒绝匹配。OpenSSH 称这是一个权宜之计,根本原因在 sshd 之外。Alpine 的稳定版包也带了针对同一问题的补丁。
修复为什么第二天就到
Miller 的团队本周早些时候得知这个漏洞,并以最快速度发布了修复。在发布公告里他说,团队现在认为长时间的保密期是危险的,主要帮的是攻击者,因为最近看到 AI 智能体把同样的 bug 又找了出来,有时只用几个小时。
截至今天,这个漏洞还没有分配 CVE 编号。
OpenSSH组合漏洞可让任何人登入系统
安全研究人员披露OpenSSH与musl-libc的一项组合缺陷,在满足条件的系统上,攻击者只需将任意超过256字符的字符串当作密码输入,即可登入系统,多家发行版与容器镜像受影响。
该缺陷在Buildroot、Yocto和Void Linux等项目中存在(未必默认启用)。最受关注的是Alpine Linux,它被大量用于Docker、Kubernetes、Proxmox容器及云主机等场景,且默认开启密码认证,需要立即修补。
漏洞组合条件为:使用OpenSSH、未显式关闭密码认证、未使用PAM,且存在一个设置了SHA-512/256哈希密码的任意用户。项目已发布紧急修复。
最简便的缓解措施是管理员在OpenSSH配置中将“PasswordAuthentication”显式设为“no”并重启服务。尽管多数Alpine等安装并不直接暴露在互联网,但企业内网、家庭实验室、云网络或VPN中的攻击者一旦获得一个有效账户即可长驱直入。
文章来源:
网络小编D
版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站立刻删除。
