Guide

OpenSSH password-auth bypass on Alpine (musl): are you affected, and the 10.6p2 fix

By Aman Singh · Published · 8 min read

On 5 November 2026, OpenSSH released 10.6p2 with what its own notes call a "critical security workaround" for a password-authentication bypass. The scope is narrow but sharp: it affects Linux systems that use the musl C library — most commonly Alpine — when sshd is built and run without PAM, which is Alpine's default. On an exposed box, a login that should be rejected can be accepted.

If you run on glibc — Debian, Ubuntu, Fedora, and the usual VPS images — you are not affected by this, and neither is anything that goes through PAM. This guide shows exactly who is exposed, how to check in two minutes, and the one-line fix (plus a stopgap that works right now).

Want your servers checked and patched for you? Security patching →

What was found

The issue was reported by Özgün Kültekin of Wakefield, and OpenSSH credits the report in the 10.6p2 notes. In OpenSSH's own words, the fix lets sshd "avoid password authentication bypass that is exploitable through sshd that affects some Linux systems when built and run with PAM support disabled", and it adds that it considers the root cause to be outside sshd but avoidable there.

In plain terms: on an affected box, a password login that should fail — against an account that has no usable password — can be made to succeed. The practical worry is accounts that are "locked" or key-only but still exist, and systems where a successful login lands somewhere with a quick path to root.

Are you affected?

Four things have to be true at once. If any one is false, this particular bypass does not apply to you.

  • You are on musl libc. Alpine is the common case; the researcher also lists OpenWrt, Buildroot and Yocto. Debian, Ubuntu, Fedora and other glibc distros are out.
  • sshd is built/run without PAM. Alpine's default openssh-server is built without PAM (PAM support is a separate package), or you have set UsePAM no.
  • Password authentication is enabled (PasswordAuthentication yes, the default).
  • OpenSSH is older than 10.6p2. Any build from before 5 November 2026 that you have not updated.

Why musl, and why not Debian/Ubuntu

The reason it is a musl-only problem comes down to a C-library detail, not to sshd. According to the researcher's write-up, musl's crypt() returns the short string "*" on failure instead of a null result, and its SHA-crypt refuses passwords longer than 256 bytes. Because a locked account's password field is also "*", an over-long password can make a failed hash and a stored "locked" marker look the same to the comparison that follows. OpenSSH agrees the root cause is outside sshd, which is why glibc builds — where crypt() behaves differently — and PAM-based logins (PAM never hashes a "*" field) are not affected.

That is also why you can trust the simple test below: it is the combination of musl, no PAM, and password auth that opens the path, and breaking any link closes it.

Check in two minutes

Print your distro, your OpenSSH version, and the two settings that decide exposure. If you are on musl with usepam no, passwordauthentication yes, and OpenSSH below 10.6p2, patch.

Terminal
# Which distro? Alpine and other musl systems are the ones at risk
grep -E '^(ID|VERSION_ID)=' /etc/os-release

# OpenSSH version — 10.6p2 or later is fixed
ssh -V

# The two settings that decide exposure: is PAM off, and password login on?
sshd -T 2>/dev/null | grep -iE '^(usepam|passwordauthentication) '
Example output (still exposed)
ID=alpine
VERSION_ID=3.20.3
OpenSSH_9.9p1, OpenSSL 3.3.2        # below 10.6p2 -> unpatched binary
usepam no                          # PAM off -> the bypass path is open
passwordauthentication yes         # password login on -> it is reachable

There is also a standalone detector from the researcher at github.com/oz9un/sshole, if you want a second opinion.

The fix

The real fix is the OpenSSH update. The stopgap — turning off password auth — removes the exposure immediately and is good practice on any internet-facing server anyway.

StepCommandEffect
Update OpenSSHapk upgrade opensshInstalls 10.6p2+ on Alpine; the real fix
Restart sshdrc-service sshd restartA running sshd keeps the old binary until restart
Or, stopgap nowPasswordAuthentication noCloses the path without an update; keys only
  1. 1
    Update OpenSSH and restart. On Alpine, apk update && apk upgrade openssh, then rc-service sshd restart. Confirm with ssh -V that you are at 10.6p2 or later.
  2. 2
    If the package isn't in your mirror yet, use the stopgap: disable password authentication so the bypass has nothing to act on, then update as soon as the package lands.
  3. 3
    Rebuild your Alpine images. A running container keeps its old OpenSSH until the image is rebuilt from a patched base and redeployed — pulling alone changes nothing already running.
  4. 4
    Audit who can log in with a password. Prefer keys everywhere; on an internet-facing host there is rarely a reason to leave password auth on at all.
The fix (Alpine)
apk update
apk upgrade openssh
ssh -V                 # confirm 10.6p2 or later
rc-service sshd restart
Immediate stopgap
# Immediate stopgap: turn off password auth (use keys), then restart
printf 'PasswordAuthentication no\n' > /etc/ssh/sshd_config.d/00-no-passwords.conf
rc-service sshd restart

Common questions

Am I affected by the OpenSSH musl/Alpine password bypass?+
Only if all four hold: you run on musl libc (Alpine, OpenWrt, Buildroot, Yocto), sshd is built/run without PAM, password authentication is enabled, and OpenSSH is older than 10.6p2. If any one is false, this bypass does not apply.
Are Debian and Ubuntu affected?+
No. OpenSSH scopes the issue to musl libc with PAM disabled. glibc-based distributions like Debian, Ubuntu and Fedora are not affected, and most of them use PAM for sshd anyway, which also avoids it.
How do I fix it?+
Update OpenSSH to 10.6p2 or later and restart sshd. On Alpine that is apk update && apk upgrade openssh, then rc-service sshd restart; confirm with ssh -V. If you can't update yet, set PasswordAuthentication no and use keys — that closes the path immediately.
Is there a CVE for this?+
No CVE had been assigned as of the 10.6p2 release on 5 November 2026. OpenSSH describes it as a critical workaround for a password-auth bypass on musl systems with PAM disabled, and says the root cause is outside sshd, in the C library.
What actually causes it?+
Per the researcher's write-up, musl's crypt() returns the string "*" on failure instead of a null result, and its SHA-crypt rejects passwords over 256 bytes. Because a locked account's password field is also "*", a very long password can make a failed hash match the stored marker. OpenSSH agrees the root cause is outside sshd.
I only use SSH keys — am I safe?+
If password authentication is fully disabled, this path is closed. The risk is specifically password logins on musl without PAM, so keys-only (PasswordAuthentication no) is both the recommended stopgap and good standing practice.

Want your fleet checked and patched?

I audit which of your servers are exposed — distro, OpenSSH version, PAM and password settings — update OpenSSH across hosts and Alpine images, move you to keys-only cleanly, and verify it on each live box. See security patching or bug fixing and debugging. It pairs naturally with the APT patching guide for the rest of your server surface.

Sources

Next steps

Keep reading

Need a hand with this?

Tell me what you are working on. Free scoping call, fixed quote within 48 hours.

Book a call

← All guides