Перейти к содержанию

OpenSSH 10.5 вышел на пять недель раньше срока: три бага и новая политика по ИИ-репортам

Опубликовано
  • Админы
OpenSSH 10.5 — внеплановый релиз
OpenSSH 10.5 — внеплановый релиз

11 августа вышел OpenSSH 10.5/10.5p1 — примерно на пять недель раньше, чем предполагал обычный цикл проекта. Причина досрочного выхода в этот раз интереснее, чем сами исправления, поэтому начнём с неё.

Почему релиз внеплановый

Разработчики объясняют это потоком отчётов об уязвимостях, найденных ИИ-моделями или с их помощью. Большинство таких репортов, по словам проекта, при реалистичной модели угроз никакой практической ценности не имеет. Но команда столкнулась с другим: часть багов, изначально найденных ИИ, спустя время независимо находили и обычные исследователи. Вывод сделан прямой — если инструмент доступен доброжелательным энтузиастам, он доступен и тем, кто отчёт присылать не станет. Отсюда решение выпускать релизы чаще, чтобы исправления доезжали до пользователей быстрее, а не копились до планового окна.

📌 Заметка

Полезная деталь для тех, кто сам получает такие отчёты: проект не отказывается от ИИ-находок в принципе. Условие — к находке приложены человеческий анализ, воспроизводимый тест-кейс и предложенный патч. Без этого репорт считается шумом.

Замок на ssh-agent, который не запирал

Самая неприятная из трёх находок. В OpenSSH 10.4 блокировка агента (ssh-add -x) непреднамеренно отключала проверку, отличающую локальный запрос от запроса, пришедшего с удалённой машины через проброшенный агент. Проверка эта — расширение session-bind@openssh.com, ровно тот механизм, который в теории не даёт скомпрометированному серверу дотянуться до вашего агента.

Последствия: операции, задуманные как строго локальные, становились выполнимыми удалённо. В том числе — добавление PKCS#11-токена и использование ключей с ограничением по назначению, то есть тех, что были явно привязаны к конкретным хостам. Нашёл sn0x-sharma.

Иронично, что срабатывало это именно при запертом агенте: пользователь, который аккуратнее других и блокирует агент на время отлучки, получал поведение хуже, чем тот, кто этого не делает.

restrict, который не ограничивал туннели

Ключевое слово restrict в authorized_keys — рекомендуемый способ выдать ключ «на одну задачу»: оно снимает сразу все виды проброса. Выяснилось, что к пробросу туннелей (tun) sshd его не применял. То есть ключ, помеченный как максимально ограниченный, всё-таки позволял поднять туннельное устройство, если сервер сконфигурирован с PermitTunnel.

Третья правка — потенциальный use-after-free при realloc в клиенте ssh(1): воспроизводился, если удалённый проброс добавлялся через локальный сокет мультиплексирования сессий в момент, когда запрос на открытие удалённого проброса уже висел в ожидании ответа сервера. Нашёл Brian Mingus из Cognatory.

ℹ️ Справка

Номера CVE в release notes не приводятся. Оценивать серьёзность приходится по описанию: удалённо эксплуатируемого RCE здесь нет, но первая находка бьёт по сценарию, ради которого agent forwarding вообще ограничивают.

Что менять в сборке

Одно ломающее изменение в портируемой версии: Portable OpenSSH теперь требует поддержки ECC в libcrypto, включая кривую NISTP521. В проекте отмечают, что это есть во всех поддерживаемых на сегодня реализациях — LibreSSL, OpenSSL, BoringSSL, AWS-LC. Проблема возможна только у тех, кто собирает с урезанным или экзотическим криптобэкендом.

Из приятного в этом же релизе: ssh-keygen(1) научился ставить и снимать флаги touch-required и verify-required на уже созданных FIDO-ключах; ssh(1) теперь пробует аутентификаторы в порядке возрастания «трения» — сначала те, что не требуют физического действия; появился режим ssh -Z user@host, показывающий, какие ключи клиент вообще пытался предъявить (крайне полезно, когда агент отдаёт десяток ключей и сервер рвёт соединение по лимиту попыток); sshd(8) через setproctitle(3) теперь честно подписывает процесс-монитор после аутентификации. Плюс из предаутентификационной поверхности атаки убран разбор ключей.

Что делать владельцу VPS

ssh -V                       # версия клиента
sshd -V 2>/dev/null || \
  /usr/sbin/sshd -V          # версия демона, если бинарь не в PATH

В дистрибутивах исправление обычно приезжает бэкпортом в старую версию, а не бампом до 10.5 — ориентируйтесь на changelog пакета, а не на цифру в ssh -V.

✅ Как правильно

Порядок действий по убыванию пользы:

  1. Обновите пакет openssh-client на рабочей машине — уязвимость с агентом бьёт по клиенту, а не по серверу.
  2. Пересмотрите, кому вы вообще пробрасываете агент. ForwardAgent yes в ~/.ssh/config на весь Host * — плохая идея независимо от версии.
  3. Проверьте authorized_keys на серверах с включённым PermitTunnel: ключи с restrict там до обновления вели себя не так, как написано.
  4. Обновите sshd и перезапустите — сессии при рестарте не рвутся.

🔒 Безопасность

Если agent forwarding нужен постоянно, взгляните на альтернативы: ProxyJump вместо цепочки с пробросом агента закрывает большинство сценариев и не даёт удалённой машине доступа к ключам в принципе.

Источники

💬 Вопрос к сообществу

Вопрос к тем, кто держит парк серверов: вы вообще пользуетесь restrict в authorized_keys или ограничиваетесь отдельным пользователем и command=? И насколько у вас распространён проброс агента — или все уже переехали на ProxyJump?

Featured Replies

No posts to show

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.