Security Digest · Nov 5, 2026 · Vulnerability · OS / kernel
SSHole: OpenSSH Password Bypass on Alpine and musl Linux
Any 257-1024 byte password logs into '*' accounts on OpenSSH without PAM on musl (Alpine). Fixed in 10.6p2 and Alpine packages. Check exposure now.
Our verdict
Check exposure
Most SSH servers run glibc and are not affected, but if you run OpenSSH on Alpine or another musl system with password logins enabled, this is a one-connection login with public details, so patch or turn off password authentication today.
Who must act: Anyone running openssh-server on Alpine Linux (including official AWS and Azure tiny-cloud images) or another musl-based system such as Buildroot, Yocto or OpenWrt with OpenSSH installed, without PAM and with PasswordAuthentication enabled.
Who can relax: Debian, Ubuntu, Fedora, RHEL and other glibc systems, sshd that authenticates through PAM, Dropbear, servers with PasswordAuthentication no, and Alpine containers that do not run sshd are not affected.
- Affected
- OpenSSH portable before 10.6p2 on Linux with musl libc and PAM disabled
Alpine Linux edge and 3.16 through 3.24 before the fixed openssh packages
Alpine tiny-cloud images 3.18.11 through 3.24.3 (alpine user with '*' password and passwordless doas) - Fixed in
- OpenSSH 10.6p2
Alpine edge: openssh 10.6_p2-r0
Alpine 3.24: 10.3_p1-r2
Alpine 3.23: 10.2_p1-r1
Alpine 3.22: 10.0_p1-r11
Alpine 3.21: 9.9_p2-r1
Alpine 3.20: 9.7_p1-r6
Alpine 3.19: 9.6_p1-r3
Alpine 3.18: 9.3_p2-r4
Alpine 3.17: 9.1_p1-r7
Alpine 3.16: 9.0_p1-r6
Alpine point releases 3.21.10, 3.22.8, 3.23.8, 3.24.4 - CVSS
- 8.1 (v3.1, CNA)
- EPSS
- Not yet scored
- CISA KEV
- Not listed
- Exploitation
- Public proof-of-concept
- Severity
- High
What to do
- On Alpine, run apk upgrade -U -a and then rc-service sshd restart; upgrading the package does not replace the running daemon.
- If you cannot patch right now, set PasswordAuthentication no in a file under /etc/ssh/sshd_config.d/, validate with sshd -t, and restart sshd, keeping a key-based session open while you do it.
- Find every musl-based host and container that runs sshd, including Alpine cloud instances, appliances built with Buildroot or Yocto, and OpenWrt devices where OpenSSH replaced Dropbear.
- Rebuild Alpine-based images that ship sshd and redeploy cloud instances from fixed point releases (3.21.10, 3.22.8, 3.23.8, 3.24.4 or later).
- If any host was reachable with password logins enabled, review its auth logs before you consider it clean, and treat it as compromised if you cannot rule out a login.
How to check if you are affected or compromised
- Check the version: apk version openssh (Alpine) or ssh -V, and compare with the fixed packages above.
- Check the running config: sshd -T | grep -Ei 'passwordauthentication|usepam'. You are exposed only if password authentication is yes and PAM is not used.
- List accounts with '*' and accounts with real hashes: awk -F: '$2=="*"{print $1}' /etc/shadow and awk -F: '$2 ~ /^\$[56]\$/{print $1}' /etc/shadow. Exposure needs both.
- Search for password logins to accounts that have no password: grep 'Accepted password for' /var/log/messages, then review doas usage, new users and authorized_keys files on any hit.
What happened#
On November 5, 2026, OpenSSH released portable OpenSSH 10.6p2 to block a password authentication bypass that is "exploitable through sshd(8)" on some Linux systems built and run without PAM. Alpine Linux published an advisory and fixed packages for every branch from 3.16 to edge on the same day. Researcher Özgün Kültekin of Wakefield, who reported it, calls the bug SSHole. It is tracked as CVE-2026-123158, CVSS 3.1 score 8.1 from the CNA.
The cause is two decisions that each made sense in isolation. Without PAM, sshd checks a password by running it through crypt() and comparing the result with the stored hash. Since a 2016 fix for username enumeration (CVE-2016-6210), sshd borrows another account's salt when an account has no usable hash, so that every login takes the same time. musl libc's crypt() returns the string * on failure, and its SHA-crypt code fails for keys longer than 256 bytes. * is also the conventional password field for accounts that should never accept a password. If you send an oversized password to such an account, the hash comes back as *, it matches the stored *, and the login succeeds. Alpine's advisory says it "takes one connection, works every time, and needs no retries."
Who is affected#
All of these must be true, according to Alpine:
- sshd runs on musl. Alpine's
openssh-serverpackage is built without PAM, andopenssh-server-pamis affected only withUsePAM no. PasswordAuthenticationisyes, which is the OpenSSH default.- The attacker knows the name of an account whose password field is
*. That includes key-only users, directory-service users and root on Alpine since about 3.16. Root is still protected by the defaultPermitRootLogin prohibit-password. - At least one other local account has a
$5$or$6$hash.
Alpine says the official tiny-cloud images from 3.18.11 to 3.24.3 ship an alpine user with a * password and passwordless doas. They are safe on first boot but become exploitable as soon as any account on the machine gets a real password, and the result is effectively root. Kültekin's write-up also names OpenWrt, Buildroot and Yocto. OpenWrt uses Dropbear by default, which is not affected, so it matters there only if you installed OpenSSH. glibc distributions (Debian, Ubuntu, Fedora and RHEL), PAM-based setups and OpenBSD are not affected.
Do you really need to act?#
Only if you match the list above, and then today. Most internet-facing SSH runs on glibc distributions and is not affected. Alpine containers that do not run sshd, which is the usual case, are not affected either. But for the hosts that do match, there is nothing to brute-force. The attacker needs only a reachable port and an account name, and Alpine's own example accounts (alpine and key-only service users) are predictable. As of November 6 no vendor reported exploitation in the wild. However, the details are public, the CVE record links reproduction labs, and CISA's SSVC entry marks exploitation as "poc." Researchers quoted by SecurityWeek expect brute-force tools to add the trick within days.
What to do now#
- Patch and restart:
apk upgrade -U -a && rc-service sshd restart. The fixed Alpine packages range fromopenssh 10.6_p2-r0on edge to9.0_p1-r6on 3.16. If you build OpenSSH yourself, use 10.6p2. - If you cannot patch yet, turn off password logins. Keep an existing key-based session open, add
PasswordAuthentication noin/etc/ssh/sshd_config.d/, runsshd -t, then restart sshd. OpenSSH developer Damien Miller told affected users to do this "IMMEDIATELY." - Check the effective config with
sshd -T | grep -Ei 'passwordauthentication|usepam', not just the file. Drop-ins and match blocks can override it. - Look beyond servers. Check appliances and embedded devices built with Buildroot or Yocto, OpenWrt routers with OpenSSH, and any Alpine-based image that bundles sshd for CI, dev containers or Git hosting. Rebuild those images.
- Redeploy cloud instances from fixed point releases (3.21.10, 3.22.8, 3.23.8, 3.24.4) or patch them in place.
How to tell if you were hit#
Search /var/log/messages (Alpine) for Accepted password for on accounts that have no password, such as alpine, root or key-only users. Compare them against awk -F: '$2=="*"{print $1}' /etc/shadow. Exploit attempts use passwords of 257 to 1,024 bytes, but sshd does not log password contents, so the successful login line is the signal. On any hit, review doas usage, new accounts, changed files and ~/.ssh/authorized_keys. Alpine's advice is to treat the machine as compromised if you cannot rule out a login.
Timeline#
- — musl adds SHA-512 crypt with a 256-byte key limit, after earlier changing
crypt()to return*on failure. - — OpenSSH adds salt borrowing to fix username enumeration (CVE-2016-6210).
- — OpenSSH 10.6p2 and Alpine fixed packages released, and CVE-2026-123158 published.
- — No exploitation in the wild reported as of this date.
Vulnerability records
- CVE-2026-123158 · sshd in OpenSSH before 10.6p2 on Linux, when musl libc is used without PAM, lacks a workaround for a password authentication bypass (related to…
Sources
Original sources first: vendor and project advisories, CVE and government records, the discoverers’ write-ups. Every claim above links to one of these. See how the Security Desk works.
Original and primary sources
- OpenSSH — Release notes, OpenSSH 10.6p2 openssh.org
- Alpine Linux — openssh-server password authentication bypass alpinelinux.org
- CVE.org — CVE-2026-123158 cve.org
- Özgün Kültekin — SSHole write-up sshhole.com
Coverage and analysis
- BleepingComputer — OpenSSH flaw lets attackers log into password-disabled Linux accounts bleepingcomputer.com
- SecurityWeek — OpenSSH Rushes Patches for 'SSHole' Authentication Bypass securityweek.com
- The Hacker News — OpenSSH Issues Emergency Fix for Flaw Letting Long Passwords Bypass SSH Auth on Alpine Linux thehackernews.com