Уязвимость *sshole в OpenSSH позволяет войти в учётки Linux с закрытым паролем на musl
Исследователь Озгун Культекин раскрыл уязвимость *sshole в OpenSSH. На Linux-системах с библиотекой musl, включая Alpine Linux, OpenWrt, Buildroot и Yocto, можно войти в учётные записи, где парольный вход намеренно закрыт символом * вместо хеша пароля.

Главное в цифрах
- Затронутая версия исправлена: OpenSSH 10.6p2
- Исправление 2016 года: CVE-2016-6210
- Порог длины пароля, вызывающий сбой: 256 байт
- Проверок аутентификации при поиске уязвимости: около 17 600
Ошибка проявляется, если передать пароль длиннее 256 байт. Функция crypt() в musl в этом случае возвращает *, и OpenSSH сравнивает его с таким же * в /etc/shadow, принимая совпадение за верный пароль. Уязвимость затрагивает серверы OpenSSH на дистрибутивах с musl при определённых настройках аутентификации.
По данным исследователя, злоумышленник не может обойти пароль у учётных записей с настоящим хешем. Атака работает только на записи, где пароль заблокирован символом *.
Причина в исправлении 2016 года
Ошибка связана с патчем для CVE-2016-6210, выпущенным в 2016 году. Он защищал от перечисления имён пользователей по времени ответа сервера. Для этого OpenSSH стал выполнять хеширование пароля даже у учётных записей без пригодного хеша, включая записи с *.
В musl crypt() возвращает * и при ошибке хеширования, в том числе при превышении лимита в 256 байт. Это и создаёт обход.
Риск для Alpine Linux
Исследователь предупреждает, что официальные облачные образы Alpine Linux для AWS и Azure содержат учётную запись alpine с привилегиями doas без пароля. Через неё злоумышленник может получить root.
Системы на glibc, включая Debian, Ubuntu и Fedora, а также системы с PAM, не затронуты. Культекин сообщил, что нашёл уязвимость с помощью ИИ-агентов, которые провели около 17 600 проверок аутентификации с разными конфигурациями OpenSSH и повреждёнными хешами.
Уязвимость устранена в OpenSSH 10.6p2. Администрации Alpine Linux рекомендуют обновить пакет командой apk upgrade openssh. Если обновление невозможно сразу, можно отключить парольную аутентификацию через PasswordAuthentication no в конфигурации SSH и перезапустить сервис. Проверить следы эксплуатации можно по журналам SSH: успешные парольные входы для учётных записей, где в поле пароля стоит *, могут указывать на атаку.

