Check a site
Check a website Service status Outages Blog
All tools
Check a websiteBrowse all tools
A terminal showing an SSH login where a very long string of asterisks is accepted as the password

WarningAlerts

“sshole”: any long password logs in to some Alpine and musl SSH servers

Posted Jimel S.4 min read

On musl-based systems such as Alpine Linux, OpenSSH without PAM could accept any password longer than 256 characters for accounts that have no password set. Update OpenSSH to 10.6p2 (or Alpine’s fixed package) or turn off password logins.

Illustration: UtiBox

Warning

Ongoing

OpenSSH “sshole” password bypass on Alpine and other musl systems. Update OpenSSH or disable password logins.

Started
Ends
Not known yet
On this page 7 sections
  1. What happened
  2. Why a long password works
  3. Are you affected?
  4. How to fix it
  5. Can’t update yet? Turn off password logins
  6. Check whether someone already got in
  7. Sources

What happened

On 5 November 2026 the OpenSSH project released OpenSSH 10.6p2 with what it calls a “critical security workaround” for Linux systems that use the musl C library with PAM disabled. The bug is tracked as CVE-2026-123158. Alpine Linux’s security tracker describes it like this:

sshd in OpenSSH before 10.6p2 on Linux, when musl libc is used without PAM, lacks a workaround for a password authentication bypass. For some configurations of accounts, any password between 256 and 1024 characters succeeds.

Alpine Linux security tracker

The bug was found by Özgün Kültekin of the security firm Wakefield, who named it sshole. On affected servers an attacker doesn’t need to guess a password at all: a suitable username and a very long string are enough.

As of 6 November, neither OpenSSH nor Alpine had reported attacks using the bug. The details are public and the attack is trivial, though, so assume scanners are already trying it.

Why a long password works

Three ordinary behaviours line up badly:

  • Accounts without a password are stored with *. Key-only users, some service accounts and root on Alpine have * in the password field of /etc/shadow. Normally no password can ever match it.
  • Without PAM, sshd checks passwords with crypt(). It hashes what you typed and compares the result with the stored value.
  • musl’s crypt() returns * when it fails, and its SHA-512 hashing refuses passwords longer than 256 characters.

Put together: send a password longer than 256 characters, crypt() fails and returns *, that matches the stored *, and sshd lets you in.

Are you affected?

According to the researcher’s write-up, a server is vulnerable when all of these are true:

  • sshd runs on musl libc (Alpine, many Alpine-based Docker images, and Buildroot, Yocto or OpenWrt builds that use OpenSSH instead of Dropbear)
  • OpenSSH is built without PAM (Alpine’s default openssh-server package) or PAM is turned off with UsePAM no
  • Password logins are enabled (PasswordAuthentication yes is OpenSSH’s default)
  • An account has * as its password (key-only users, or root on Alpine)
  • At least one other account has a real password set

The researcher also points out that the default alpine user on Alpine’s official cloud images can become root with doas and no password, so one bypassed login can mean full control.

Not affected: systems built on glibc, such as Debian, Ubuntu and Fedora, and any sshd that uses PAM. Dropbear (the default SSH server on OpenWrt) and OpenBSD aren’t affected either.

How to fix it

Alpine has published fixed openssh packages for every supported branch:

Alpine branchFixed openssh package
edge10.6_p2-r0
3.2410.3_p1-r2
3.2310.2_p1-r1
3.2210.0_p1-r11
3.219.9_p2-r1
3.209.7_p1-r6
3.199.6_p1-r3
apk upgrade -U -a
rc-service sshd restart
apk info -v openssh-server   # confirm the fixed package version

If you build container images on Alpine, rebuild them on the updated base image and redeploy. Running containers keep the old package until they’re replaced. Other musl-based systems should move to OpenSSH 10.6p2.

Can’t update yet? Turn off password logins

This blocks the bug completely, because sshd never calls crypt() for key-based logins. Make sure you can log in with an SSH key first, and keep that session open while you test.

# /etc/ssh/sshd_config.d/00-no-passwords.conf
PasswordAuthentication no
sshd -t && rc-service sshd restart

It’s a good idea anyway. Our SSH hardening checklist covers this and the other settings worth changing.

Check whether someone already got in

Look for password logins to accounts that don’t have a password:

grep "Accepted password" /var/log/messages

Any accepted password for root, alpine or a key-only user is a red flag. Compare each hit with that account’s line in /etc/shadow. Then review recent doas use, newly created users, new entries in authorized_keys files and recently changed files. If you can’t rule out a login, treat the machine as compromised: rebuild it and rotate every secret it held.

Finally, ask whether SSH needs to face the whole internet at all. Limiting port 22 to known addresses with a firewall makes bugs like this far less dangerous.

Sources

Related

More from Alerts

Most read

Latest

Most read

  1. 01November Patch Tuesday lands on the 10th: what October’s record release tells us19
  2. 02Introducing UtiBox: the Web’s Utility Box2
  3. 03Ivanti Connect Secure zero-days gave attackers root on VPN gateways1
  4. 04“Black October”: attackers raid secrets at cloud and AI developer platforms1

Embed this post

Paste this code into your page. It shows the post as a card that links back here. In WordPress you can also paste the post’s address on a line of its own.

Cookies on UtiBox

UtiBox is free because of ads. Google and its partners use cookies to show, limit and measure ads, Google Analytics, Ahrefs Web Analytics and Microsoft Clarity show us how the site is used, and we use a few essential cookies to run the site.