|
|
Message-ID: <20241229085833.719968-2-me@runxiyu.org>
Date: Sun, 29 Dec 2024 16:57:45 +0800
From: Runxi Yu <me@...xiyu.org>
To: musl@...ts.openwall.com,
me@...xiyu.org
Subject: [PATCH 0/1] crypt(3) returns string literal "*", crashing PAM on Alpine
Hi,
Test_User <hax@...xiyu.org> discovered that using passwd(1) from
shadow-utils on Alpine Linux 3.21 with a password longer than 256
character causes a segmentation fault. I reported it to
<https://gitlab.alpinelinux.org/alpine/aports/-/issues/16784>, and
people in #alpine-linux helped a bit.
It turns out that musl's crypt(3) returns a "*" from a string literal,
which PAM attempts to erase with pam_overwrite_string.
(Irrelevant lines truncated)
musl/src/crypt/crypt_sha512.c
> if (!p || q != testbuf || memcmp(testbuf, testhash, sizeof testhash))
> return "*";
pam/modules/pass_unix/passverify.c
> sp = crypt(password, salt);
> if (!sp || strncmp(algoid, sp, strlen(algoid)) != 0) {
> pam_syslog(...);
> if(sp) {
> pam_overwrite_string(sp); /* <-- attempt to overwrite musl's string literal */
> }
> return NULL;
> }
https://pubs.opengroup.org/onlinepubs/9799919799/functions/crypt.html:
> The return value of crypt() points to static data that is overwritten
> by each call.
>
> 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.
I think musl's behavior of returning "*" is incorrect. It's rather
reasonable for the caller to attempt to erase whatever is returned by
crypt, and AFAIK there is no specification that allows returning "*" as
a failure return value.
Note: I am not on the mailing list; please CC me in replies.
--
Best regards,
Runxi Yu (they/them)
Year 11, E House
YK Pao School SJ
https://runxiyu.org
Runxi Yu (1):
crypt: Do not return "*" from read-only memory regions
src/crypt/crypt_blowfish.c | 4 +++-
src/crypt/crypt_des.c | 6 +++++-
src/crypt/crypt_md5.c | 9 ++++++---
src/crypt/crypt_sha256.c | 9 ++++++---
src/crypt/crypt_sha512.c | 9 ++++++---
5 files changed, 26 insertions(+), 11 deletions(-)
--
2.47.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.