安全攻防
morning
OpenSSH/musl密码认证绕过漏洞复现与分析(CVE-2026-123158)
摘要
一、漏洞说明 CVE官方链接: https://www.cve.org/CVERecord?id=CVE-2026-123158 Linux 平台上,版本早于 10.6p2 的 OpenSSH 中的 sshd 服务:在使用 musl libc、且未启用 PAM 的环境下,缺少针对密码认证绕过漏洞的修复逻辑(问题根源是程序错误判断一段字符串是否为密码哈希值)。在满足特定账号配置的情况下,长度介于 2...
rootfs
musl
sshd
Alpine
opt
lab
Linux
libc
chroot
alpine
2026-11-09
1 阅读
约10分钟阅读
先知社区
字号:
一、漏洞说明 CVE官方链接: https://www.cve.org/CVERecord?id=CVE-2026-123158 Linux 平台上,版本早于 10.6p2 的 OpenSSH 中的 sshd 服务:在使用 musl libc、且未启用 PAM的环境下,缺少针对密码验证绕过漏洞的修复逻辑(问题根源是程序错误判断一段字符串是否为密码哈希值)。在满足特定账号配置的系统下,长度为256~1024字符之间的任意密码验证通过。使用 musl libc 并且不开启 PAM 的典型:Alpine Linux。该漏洞来自muslibc的crypt()函数在失败时返回单字符“(不是POSIX规定的NULL),而OpenSSH未启用PAM的认证路径中,对密码字段为该账户借用其他账户的真实盐值执行cryptO校验。当攻击者提交257~1024字节的超长密码时,musl的crypt0因KEY_MAX(256) )长度限制返回,与影子密码字段比较准确,strcmp判定通过,攻击者可利用该漏洞密码消耗任何有效凭证即可通过SSH认证登录允许SSH登录或控制已锁定密码的账户成功。绕过认证后,若目标账户具备免密sudo/doas权限(如Alpine云镜像默认alpine用户),攻击者可直接提权至root实现完全。二、基本信息公开 2026-11-05 威胁类型认证绕过 CVSS 3.1 9.8(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) 利用条件 徒步、喷气旅行 三、飞行版本 2016 年以来至 10.6p2 之前,运行于 musl libc 且未启用 PAM 的 OpenSSH 时间sshd(Alpine、OpenWrt、Buildroot、Yocto 及 musl Docker 镜像) 四、组件影响 OpenSSH 是 OpenBSD 项目维护的广泛使用的开源 SSH 远程登录与加密传输服务组件,被广泛影响 Linux、Unix 及嵌入式系统。musl libc 是面向嵌入式与容器场景的轻量级 C 标准库,被 Alpine Linux、 OpenWrt、Buildroot、Yocto 及大量 Docker 镜像采用。 五、使用条件 sshd键接 muss libc, 且未启用 PAM; PasswordAuthentication yes (默认开启); 影子密码字段为 * 的帐户; 提供系统中至少还有一个带真实密码的帐户, 用于可借用的盐; 攻击者可以在同一个 TCP 连接内完成两次验证尝试。 六、环境搭建 1、环境搭建 Kali Linux (45.76.xx.xx:2233) └── /opt/lab/rootfs Alpine 3.24.4 chroot(musl 1.2.6) ├── /build/sshd 源码编译的 OpenSSH 10.3p1(无补丁) ├── /build/sshd-session 会话进程 ├── /build/sshd-auth 认证进程(漏洞代码所在) └── 监听 0.0.0.0:2227 2、下载并解压Alpine rootfs 下载Alpine的最小根文件系统(约3.6 MB),解压到 /opt/lab/rootfs ,之后所有的实验都在这里面,不会到接下来机的kali系统。 mkdir -p /opt/lab && cd /opt/lab curl -# -O https://dl-cdn.alpinelinux.org/alpine/v3.24/releases/x86_64/alpine-minirootfs-3.24.4-x86_64.tar.gz ls -lh alpine-minirootfs-3.24.4-x86_64.tar.gz mkdir -p rootfs tar xzf alpine-minirootfs-3.24.4-x86_64.tar.gz -C rootfs ls rootfs 3、挂载 /dev 、 /proc ,进入 chroot cd /opt/lab mount --bind /dev rootfs/dev mount -t proc proc rootfs/proc cp /etc/resolv.conf rootfs/etc/resolv.conf mount | grep /opt/lab/rootfs chroot rootfs /bin/sh -c 'cat /lib/ld-musl-x86_64.so.1 2>&1 | head id' 4、在 chroot 里安装编译工具 chroot /opt/lab/rootfs /bin/sh -c 'apk update && apk add --no-cache build-base openssl-dev zlib-dev perl openssh-keygen' chroot /opt/lab/rootfs /bin/sh -c 'gcc --version | make --version | head -1; command -v ssh-keygen perl' 5、下载 OpenSSH 10.3p1 将OpenSSH 10.3p1源码并影响 chroot(影响范围是「10.6p2之前」,10.3p1在区间内) https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.3p1.tar.gz ls -lh openssh-10.3p1.tar.gz tar xzf openssh-10.3p1.tar.gz rm -rf rootfs/build cp -a openssh-10.3p1 rootfs/build ls rootfs/build | 源码2.0 MB,已悉 rootfs/build 6、configure(在 chroot 里) 7、编译 grep -i 'PAM support' /opt/lab/rootfs/tmp/configure.log chroot /opt/lab/rootfs /bin/sh -c 'cd /build && make -j2 sshd sshd-session sshd-auth > /tmp/make.log 2>&1; "exit=$?"; ls -l sshd sshd-session sshd-auth' 三个二进制分别对应:监听器 sshd 、会话进程 sshd-session 、认证逻辑 sshd-auth (漏洞代码在这里)。 8、给sshd链接两个helper mkdir -p /opt/lab/rootfs/usr/local/libexec ln -sf /build/sshd-session /opt/lab/rootfs/usr/local/libexec/sshd-session ln -sf /build/sshd-auth /opt/lab/rootfs/usr/local/libexec/sshd-auth ls -l /opt/lab/rootfs/usr/local/
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱