5 ноября проект «OpenSSH» выпустил версию 10.6p2, устраняющую сбой, который позволял входить в некоторые учётные записи Alpine Linux без знания их пароля. Для атаки требовались конкретные настройки сервера, но при их совпадении хватало одного подключения. Под угрозой оказывались, в частности, аккаунты, созданные только для входа по ключу.

Почему длинный пароль срабатывал

Уязвимость возникала, если сервер «OpenSSH» работал на системе с библиотекой «musl» без PAM — набора модулей для проверки пользователей. При этом парольный вход должен был оставаться включённым, у целевой учётной записи в поле пароля стояла звёздочка, а у другого локального пользователя хранился хеш, начинающийся с $5$ или $6$.

Злоумышленнику нужны были сетевой доступ к серверу и имя учётной записи без пароля. Затем он мог отправить пароль длиной от 257 до 1024 байт: библиотека «musl» отклоняла слишком длинную строку и возвращала звёздочку как признак ошибки. Сервер сравнивал её со звёздочкой в поле целевого аккаунта и принимал совпадение за успешную проверку.

По данным консультативного уведомления Alpine, атака срабатывала с одного подключения и не требовала повторных попыток. Исследователи Check Point отдельно указали, что аккаунт с подходящим хешем должен быть активным. Один такой локальный аккаунт мог сделать уязвимыми все учётные записи без пароля на том же сервере.

Уязвимость зависит от конфигурации

В стандартном пакете сервера SSH для Alpine Linux PAM отключён, а парольный вход включён по умолчанию. Поэтому условия могли совпасть на таких машинах, но сам факт использования Alpine Linux ещё не означает уязвимость: важны все настройки и наличие обоих типов учётных записей.

Системы с библиотекой GNU C или с проверкой пароля через PAM не подвержены этому сбою. Риск также отсутствует, если на устройстве не работает сервер SSH или парольный вход отключён. Исследователь Озгюн Кюльтекин из компании «Wakefield» назвал среди других систем на «musl», которые стоит проверить, OpenWrt, Buildroot и Yocto; это не означает, что все их установки уязвимы.

Кюльтекин связывает проблему с изменением в «OpenSSH» 2016 года. Тогда сервер стал использовать соль другого аккаунта при проверке учётных записей без пригодного хеша, чтобы затруднить определение существующих имён пользователей. Соль — случайная часть хеша пароля; в сочетании с поведением «musl» это изменение и создало ошибочное совпадение.

Как закрыть уязвимость

В Alpine Linux исправленные пакеты доступны для выпусков начиная с 3.16; версии 3.21.10, 3.22.8, 3.23.8 и 3.24.4 уже включают их. Администраторам нужно обновить пакеты штатным менеджером Alpine, а затем перезапустить службу SSH: одно обновление не останавливает уже работающий процесс.

До установки исправления можно отключить вход по паролю. Alpine рекомендует сначала проверить, что доступ по ключу работает, и оставить текущую сессию открытой, пока новый вход не будет подтверждён. В журналах системы следует искать успешные входы по паролю для аккаунтов, которые должны быть беспарольными.

На 5 ноября об атаках с использованием этой уязвимости не сообщалось. Это не устанавливает, безопасна ли конкретная машина: для проверки нужно сопоставить её настройки со всеми условиями атаки.