sshhole или «лучше лишний стоп, чем лишний ляп»
5 ноября 2026 года вышел экстренный OpenSSH 10.6p2, закрывающий замечательную дыру: на Linux с musl libc и без PAM можно было войти в учётную запись с заблокированным паролем , предъявив практически любую строку длиной более 256 байт. И особенно интересна тут история появления уязвимости. Не столько сам баг, сколько последовательность решений, в результате которых система вместо отказа в аутентификации радостно сообщала: Welcome! 1. Начнём с Unix и /etc/shadow . Вместо настоящего хеша пароля может использоваться * . Это означает, что парольная аутентификация фактически запрещена: ни один настоящий хеш не должен совпасть с этим значением. Причём сама учётная запись не заблокирована — например, вход по SSH-ключу вполне допустим. 2. В 2012 году разработчики musl решили бороться с падениями программ. По контракту crypt() при ошибке возвращает NULL . Но… некоторые программы результат не проверяли, после чего закономерно падали . В musl решили, что возвращать NULL — нехорошо, невежливо практически. Лучше вернуть строку, которая заведомо не может соответствовать настоящему хешу пароля. И выбрали… да — * . В том же году в реализации SHA-512 crypt установили ограничение длины пароля в 256 байт, чтобы слишком длинными паролями нельзя было устраивать DoS через дорогостоящее хеширование. Получилось следующее: crypt(long_password, “ …”) // “*” То есть ошибка вычисления теперь возвращает ровно то же значение, которым в файле паролей в Unix обозначен пароль «хрен подберёшь». 3. В 2016 году OpenSSH исправляет timing attack (CVE-2016-6210). Читать далее
