При блокировке SSH-агента он должен отказывать в подписании любых данных до разблокировки. Однако в OpenSSH версии 10.4 обнаружена серьёзная проблема: при блокировке агента отключалась проверка, определяющая локальное или удалённое происхождение запроса. Это уязвимость была исправлена в выпущенной сегодня версии OpenSSH 10.5.

SSH-агент хранит расшифрованные приватные ключи, чтобы пользователь не вводил пароль каждые несколько минут. Функция перенаправления агента позволяет программам на удалённом сервере использовать эти ключи для аутентификации. Для различия этих двух случаев SSH отправляет специальный запрос session-bind@openssh.com, который определяет перенаправленный агент.

Заблокированный агент отклонял такие запросы, и запрос, не прошедший привязку, считался локальным. Это позволяло выполнять операции, предназначенные только для локального использования, в том числе добавление PKCS#11 токенов и использование ключей с ограничениями по назначению. Пользователь, заблокировавший агент перед уходом, случайно сделал систему более уязвимой, а не менее.

Два дополнительных исправления безопасности

OpenSSH 10.5 также исправила потенциальную уязвимость use-after-free в SSH-клиенте, связанную с перераспределением памяти. Клиент может столкнуться с ней при добавлении удалённого перенаправления через сокет мультиплексирования локальной сессии, в то время как на сервере ещё ожидается открытие канала удалённого перенаправления.

Исследователи обнаружили, что ключевое слово "restrict" в файле authorized_keys, которое должно отключать все функции перенаправления для ключа, не применялось к туннельному перенаправлению. Туннели отключены по умолчанию, поэтому администратор должен их явно включить для использования этой функции.

Выпуски будут выходить чаще

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

График выпусков изменился из-за серии случаев, когда уязвимость, обнаруженная одним исследователем, позже независимо находилась другим. Это указывает на то, что злоумышленники, не сообщающие об ошибках в открытые проекты, также могут их обнаружить. Вместо накопления исправлений до следующего планового выпуска проект будет выпускать их скорее.

SSHD теперь сравнивает тип открытого ключа с разрешёнными алгоритмами перед анализом полученного ключа, что выводит часть кода из доступности неаутентифицированных клиентов. Выпуск также исправляет двойное освобождение памяти в ssh-keygen, которое было невозможно вызвать вне тестового окружения.

В других улучшениях релиза: команда "ssh -Z user@host" выводит список ключей, которые клиент будет пробовать для публичной аутентификации. SSH теперь предпочитает FIDO-ключи без необходимости касания и откладывает ключи, требующие ввода PIN-кода или биометрической верификации. ssh-keygen может устанавливать или снимать флаги обязательного касания и верификации на FIDO приватных ключах при сбросе пароля.

Портативная версия OpenSSH теперь требует поддержки эллиптических кривых, включая NISTP521, от любой libcrypto, с которой она собирается. LibreSSL, OpenSSL, BoringSSL и AWS LC поставляют её в своих стандартных сборках, и конфигурация –without-openssl не затронута.