开发者生态
morning
Alpine Linux 安全公告:OpenSSH 服务器密码身份验证绕过
2026-11-06
1 阅读
约9分钟阅读
pantalaimon
字号:
2026-11-05 安全公告: openssh-server 密码身份验证绕过 如果您在 Alpine Linux 上运行 sshd,请立即更新 openssh 并重新启动 sshd 。单独升级软件包不会替换正在运行的守护进程。如果您还无法更新,至少禁用密码登录:在 sshd 配置中将 PasswordAuthentication 设置为 no 并重新启动 sshd 。任何一个都可以堵住这个洞。问题是什么?能够访问您的 SSH 端口的攻击者无需知道任何密码即可登录。它需要一次连接,每次都有效,并且不需要重试。攻击者需要密码字段为 * 的帐户名称(没有设置密码的帐户,这对于仅密钥帐户来说是正常的),并且需要计算机至少有一个具有 $5$ 或 $6$ 密码哈希值的其他帐户。然后攻击者发送一个非常长的密码(257 到 1024 字节)。一个拥有密码的用户就足够了:它使得每个没有密码的帐户都可以访问。详细信息请参见 OpenSSH 10.6p2 发行说明。截至撰写本文时,尚未分配 CVE 标识符。谁受到影响?如果满足以下所有条件,您就会受到影响:您运行 Alpine openssh-server 软件包(该软件包是在没有 PAM 的情况下构建的),或者您使用 UsePAM no 运行 openssh-server-pam 。 ( UsePAM yes 的 openssh-server-pam 不受影响。)PasswordAuthentication 为 yes(OpenSSH 默认值,除非您更改它)。该机器有一个密码字段为 * 的帐户。这包括: root ,从 Alpine 3.16 开始,它在基础镜像中作为 root:* 提供。 OpenSSH 的默认 PermitRootLogin 禁止密码保护 root,因此只有设置 PermitRootLogin yes 才能访问 root。如果另一个可以登录的帐户能够成为 root(例如通过 doas ),那么这并没有帮助。使用 adduser 不带密码或使用 usermod -p '*' 创建的任何仅密钥用户。通过 musl-nscd(nslcd、winbind、sssd)来自目录服务的用户,因为他们没有影子条目。官方微云图像中的 alpine 用户(见下文)。至少一个本地帐户具有 5 美元或 6 美元的密码哈希值。受影响的版本:我们检查的每个 Alpine 版本,3.21 到 3.24 和 Edge,以及不再接收定期更新的旧版本(3.16 到 3.20)。谁不受影响? Docker 和其他不在容器中运行 sshd 的容器用户。带有密码验证的系统没有。使用 openssh-server-pam 且 UsePAM yes 的系统(如果 UsePAM no,您会受到影响)。锁定帐户:那些有 !作为 /etc/shadow 中的密码字段(以 user:!: 开头的行)。他们无法使用密码或密钥登录。没有帐户具有 $ 式密码哈希的系统。通过cloud-init配置的云镜像,其中写入PasswordAuthentication no。我该如何修复它? 1.更新apk update -U -a Alpine 3.21.10、3.22.8、3.23.8和3.24.4包含修复包(参见发布公告)。固定软件包版本为: Branch 固定 openssh 版本 edge 10.6_p2-r0 3.24 10.3_p1-r2 3.23 10.2_p1-r1 3.22 10.0_p1-r11 3.21 9.9_p2-r1 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 升级后重新启动 sshd ( rc-service sshd restart )。升级软件包不会重新启动正在运行的 sshd ,因此您必须在之后执行此操作。 2. 如果无法更新:禁用密码身份验证 在开始之前,请确保您的 SSH 密钥登录有效,并保持当前会话打开,直到测试新登录。以 root 身份运行它们。前两个命令创建一个嵌入式文件。 Alpine 的默认 sshd_config 从 3.19 开始读取该目录;旧版本会忽略它。 sed 命令将 /etc/ssh/sshd_config 中的每个 PasswordAuthentication 行上的 yes 更改为 no,无论间距如何,包括 Match 块内的行。如果没有这样的行,它还会在文件顶部添加 PasswordAuthentication no ,并将原始文件保存为 /etc/ssh/sshd_config.bak 。最后两个命令检查配置,重新启动守护程序,并显示结果: mkdir -p /etc/ssh/sshd_config.d echo 'PasswordAuthentication no' > /etc/ssh/sshd_config.d/00-no-passwords.conf sed -i.bak -e '1i PasswordAuthentication no' \ -e 's/^\(\s*PasswordAuthentication[^y#]*\)yes/\1no/i' \ /etc/ssh/sshd_config sshd -t && rc-service sshd restart sshd -T | grep -ipasswordauthentication 最后一个命令应该打印passwordauthentication no。要撤消,请删除 /etc/ssh/sshd_config.d/00-no-passwords.conf 并将 /etc/ssh/sshd_config.bak 复制回 /etc/ssh/sshd_config 。云映像 (tiny-cloud) 从 3.18.11 到 3.24.3,官方的 tiny-cloud 映像(qcow2、VHD 和 AMI 工件)为 alpine 用户提供了 * 密码字段和无密码 doas 。它们在首次启动时是安全的。只要机器上存在任何 $6$ 哈希值,它们就可以被利用,例如当管理员设置控制台密码或用户数据使用 hashed_passwd 添加用户时。然后,攻击者获得 alpine 的 shell,并可以使用 doas 成为 root。从 3.21.10、3.22.8、3.23.8、3.24.4 及更高版本构建的映像包含固定包。图片来自 厄尔利
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱