Get a free audit
Apple credit Apple credits the researcher who runs our AI penetration testing.

Field Notes / Vulnerability

OpenSSH “sshole”: any password over 256 characters opens key-only accounts on Alpine. Check the boxes nobody calls servers.

CVE-2026-123158 lets an attacker log in to accounts that have no password at all, on Alpine and other musl-based Linux running OpenSSH without PAM. The fix shipped on 5 November 2026. Attacks were seen within nine hours, and a honeypot was rooted. The exposed machines are rarely the ones on your server list: the container someone gave sshd, the router, the appliance. Here is who is exposed, a ten-minute check, and why updating alone is not enough.

Author
Red Team Partners
Read
6 MIN READ
Filed
9 Nov 2026
An administrator in a server room checking an alert, the moment an unlisted Linux box turns up in the logs.

01 What breaks

n account that should never accept a password gets a single * in /etc/shadow where the hash would be. No password produces * as its hash, so nothing matches. That has been the deal on Unix for decades.

Two old decisions broke it. In 2016 OpenSSH started hashing every password attempt, even for accounts with no usable hash, borrowing another account’s salt so that response times would not reveal which usernames exist. That closed CVE-2016-6210. Four years earlier, musl’s crypt() had been changed to return * when it fails. It also refuses SHA-256 and SHA-512 passwords over 256 bytes Researcher write-up .

Put them together. An attacker sends a 300-character password for root. sshd borrows a $6$ salt from a real user and calls crypt(). musl rejects the length and returns *. sshd compares that with the stored *. They match. The attacker is in.

Özgün Kültekin of Wakefield found it by building sshd in every combination of glibc, musl, PAM and no PAM, then sending about 17,600 odd logins at each. Every build agreed except one: musl without PAM Researcher write-up . OpenSSH calls its fix a “critical security workaround” and says the root cause sits outside sshd OpenSSH 10.6p2 . The CVE record scores it 8.1 CVE record .

02 Who is exposed

Alpine lists four conditions. A box is exposed when all of them hold Alpine advisory :

ConditionDefault on Alpine?
sshd built without PAM, or the PAM build run with UsePAM noYes. The standard openssh-server package has no PAM
PasswordAuthentication yesYes. It is the OpenSSH default
An account whose password field is *Yes. Root in the base image, plus any key-only user
At least one local account with a $5$ or $6$ hashThe moment anyone sets a password for anyone

Direct root login is still blocked by OpenSSH’s default PermitRootLogin setting, unless someone changed it Help Net Security . That rarely saves you. Alpine’s official tiny-cloud images for AWS and Azure, from 3.18.11 to 3.24.3, ship an alpine user with a * password and passwordless doas. They are safe on first boot. Once a $6$ hash appears on the machine, they are one long password away from root Alpine advisory .

The boxes nobody counts as servers

Your Ubuntu and Debian estate is fine. glibc systems, anything that goes through PAM, Dropbear and OpenBSD are not affected Researcher write-up . The exposure sits in places an asset register tends to miss:

  • The Alpine container with sshd in it. Most Alpine containers never run sshd, and those are safe. The ones that do were usually set up by a developer who wanted a shell for debugging, then published on a port that nobody closed.
  • The cloud VM from a tiny-cloud image. Launched once for a job, still running, still on its first-boot config.
  • The router or gateway. OpenWrt ships Dropbear, which is safe. A router where someone installed the OpenSSH package instead is a musl box running sshd.
  • The appliance. NAS boxes, building controllers, industrial gateways, anything a vendor built with Buildroot or Yocto. You cannot run apk upgrade on it. You wait for the vendor’s firmware, and you need to know the box exists to chase it.

03 Exploitation so far

The CVE was published at 15:46 UTC on 5 November. Proof-of-concept code appeared on GitHub the same day Previdian . Previdian, a threat intelligence firm, says its sensors caught the first attempt less than nine hours later. On an Alpine honeypot the attacker got root, then ran id, uname and hostname over non-interactive SSH sessions Help Net Security The Hacker News .

The counts depend on the date you read them:

ReportedAttemptsSources
6 Nov, Help Net Security8One IP address in Japan, seen by one sensor
9 Nov, Previdian page (7 days)2013 IP addresses in 9 countries, seen by 4 sensors. Last attempt 8 Nov

Twenty attempts is a small number. Previdian notes that an attempt does not prove the target was vulnerable Previdian . The speed is the point. Previdian founder Ryan Dewhurst called the flaw “particularly trivial to exploit”, and warned that the public exploits on GitHub are unverified and may carry malware Help Net Security . The attack is one long password, so any SSH brute-force tool can carry it. CISA had not added CVE-2026-123158 to its Known Exploited Vulnerabilities catalogue as of 9 November Previdian . Do not wait for it.

04 The ten-minute check

Run this as root on any Linux box that answers on SSH and that you cannot place as Debian, Ubuntu, RHEL or similar. Start with step one. If the box is not musl, stop there.

# 1. Is it musl? "musl libc" in the output means yes
ldd --version 2>&1 | head -1
ls /lib/ld-musl-* 2>/dev/null

# 2. Does sshd take passwords? Is the PAM build even installed? (Alpine)
sshd -T | grep -i -E '^(passwordauthentication|usepam)'
apk info -e openssh-server-pam

# 3. Which accounts are "*", and is there a real hash to borrow a salt from?
awk -F: '$2=="*"{print "no password: "$1} $2 ~ /^\$[56]\$/{print "hash: "$1}' /etc/shadow

# 4. Has an account with no password logged in with one?
grep "Accepted password for" /var/log/messages

Any line in step four that names root, alpine or a key-only user is a break-in. Alpine’s advice is to treat the machine as compromised: check doas use, new users, new files and every authorized_keys Alpine advisory . Rebuild it. Do not clean it.

Then close it:

# Fix: update, then restart. The upgrade alone leaves the old sshd running
apk upgrade -U -a
rc-service sshd restart

# Cannot update today? Turn passwords off. Confirm key login first,
# and keep a session open while you restart
echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/00-no-passwords.conf
sshd -t && rc-service sshd restart
This week
  • List every host that answers on port 22 from the internet, including cloud VMs, containers with published ports and network gear. Your CMDB is the starting point, not the answer
  • On each musl host, update OpenSSH and restart sshd. Containers: rebuild the image from a patched base and redeploy. Patching a running container does not survive a restart
  • Set PasswordAuthentication no on every host where people log in with keys. It closes sshole and every password-spraying campaign with it
  • Search /var/log/messages for "Accepted password for" on accounts that have no password, back to 5 November at least
  • For Buildroot and Yocto appliances, ask each vendor in writing whether their sshd uses musl without PAM, and when the fixed firmware ships. Until then, keep their SSH off the internet

sshole will not hit your main servers. It hits the machine you forgot was a server: the debug container, the tiny-cloud VM from a proof of concept, the gateway a contractor installed. An attacker scanning port 22 finds those first, because nobody patches what nobody listed. An external penetration test gives you that list, with proof of what each box exposes and the order to fix them in. Start with your free external exposure audit. Your red team. Within reach.

Questions readers ask

What is the OpenSSH sshole vulnerability, CVE-2026-123158?

It is a password authentication bypass in sshd on Linux systems built with the musl C library and without PAM. On those systems, any password longer than 256 characters logs in to an account whose shadow entry is "*", the marker for accounts that have no password, such as key-only users and root on Alpine. Özgün Kültekin of Wakefield reported it. OpenSSH fixed it in 10.6p2 on 5 November 2026. The CVE record rates it 8.1 on CVSS 3.1.

Is Alpine Linux affected by the sshole SSH vulnerability?

Yes, if sshd is running. Alpine’s default openssh-server package is built without PAM, and Alpine lists releases 3.16 to 3.24 and edge as affected. An attack also needs password logins enabled (the OpenSSH default), an account with "*" as its password field, and at least one local account with a $5$ or $6$ password hash. Alpine containers that do not run sshd are not affected. Alpine published fixed packages for every branch from 3.16 to edge on 5 November 2026.

Are Debian, Ubuntu and other glibc distributions affected?

No. According to the researcher, glibc systems such as Debian, Ubuntu and Fedora are not affected, and neither are setups that authenticate through PAM, the Dropbear SSH server or OpenBSD. The bug needs musl’s crypt() behaviour and sshd’s own password check, which only meet when PAM is off.

Is CVE-2026-123158 being exploited?

Previdian reports that its sensors saw the first attempt less than nine hours after the CVE was published on 5 November 2026, and that an attacker reached root on an Alpine honeypot. On 6 November Help Net Security reported eight attempts from one Japan-based IP address. Previdian’s page, updated on 9 November, shows 20 attempts from 13 IP addresses over seven days, the last on 8 November. It was not in the CISA Known Exploited Vulnerabilities catalogue as of 9 November 2026.

Does updating OpenSSH fix sshole?

Only after you restart sshd. Alpine warns that upgrading the package does not restart the running daemon, so the old binary keeps accepting connections. Run apk upgrade -U -a, then rc-service sshd restart. If you cannot update, set PasswordAuthentication no and restart sshd, after confirming that key login works.

References

Sources

  1. Alpine Linux. “openssh-server password authentication bypass” security advisory. 5 November 2026. alpinelinux.org
  2. OpenSSH. Release notes, OpenSSH 10.6p2. 5 November 2026. openssh.org
  3. Özgün Kültekin, Wakefield. “sshole” write-up. November 2026. sshhole.com
  4. Help Net Security. “OpenSSH flaw exploited in the wild just hours after disclosure (CVE-2026-123158).” 6 November 2026. helpnetsecurity.com
  5. The Hacker News. “Hackers exploited OpenSSH sshole flaw.” November 2026. thehackernews.com
  6. Previdian. CVE-2026-123158 exploitation page, telemetry updated 9 November 2026. previdian.com
  7. TheHackerWire. CVE-2026-123158 record (CVSS 3.1 8.1, CWE-394). 5 November 2026. thehackerwire.com