CVE-2026-123158 · OpenSSH/musl 密码认证绕过
原创
67626d
67626d
暗影安全
2026年11月6日 12:42
北京
去阅读
已关注
关注
重播 分享 赞
关闭
观看更多
更多
退出全屏
切换到竖屏全屏退出全屏
暗影安全已关注
分享视频
,时长00:14
0/0
00:00/00:14
切换到横屏模式
继续播放
[ ]
进度条,百分之0
播放
00:00
/
00:14
00:14
倍速
全屏
倍速播放中
0.5倍0.75倍1.0倍1.5倍2.0倍
超清流畅
继续观看
CVE-2026-123158 · OpenSSH/musl 密码认证绕过
观看更多
原创
,
CVE-2026-123158 · OpenSSH/musl 密码认证绕过
暗影安全已关注
分享点赞在看
已同步到看一看写下你的评论
视频详情
现在就做:在服务器上跑一遍第 2 节的三条命令。全中 → 立刻 apk upgrade -U -a 并 重启 sshd;暂时不能升级 → 关掉密码认证并重启。只升级不重启等于没修。
01影响范围
一句话原理 + 谁中招、谁不用慌。
没启用 PAM 时,sshd 自己校验密码:账户没设密码(/etc/shadow 字段是 *),它会借别的账户的盐算一次;musl 的 crypt() 遇到超过 256 字节的密码会返回 * 表示「算不了」,两边一比相等,登录就通过了。攻击者不需要知道任何密码,只要知道一个「没密码」的账户名、能连到 SSH 端口。OpenSSH < 10.6p2 受影响。
| 中招(以下条件全部满足) | 不用慌 |
|---|---|
① sshd 跑在 musl libc 上 ② 未启用 PAM(Alpine 默认 openssh-server 就不带) ③ PasswordAuthentication yes(默认开) ④ 存在 shadow 字段恰为 * 的账户,且系统里另有 $5$/$6$ 哈希账户 |
glibc / libxcrypt 系(Debian、Ubuntu、RHEL、Fedora) UsePAM yes 的机器 Dropbear、OpenBSD 已关密码认证 / 没有裸 * 账户 / 没有盐源 锁成 !、!!、*LK* 的账户 |
| 典型环境: Alpine Linux、OpenWrt / Buildroot / Yocto 的 musl 构建、大量 musl 容器镜像 | 升级后: Alpine 3.16 起所有分支都有修复包;3.21.10 / 3.22.8 / 3.23.8 / 3.24.4 已内置 |
两个反直觉点:有密码的账户只是「提供盐」,被打进来的是没设密码的那个;若该账户有免密 doas/sudo(官方 tiny-cloud 镜像的 alpine 用户就是),一次登录直接到 root。
02自查方法
在目标主机本机以 root 执行,只读、不改配置、不做认证尝试。
① 是不是 musl + 无 PAM + 密码登录开着
ldd \"$(command -v sshd)\" | grep -Ei 'musl|libpam'
sshd -T | grep -Ei '^(usepam|passwordauthentication)'
看 sshd -T 的有效配置,别只看配置文件(drop-in 和 Match 块会覆盖)。出现 musl + usepam no + passwordauthentication yes 才继续。
② 有没有裸 * 账户和盐源
awk -F: '
NR==FNR { h[$1]=$2; if ($2==\"*\") t=t\" \"$1; next }
!f && h[$1] ~ /^\\$/ { f=h[$1] }
END { print \"目标账户:\", (t ? t : \"无\");
print \"盐源:\", (f ? substr(f,1,4) : \"无\") }' /etc/shadow /etc/passwd
目标账户非空、且盐源是 $5$ 或 $6$ → 条件齐备,按高危处理。
③ 版本和有没有已被登录的痕迹
ssh -V 2>&1
grep -E 'sshd.*Accepted password' /var/log/messages* 2>/dev/null \\
| grep -Ei 'for (root|alpine)'
本应无密码的账户出现 Accepted password 就是异常。这种攻击没有爆破噪声,别指望「连续失败 N 次」告警能报出来。无法排除异常登录,按已失陷处置。
03修复建议
按顺序执行,动作越少越好。
A · 首选:升级并重启(Alpine)
apk upgrade -U -a
rc-service sshd restart
sshd -t
sshd -T | grep -i passwordauthentication
升级包不会替换正在运行的 sshd 进程,必须手动重启。源码部署升到 >= 10.6p2 后重新编译安装并重启服务。
B · 暂时不能升级:关掉密码认证
# 先确认 SSH 密钥登录可用,保持当前会话不断开,另开终端验证成功后再执行
mkdir -p /etc/ssh/sshd_config.d
echo 'PasswordAuthentication no' > /etc/ssh/sshd_config.d/00-no-passwords.conf
sshd -t && rc-service sshd restart
sshd -T | grep -i passwordauthentication
最后一条应输出 passwordauthentication no。Alpine 3.19 以前不读 drop-in 目录,需直接改 /etc/ssh/sshd_config(含 Match 块里的行),同样用 sshd -T 复核。建议同时把 PermitRootLogin 设为 prohibit-password。
四个必须记住的点
- 别把 shadow 里的
*改成!
—— 无 PAM 的 Alpine 会当成账户锁定,连合法公钥登录一起拒掉。
* 升级 ≠ 修复
,重启 sshd 才算完成。
* 已暴露的机器,同步查 doas/sudo 记录、新增用户、authorized_keys 变更和异常文件。
* 官方 tiny-cloud 镜像自带 alpine 用户 + 免密 doas,设过任意 $6$ 密码后就「装弹」,镜像和存量实例都要查。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论