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