OpenSSH выпустила экстренное исправление для уязвимости, позволявшей длинным паролям обходить аутентификацию SSH в Alpine Linux

Openssh Alpine Linux уязвимость безопасность Ssh Linux thehackernews.com

Критическая уязвимость в OpenSSH на серверах Alpine Linux позволяет злоумышленникам получать доступ к учетным записям без пароля. Исправление выпущено в версии 10.6p2. Узнайте, как защитить свои системы.

Злоумышленники могут получить доступ к учетным записям без пароля на некоторых серверах Alpine Linux, использующих стандартный пакет openssh-server. Для этого им нужен сетевой доступ к серверу, имя учетной записи и пароль длиной от 257 до 1024 байт. OpenSSH, оценивший уязвимость как критическую, выпустил версию 10.6p2 для ее устранения. Alpine также опубликовал исправленные пакеты для всех версий, начиная с 3.16.
Атака возможна, когда сервер OpenSSH (sshd) проверяет пароли без интерфейса Pluggable Authentication Module (PAM), включены входы по паролю, и на машине существует хотя бы одна другая учетная запись с паролем. Пакет openssh-server в Alpine собран без PAM, а вход по паролю включен по умолчанию.
Уязвимость связана с тем, как sshd взаимодействует с musl — C-библиотекой, на которой построен Alpine. Системы, не основанные на Linux, Linux-системы на glibc и системы, проверяющие пароли через PAM, не подвержены этой проблеме, сообщил Дамьен Миллер из проекта OpenSSH. Он рекомендовал всем пользователям затронутых систем немедленно отключить аутентификацию по паролю или SSH для этих систем. Сообщений об использовании уязвимости пока не поступало.
В рекомендациях Alpine перечислены четыре условия, при которых сервер уязвим. Злоумышленнику также требуется имя учетной записи без пароля. Достаточно одной учетной записи с паролем, чтобы скомпрометировать все учетные записи без него. Атака успешна при каждой попытке с одного соединения.
На Alpine учетные записи без установленного пароля включают: root (защищен настройкой PermitRootLogin prohibit-password, но может быть доступен, если PermitRootLogin yes), пользователь `alpine` в образах tiny-cloud (с версии 3.18.11 по 3.24.3) имеет беспарольный доступ к `doas`. Эти образы безопасны при первой загрузке, но становятся уязвимы, как только на машине появляется любой хэш `$6$`, например, после установки пароля консоли администратором. Злоумышленник может войти как `alpine` и использовать `doas` для получения прав root.
Не подвержены атаке контейнеры без sshd, системы с PasswordAuthentication no, облачные образы, настроенные через cloud-init, и машины, где ни одна учетная запись не имеет хэша пароля `$$-стиля`. Учетные записи, заблокированные `!` в `/etc/shadow`, также не подвержены.
Уязвимость не ограничивается Alpine. Озгюн Кюльтекин из Wakefield, сообщивший о ней, упоминает OpenWrt, Buildroot и Yocto как другие системы на базе musl, которые следует проверить. OpenWrt по умолчанию использует Dropbear для SSH, который не подвержен уязвимости. На OpenWrt проблема может возникнуть только при установке сервера OpenSSH.
На Alpine исправление заключается в обновлении пакета и перезапуске службы sshd. Уже выпущены пакеты для версий 3.21.10, 3.22.8, 3.23.8 и 3.24.4. Ветви 3.16–3.21, хотя и вышли из поддержки, также получили исправления. Облачные инсталляции, запущенные из старых образов tiny-cloud, также требуют обновления или изменения настроек.
Если вы собираете OpenSSH самостоятельно, версия 10.6p2 включает исправление. Если обновление невозможно, отключение входа по паролю также предотвратит атаку. Убедитесь, что вход по SSH-ключу работает, и сохраняйте текущую сессию открытой до успешного входа по ключу. Затем установите PasswordAuthentication no, проверьте конфигурацию с помощью sshd -t и перезапустите sshd.
Рекомендации предлагают добавить настройку в файл `/etc/ssh/sshd_config.d` или изменить все строки PasswordAuthentication yes на no в `/etc/ssh/sshd_config`, включая блоки Match. После этого команда sshd -T | grep -i passwordauthentication должна вывести passwordauthentication no.
В логах `/var/log/messages` следует искать строки sshd, указывающие на принятие пароля для учетной записи без пароля. На уязвимых машинах также рекомендуется проверять использование `doas`, недавно созданных пользователей и файлы. «Если вы не можете исключить вход, считайте машину скомпрометированной», — говорится в рекомендациях.
Без PAM, sshd сам проверяет пароль, хешируя его с помощью функции `crypt()` и сравнивая результат с сохраненным полем. Учетная запись без пароля имеет в этом поле только `*`. Поскольку это слишком коротко для соли, sshd заимствует соль другой учетной записи с реальным хэшем. Для типов хэшей `$5$` и `$6$` `crypt()` в musl отклоняет пароли длиннее 256 байт, возвращая `*`, что совпадает с сохраненным `*`, и sshd принимает вход. Верхний предел — 1024 байта, установленный самим sshd.
Это поведение связано с изменением в musl от 9 августа 2012 года, которое заставило неудачный вызов `crypt()` возвращать «несопоставимый хэш вместо NULL», так как многие программы не проверяли ошибку. Предел в 256 байт был добавлен 29 августа 2012 года для защиты от DoS-атак. Заимствование соли произошло из-за изменения в OpenSSH от 15 июля 2016 года, связанного с CVE-2016-6210, которое позволяло злоумышленникам узнавать существующие имена пользователей. Кюльтекин утверждает, что проблема существует с тех пор.
Изменение в коде OpenSSH 10.6p2 заставляет sshd отклонять совпадение, если сохраненное поле короче четырех символов. OpenSSH называет это обходным решением, указывая, что первопричина лежит вне sshd. Стабильные пакеты Alpine содержат патч для той же проблемы.
Команда Миллера узнала об уязвимости на этой неделе и выпустила исправление как можно быстрее. В объявлении о выпуске он заявил, что длительные эмбарго теперь считаются опасными и полезными в основном для злоумышленников, поскольку недавно ИИ-агенты находили те же ошибки снова, иногда в течение нескольких часов. Идентификатор CVE для уязвимости пока не присвоен.

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

Похожие новости: