В OpenSSH на Alpine Linux можно было войти под root, введя любой пароль длиннее 256 символов

В OpenSSH на можно было войти под , введя любой пароль длиннее 256 символов

Разработчики OpenSSH 5 ноября выпустили1 внеплановую версию 10.6p2, которая закрывает обход проверки пароля в sshd на «некоторых Linux-системах». В тот же день опубликовала2 бюллетень: на её системах аккаунт без пароля, в том числе , пускал по SSH с любым паролем длиной от 257 до 1024 байт. Ошибку нашёл Озгюн Кюльтекин из компании Wakefield.

Уязвимость возникает в системах на библиотеке musl, где sshd проверяет пароли без PAM. В этом режиме sshd хеширует введённый пароль функцией crypt() и сравнивает результат с записью в /etc/shadow. Если у аккаунта нет своей соли, sshd берёт соль у другой учётной записи. Функция crypt() в musl не принимает пароли длиннее 256 байт и вместо ошибки возвращает строку «*». А «*» в /etc/shadow означает аккаунт, в который нельзя войти по паролю. Строки совпадают, и sshd открывает сессию.

Для атаки нужны четыре условия: OpenSSH без PAM (так собран пакет openssh-server в Alpine), включённый вход по паролю (это значение по умолчанию), аккаунт с «*» в поле пароля и хотя бы один аккаунт с настоящим хешем вида $5$ или $6$. В Alpine помечен «*» с версии 3.16, вышедшей в 2022 году. В облачных образах tiny-cloud с 3.18.11 по 3.24.3 есть пользователь alpine с тем же «*» и правом на doas без пароля. Системы на glibc, sshd с PAM, Dropbear и OpenBSD ошибка не затрагивает. OpenWrt по умолчанию использует Dropbear, поэтому уязвимы только роутеры, где вручную поставили OpenSSH.

Исправленные пакеты вышли для всех веток Alpine с 3.16 по 3.24, хотя 3.21 и более старые уже не поддерживаются. Обновиться можно командой apk upgrade -U -a, после чего sshd нужно перезапустить. Если обновить систему нельзя, Alpine советует выставить PasswordAuthentication no. Следы входа ищут в /var/log/messages по строкам «Accepted password for» у аккаунтов без пароля. Если такой вход исключить нельзя, машину стоит считать взломанной.

уязвимости пока не присвоен. Исследователь пишет3, что сделал около 17,6 тысячи попыток входа на разных сборках, и отличилась только связка musl без PAM. О случаях эксплуатации до раскрытия ничего не известно. В 2019 году у Alpine была похожая история: в официальных Docker-образах у оказался пустой пароль (CVE-2019-5021).

Источники

  1. OpenSSH ↩

  2. Alpine Linux ↩

  3. sshhole ↩

Интересно обсудить?

Volven Skadadottir

Редактор verärgert