| 1.1, aSSHole (?), 21:53, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– | |
>после выявления данной уязвимости, вместо хэша пароля был выставлен знак "!". Но его наличие блокировало вход по SSH-ключам, поэтому с 2022 года символ для блокировки входа по паролю был заменён на "*".
Непонятно, то есть уязвимость была выявлена в 22 году или как?
| | |
| |
| 2.3, Аноним (3), 22:01, 05/11/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Скорее пытались интуитивно исправить, но забыли что исправляли.
| | |
|
| 1.2, Аноним (2), 21:57, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Необходимо вообще в принципе по умолчанию убрать вход по паролю: обменялись ключами и все хорошо.
| | |
| 1.4, Аноним (4), 22:06, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +8 +/– |
> в musl функция crypt() для хэшей SHA-512 возвращает символ "*", если
> длина переданного пароля превышает 256 байт (ограничение введено в 2012
> году для защиты от DoS-атак, так как при передаче больших значений
> возникает большая нагрузка на CPU)
Хочу посмотреть на гения, который это придумал.
Вместо того чтобы вернуть нормальную ошибку или хотя бы NULL, они возвращают строковый символ!
| | |
| |
| 2.6, Аноним (6), 22:09, 05/11/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Видимо эти гении учились вместе с теми, что вместо хеша пароля в файле пишут ! или *
| | |
| 2.18, Аноним (18), 22:48, 05/11/2026 [^] [^^] [^^^] [ответить]
| +1 +/– | |
> Вместо того чтобы вернуть нормальную ошибку или хотя бы NULL, они возвращают строковый символ
Чувак, ты не поверишь! crypt() возвращал NULL в качестве ошибки еще с 90х годов. Но сишочные бракоделы из musl решили больше не возвращать нуль, потому что... другие сишочные бракоделы традиционно не проверяли возвращаемое значение на нуль и получали сегфолт в вызове strcmp().
https://git.musl-libc.org/cgit/musl/commit/?id=b3c4cc121f70faea45389fe7ddc1127
Одни халатные браколелы подстелили соломку другим халатным бракоделам, но что-то пошло не так. 😳
| | |
|
| 1.5, Аноним (6), 22:09, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– | |
>> Однако в musl функция crypt() для хэшей SHA-512 возвращает символ "*", если длина переданного пароля превышает 256 байт
Я так понимаю это не считается багом и править это не будут? Ну удачи им.
| | |
| |
| 2.10, Аноном (-), 22:22, 05/11/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
Ну... конечно не проверять пароль будет быстрее, но думаю тут проблема в убогом недоязычке в котором нельзя нормально обработать ошибку.
Примерно как кидать -1 из функции которая должна возвращать беззнаковое.
| | |
| 2.12, Аноним (11), 22:30, 05/11/2026 [^] [^^] [^^^] [ответить]
| –1 +/– | |
>Т.е. опять сишники
Причем тут то сишники? Логическая проблема добавлена практически осознанно. Если бы шмазл переписывали, как водится, на ржавого, то эту проблему могли бы не добавить только, опять же, по ошибке. Как известно две подрят ошибки дают корректную работу ;)
| | |
| 2.17, Аноним (17), 22:48, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– |
там нарушен контракт функции crypt, дважды, когда через соль стали передавать алгоритм хеширования и когда стали проверять размер, все это без (изначально предусмотренной) возможности вернуть ошибку, классический лавров джпг
| | |
| |
| 3.24, Норм (?), 22:55, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– | |
Какого у функции хеширования вообще ограничение размер данных?
Это как бы приложение должно решать какие у него ограничения на пароль.
| | |
|
|
| |
| 2.15, Аноном (?), 22:46, 05/11/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
Неа.
В расте точно так же возвращали бы *.
Почему? Потому что идъйоты (с)
Хотя в расте можно было бы в Result<String, Error> возвращать "password is longer than 256 FU"
| | |
| 2.19, Аноним (19), 22:50, 05/11/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
В каноническом расте функция бы возвращала бы Result<String, Error>.
Но т.е. функция делается для древности из семидесятых, то вернуть его было бы невозможно, пришлось бы возвращать Option<String>.
Проблема не только в том, что начали возращать что-то вместо NULL, а еще и причина.
И на сайте это прям пояснено
> if crypt() can't do its job, it returns NULL.
> except a lot of programs never check for NULL.
> they just compare whatever crypt() gives back with the stored field,
> hit the NULL, and crash
И отличие от си, там не верят на "мамой клянуся, там ни нал!" разработчика и обязывают проверить что вернулось из функции перед работой с Option.
| | |
|
| 1.16, Аноним (16), 22:46, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– | |
> Однако в musl функция crypt() для хэшей SHA-512 возвращает символ "*", если длина переданного пароля превышает 256 байт (ограничение введено в 2012 году для защиты от DoS-атак, так как при передаче больших значений возникает большая нагрузка на CPU). Такой же символ используется в поле с хэшем пароля в "/etc/shadow" для обозначения учётных записей, для которых аутентификация по паролю заблокирована.
я так долго не смеялся, жесть :)))) с***ка это же функция возвращающая хеш, либо ошибку, с какого бодуна она должна возвращать символ * ? Какой альтернативно-одоренный до такого додумался? И почему именно *, а не какой-нибудь другой символ, это что на столько умственно-отсталым надо быть, чтобы даже не придумать что-то иное (тупо пустая строка), а взять лять символ затычку из файла /etc/shadow (n-раз фейспалм, мат высотой с бурдж-халифа)
| | |
| |
| 2.20, Аноним (20), 22:51, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– |
> ? Какой альтернативно-одоренный до такого додумался? И почему именно *, а
> не какой-нибудь другой символ,
Они пробовали "!". Получилась какая-то (!)
> это что на столько умственно-отсталым надо быть, чтобы даже не придумать что-то иное (тупо пустая строка), а взять лять символ затычку из файла /etc/shadow (n-раз фейспалм, мат высотой с бурдж-халифа)
Ну... в мане crypt на арче с glibc:
Upon successful completion, crypt, crypt_r, crypt_rn, and crypt_ra return a pointer to a string which encodes both the hashed passphrase, and the settings that were used to encode it. This string is directly usable as setting in other calls to crypt, crypt_r, crypt_rn, and crypt_ra, and as prefix in calls to crypt_gensalt, crypt_gensalt_rn, and crypt_gensalt_ra. It will be entirely printable ASCII, and will not contain whitespace or the characters ‘:’, ‘;’, ‘*’, ‘!’, or ‘\’.
Upon error, crypt_r, crypt_rn, and crypt_ra write an invalid hash to the output field of their data argument, and crypt writes an invalid hash to its static storage area. This string will be shorter than 13 characters, will begin with a ‘*’, and will not compare equal to setting.
Т.е технически они имели право возвращать звездочку.
С другой стороны man posix crypt утверждает что надо возвращать NULL
RETURN VALUE
Upon successful completion, crypt() shall return a pointer to the en‐
coded 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.
| | |
| 2.23, Аноним (16), 22:53, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– | |
//git.musl-libc.org/cgit/musl/tree/src/crypt/crypt_sha512.c
char *__crypt_sha512(const char *key, const char *setting, char *output)
{
static const char testkey[] = "Xy01@#\x01\x02\x80\x7f\xff\r\n\x81\t !";
static const char testsetting[] = "$6$rounds=1234$abc0123456789$";
static const char testhash[] = "$6$rounds=1234$abc0123456789$BCpt8zLrc/RcyuXmCDOE1ALqMXB2MH6n1g891HhFj8.w7LxGv.FTkqq6Vxc/km3Y0jE0j24jY5PIv/oOu6reg1";
char testbuf[128];
char *p, *q;
p = sha512crypt(key, setting, output);
/* self test and stack cleanup */
q = sha512crypt(testkey, testsetting, testbuf);
if (!p || q != testbuf || memcmp(testbuf, testhash, sizeof testhash))
return "*";
return p;
}
| | |
| 2.25, Норм (?), 22:58, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– |
Каждый день проверяю не первое ли Апреля. А до конца года еще два месяца.
| | |
| 2.27, Аноним (27), 23:03, 05/11/2026 [^] [^^] [^^^] [ответить]
| +/– | |
Ну по логу то видно кто добавил, а вот додумался он сам или нет - вопрос.
commit b9bb8f67bbac9bab5314fb00974ad469476e936e
Author: Rich Felker <dalias@aerifal.cx>
Date: Fri Sep 7 00:48:25 2012 -0400
cleanup src/linux and src/misc trees, etc.
previously, it was pretty much random which one of these trees a given
function appeared in. they have now been organized into:
src/linux: non-POSIX linux syscalls (possibly shard with other nixen)
src/legacy: various obsolete/legacy functions, mostly wrappers
src/misc: still mostly uncategorized; some misc POSIX, some nonstd
src/crypt: crypt hash functions
further cleanup will be done later.
| | |
|
| 1.22, Аноним (22), 22:52, 05/11/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Классический musl, это примерно то, чего мы ожидаем от т.н. security-focused дистрибутивов на musl.
| | |
|