OpenSSH 10.6p2 has been released with a workaround for a critical vulnerability

(hachyderm.io)

Comments

NewJazz 5 November 2026
musl’s crypt() returns the string * as an error indicator when the key is over 256 bytes long. * is also exactly what the stored field contains for every account with no password, so the “hash” matches and the login succeeds.

Does anyone know why musl does this? Are they the only C library that behaves this way?

For a C library that famously tries to adhere to POSIX as much as possible, this seems like a crazy choice. From POSIX standard:

Upon successful completion, crypt() shall return a pointer to the encoded string. The first two bytes of the returned value shall be those of the salt argument. Otherwise, it shall return a null pointer and set errno to indicate the error.

https://pubs.opengroup.org/onlinepubs/9699919799/functions/c...

amluto 5 November 2026
Wow, what a bug. I expect the exploit is literally as simple as trying to ssh in as a user with the password has ‘*’ in /etc/shadow and typing anything as the password.

To the extent that systems that are configured in the vulnerable manner exist in the wild, I’m surprised they weren’t exploited years ago by trivial ssh bots.

P.S. Wow, I’m reminded of just how awful traditional UNIX-y C APIs and code are.

P.P.S. The musl code in question is nuts. The API it implements is awful. Seriously, here’s the manpage:

https://man.archlinux.org/man/crypt.3.en

You can’t call this function correctly. sshd’s “fix” is basically to assume that a too-short return is an error return instead of a success return.

PAM is also awful, but this is worse.

dust42 5 November 2026
> We are making this release as fast as possible (we learned of the problem yesterday) because we have recently observed multiple cases of rapid bug rediscovery by AI agents, sometimes within hours, and so now consider long embargo periods to be a dangerous practice that primarily benefits attackers.

I think this will likely become standard. Nevertheless, a few stormy months are ahead.

throwa356262 5 November 2026
musl only, the quick fix:

     PasswordAuthentication=no

Which is a good advice in general.
MPSimmons 5 November 2026
Is this actually effective against Alpine? The default install seems to use ! as the placeholder in /etc/shadow instead of * and trying the attack doesn't seem to work.
Kuraj 22 hours ago
> At least one local account has a $5$ or $6$ password hash.

I'm not sure this gets the point across when (according to https://sshhole.com/) it effectively means "any other user with a real password"

0127 5 November 2026
IMO this is where languages like Rust shine. The design patterns built into the language for handling errors (Result) - force you to handle errors / function results with sentinels, null pointers, or errnos are so much more error prone than handling a Result<T,E> using a match statement.

crypt() returning `*` is insane especially since these kinds of sentinels are all over /etc/passwd

feearent 5 November 2026
Not really related to the topic, but AI-popular sentences and language structure stand out to people right away these days right? I noticed some.

"If you cannot update yet, at least disable password logins: set PasswordAuthentication no in your sshd configuration and restart sshd. Either one closes the hole." (only AI would characterize a critical SSH implementation vulnerability as a hole closing game)

An attacker who can reach your SSH port can log in without knowing any password. It takes one connection, works every time, and needs no retries. (It sounds like the writer is bragging about the exploit instead of describing it. AI does this)

The attacker needs the name of an account whose password field is * (an account with no password set, which is normal for key-only accounts), and needs the machine to have at least one other account with a $5$ or $6$ password hash. The attacker then sends a very long password (257 to 1024 bytes). One user with a password is enough: it makes every account without one reachable. (same as above made stronger with the 'statement: statement2' format)

"Users coming from a directory service through musl-nscd (nslcd, winbind, sssd), since they have no shadow entry." (a human would be more clear about what a shadow entry is and give more context, I think)

Hmm the rest of the article (the remaining 70-80%) seems quite human.

Anyway, not sure why I spent 10+ minutes on this. It just jumps at me right away.

drob518 5 November 2026
Given Alpine’s broad use in the Docker ecosystem, this is going to hit a lot of folks, I think.
asdfsa32 5 November 2026
Who does PasswordAuthentication=yes in this day and age anyway.
wordswords3 9 hours ago
The potential affected space is huge.. it does not matter if most docker images ship without openssh.. it does not matter that most security conscious image builders do not enable plain passwordauth.. it does not matter that ssh port is not commonly exposed.. the amount of alpine docker images in current live use over the whole internet is such a vastly huge number that you're going to bet that even given a small percentage of those 'misusing' docker and their containers being affected is still going to result in a a huge number of affected containers.
aborsy 5 November 2026
I often use "AuthenticationMethods publickey" which would disable all authentications except public key.

Isn't this safer than "PasswordAuthentication no", even if it's a different setting?

zajio1am 5 November 2026
I would say that PasswordAuthentication=yes is by itself a vulnerability.
getfacl 5 November 2026
I run Alpine on hardware. I was not effected by this as while I do use ssh keys, there are no user accounts without passwords on my server.
bnhix6x8c 6 hours ago
crypt glibc also sets errno to ERANGE if the string is too large, doesn't Musl libc do the same? OpenSSH should also add this check.
crest 5 November 2026
I'm sure some people running lightweight containers just had a heart attack.
nodesocket 5 November 2026
This is brutal because a lot of docker containerized apps are very slow to update the base image if at all.
K0nserv 5 November 2026
This looks terrible for musl, what a collection of terrible decisions on their part. I guess I'm staying away from it.
alanfranz 19 hours ago
> set PasswordAuthentication no in your sshd configuration and restart sshd.

Funnily enough, they don’t recommend checking pubkey auth is enabled and working. By blindly (or agenticly) following those instructions the risk is getting locked out of some machine.

SV_BubbleTime 5 November 2026
> because we have recently observed multiple cases of rapid bug rediscovery by AI agents, sometimes within hours, and so now consider long embargo periods to be a dangerous practice that primarily benefits attackers.

Seems quite reasonable. It’s quite obvious that black hats have day jobs as White hats and have been privy to embargoes for probably decades.

jmclnx 5 November 2026
>We consider the root cause of this bug to be outside OpenSSH itself, but we're in a good position to deliver a mitigation quickly.

So not a ssh issue but an issue specific to Linux using "musl libc without PAM".

0x457 5 November 2026
I keep saying that no one should be using alpine or musl, but people keep replying that static linking is totally worth it.
AtNightWeCode 5 November 2026
I always use certificates with SSH. Saved me this time.
j45 5 November 2026
It's nice to see how quickly this is being addressed, and likely monitored for any unintended side effects.

Looking at the unpatched Ubuntu things in my life, and I'm pretty close to asking Claude to update things to see how quickly Alpine can get close, assuming responsiveness can stay this fast and quality.

slopinthebag 5 November 2026
i think it's just unbelievable there isn't a bigger push to move away from c to languages that can prevent stuff like this from happening. this and just the pure unsafety. it's 2026. it's like pure negligence at this point, the equivalent of building a bridge with matchsticks because you like using it more.
phoronixrly 5 November 2026
I presume Dropbear, thus musl-based OpenWrt routers are also not affected? Not that Dropbear has been an example in that regard.
TZubiri 5 November 2026
Here's an unrelated security issue I opened with Alpine earlier this year

https://gitlab.alpinelinux.org/alpine/aports/-/work_items/16...

It didn't give me the impression that I was dealing with a secure piece of software, it seemed like they were dealing with very complex issues while laughably failing at the industry basics that were settled years ago.

Similarly Ubuntu was also the only other distro that fucked this simple permissions config up, and lately with the latency to fix the TCP vuln, it seems to confirm that these are not reliable distros for the coming security era.

entuno 5 November 2026
Seems slightly confusing that the OpenSSH release notes page says:

> This release contains a critical security workaround that affects Linux systems that use the musl libc and PAM disabled.

But that there's nothing about it on their security page.

Even if it's not technically a bug in their code, the fact that they've made a "critical" release to address it suggests that it should probably be listed on the security page as well. But maybe (hopefully) they just haven't updated the security page yet.

tiffanyh 5 November 2026
Since OpenSSH is included in the base install, and enabled on OpenBSD - is it correct that they will need to update the famous:

“Only two remote holes in the default install, in a heck of a long time!”

https://www.openbsd.org/

jordiburgos 5 November 2026
Workaround? Why not a fix?