OpenSSH 10.6p2 fixes Alpine Linux password bypass
OpenSSH 10.6p2 and Alpine fixed an SSH login that needs no password on November 5. A Tech AI Wire test of five Alpine images shows who is exposed.
4 min read
Drafted with AI from the sources linked in this article, then fact-checked and edited by Claire Whitmore before publishing. How we work

By the numbers
- bytes: the password length that gets through
- 257-1,024
- test logins in the researcher's study; only musl without PAM behaved differently
- 17,600
- Alpine releases with fixed packages, plus edge
- 3.16-3.24
Alpine Linux and the OpenSSH project shipped fixes on November 5, 2026, for a bug that lets an attacker log in to some Alpine servers over SSH without any password. Anyone running Alpine's default SSH server with password logins switched on should update and restart it today.
The flaw "takes one connection, works every time, and needs no retries," the Alpine security advisory says. Özgün Kültekin of Wakefield reported it. No CVE number had been assigned when Alpine published, and neither project reports any attacks.
How the password bypass works
The bug sits where OpenSSH meets musl, the small C library Alpine uses instead of glibc. It only appears when sshd, the SSH server, runs without PAM, the shared login system most Linux distributions use.
Without PAM, sshd hashes the password attempt with crypt() and compares the result with the account's entry in /etc/shadow. Alpine explains that musl's crypt() returns * as an error for keys over 256 bytes. An account with no password stores that same *, so a password of 257 to 1,024 bytes "matches." An account with no usable salt, the random text that makes each hash unique, borrows another account's salt. That is why one local account needs a real $5$ or $6$ hash.
The OpenSSH 10.6p2 release notes call the update "a critical security workaround" and place the root cause "outside sshd." It follows OpenSSH 10.6, which shipped in October with post-quantum signatures.
Kültekin's write-up names the bug "sshhole" and traces it to two musl commits from August 2012. Of about 17,600 test logins, only musl without PAM behaved differently. It also names OpenWrt, Buildroot and Yocto, which Alpine and OpenSSH do not mention.
Who is affected, per Alpine's advisory
A machine is exposed only when all four conditions hold:
- sshd comes from
openssh-server, built without PAM, or fromopenssh-server-pamwithUsePAM no. PasswordAuthenticationisyes, the default.- An account has
*as its password field, such asroot, a key-only user or a directory user from sssd. - At least one local account has a
$5$or$6$hash.
Containers that do not run sshd are safe, and so are locked accounts marked !. The default PermitRootLogin prohibit-password blocks password logins for root. It does not protect an account that can become root through doas. Alpine's tiny-cloud images from 3.18.11 through 3.24.3 ship such an alpine user, with * and passwordless doas.
Tested: five Alpine images and their defaults
In a Tech AI Wire test on November 5, on macOS 26.6.2 with Docker 28.4.0, the official alpine images installed openssh-server from Alpine's live mirrors.
| Branch | Image release (built) | Package installed | Alpine's fixed version | sshd -V |
|---|---|---|---|---|
| 3.21 | 3.21.9 (Oct 21) | 9.9_p2-r1 | 9.9_p2-r1 | OpenSSH_9.9p2 |
| 3.22 | 3.22.7 (Oct 21) | 10.0_p1-r11 | 10.0_p1-r11 | OpenSSH_10.0p2 |
| 3.23 | 3.23.7 (Oct 21) | 10.2_p1-r1 | 10.2_p1-r1 | OpenSSH_10.2p1 |
| 3.24 | 3.24.3 (Oct 21) | 10.3_p1-r2 | 10.3_p1-r2 | OpenSSH_10.3p1 |
| edge | 3.25.0_alpha20260805 (Aug 6) | 10.6_p2-r0 | 10.6_p2-r0 | OpenSSH_10.6p2 |
Four results matter:
- New installs get the fix, but the images predate it. Each reports a release below the fixed 3.21.10, 3.22.8, 3.23.8 and 3.24.4. Stable branches carry the fix inside older OpenSSH versions, so check the package revision, not
sshd -V. - The defaults meet three conditions. All five run
PasswordAuthentication yeswithroot:*. On 3.24, the default sshd rejectedUsePAM yesas an "Unsupported option." Theopenssh-server-pampackage's separatesshd.pamprogram still reportedusepam noon 3.21 and 3.24. - A fresh image misses the fourth. No account has a
$5$or$6$hash until someone sets a password. Onechpasswdcall wrote a$6$hash. - Making a key-only user work creates a
*account. On 3.24,adduser -D appuserwrote!, and sshd refused its key: "User appuser not allowed because account is locked." BusyBoxpasswd -uleft the!in place. Afterusermod -p '*', the key login worked.
How to check and fix an Alpine server
Three commands show where a server stands. On 3.24, the test printed:
$ apk list -I "openssh-server*"
openssh-server-10.3_p1-r2 aarch64 {openssh} (SSH-OpenSSH) [installed]
openssh-server-common-10.3_p1-r2 aarch64 {openssh} (SSH-OpenSSH) [installed]
$ sshd -T | grep -i passwordauthentication
passwordauthentication yes
$ awk -F: '$2=="*" {print $1}' /etc/shadow
root
A package older than the table's fixed version needs the update, and Alpine also fixed the unsupported branches 3.16 to 3.20. Run apk upgrade -U -a, then rc-service sshd restart. "Upgrading the package alone does not replace the running daemon," the advisory warns.
If updating must wait, Alpine's workaround is a file, /etc/ssh/sshd_config.d/00-no-passwords.conf, containing PasswordAuthentication no. Confirm key login works first and keep the current session open. In the test, that file turned sshd -T from yes to no on 3.21 and 3.24. Then search /var/log/messages for "Accepted password for" a passwordless account.
What this means for developers
Search Dockerfiles for openssh-server. Images that run sshd for CI runners or remote development are the ones in scope. Rebuild them with docker build --pull --no-cache, so a layer cached before November 5 cannot bring back the old package.
Make PasswordAuthentication no the default for any Alpine machine that only needs keys. Alpine says updating or turning password logins off "closes the hole." The test shows why it matters: the usual way to give a key-only user a working login creates the * account this bug needs.
Watch for a CVE number and for word from OpenWrt, Buildroot and Yocto on which of their builds are exposed. The OpenSSH team also says it will ship releases more often for now.
Sources
- Security advisory: openssh-server password authentication bypass - Alpine Linux
- OpenSSH 10.6p2 release notes - OpenSSH
- sshhole - sshhole.com
- Critical OpenSSH Flaw Could Let Attackers Bypass Password Authentication on Alpine Linux Servers - Cyber Security News
- Alpine Linux 3.21.10, 3.22.8, 3.23.8 and 3.24.4 Patches Critical SSH Password Bypass - Linux Compatible
Related articles

GitLab CVE-2026-97229: Alpine reports an exploit attempt
Alpine Linux says an attacker tried CVE-2026-97229 on its GitLab server on October 20-21. Upgrading GitLab alone did not fix it: the patch lives in Ruby.

OpenSSH 10.6 adds post-quantum signatures, speeds releases
OpenSSH 10.6, out October 6, adds a post-quantum signature type, turns off LZ77 compression and promises faster fixes as AI bug reports pour in.

Gzip 1.15 fixes a wrong-file deletion race
Gzip 1.15 lands 119 commits from 75 weeks of work. It fixes a race that could delete the wrong file, plus a buffer overflow in .lzh decoding.
The weekly digest
One email every Friday with the week's top stories from all six desks: AI, dev tools, coding, the tech industry, startups and what's next. Free, no spam.