urgent security release: 10.6p2

Darren Tucker dtucker at dtucker.net
Fri Nov 6 12:03:46 AEDT 2026


On Fri, 6 Nov 2026 at 11:43, Andy Lutomirski via openssh-unix-dev <
openssh-unix-dev at mindrot.org> wrote:

> On Thu, Nov 5, 2026, at 1:10 AM, Damien Miller wrote:
> > OpenSSH 10.6p2 has been released with a workaround for a critical
> > vulnerability.
> >
> > https://openssh.com/releasenotes.html#10.6p2
> >
> > If you operate a Linux system that uses musl libc without
> > PAM (Alpine Linux is one example) then stop reading and set
> > PasswordAuthentication=no or disable SSH for these systems IMMEDIATELY.
> >
> > This vulnerability does not exist on non-Linux systems, Linux/glibc
> > systems and Linux systems that use PAM for password authentication.
> >
> > 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.
>
> I tried to analyze the control flow associated with this bug, and I'm not
> sure it's entirely valid to call it musl's bug.


It's a non-compliance with the POSIX spec with regard to the allowable
return values from crypt(3).  Under some failure cases musl returns the
static string "*".

Single Unix Specification v2 [0] and Open Group Base Spec Issues 6-8
[1,2,3] all say some variation of:

"""
RETURN VALUE
Upon successful completion, crypt() shall return a pointer to the encoded
string. The first two characters 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.
"""

If you are considering the calls in question to be failures (and
comments[4] in the musl source would indicate that's the case) then it's
non-compliant because it did not return NULL.

If you are considering the calls in question to be an
"implementation-defined" successes, then it's also not compliant because
the returned string does not include the (first two characters of the)
salt.  (Issue 8 further specifies that a success must "return a pointer to
the hashed password", which this also isn't).

I imagine the deviation from the spec was with the best of intentions, but
it was a deviation none the less.

[0] https://pubs.opengroup.org/onlinepubs/007908799/xsh/crypt.html:

"""
RETURN VALUE
Upon successful completion, crypt() returns a pointer to the encoded
string. The first two characters of the returned value are those of the
salt argument.
Otherwise it returns a null pointer and sets errno to indicate the error.

ERRORS
The crypt() function will fail if:
[ENOSYS]The functionality is not supported on this implementation.
"""

[1] https://pubs.opengroup.org/onlinepubs/009604599/functions/crypt.html

"""
RETURN VALUE
Upon successful completion, crypt() shall return a pointer to the encoded
string. The first two characters 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.

ERRORS
The crypt() function shall fail if:
[ENOSYS]The functionality is not supported on this implementation.
"""

[2]
https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/functions/crypt.html

"""
RETURN VALUE

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.

ERRORS
The crypt() function shall fail if:
[ENOSYS]The functionality is not supported on this implementation.
"""

[3] https://pubs.opengroup.org/onlinepubs/9799919799/functions/crypt.html

"""
RETURN VALUE
Upon successful completion, crypt() shall return a pointer to the hashed
password; 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.

ERRORS
The crypt() function shall fail if:
[ENOSYS]The functionality is not supported on this implementation.
"""

[4] https://git.musl-libc.org/cgit/musl/tree/src/crypt/crypt_sha256.c#n8

-- 
Darren Tucker (dtucker at dtucker.net)
GPG key 11EAA6FA / A86E 3E07 5B19 5880 E860  37F4 9357 ECEF 11EA A6FA
    Good judgement comes with experience. Unfortunately, the experience
usually comes from bad judgement.


More information about the openssh-unix-dev mailing list