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.
✅ Как правильно
Порядок действий по убыванию пользы:
Обновите пакет openssh-client на рабочей машине — уязвимость с агентом бьёт по клиенту, а не по серверу.
Пересмотрите, кому вы вообще пробрасываете агент. ForwardAgent yes в ~/.ssh/config на весь Host * — плохая идея независимо от версии.
Проверьте authorized_keys на серверах с включённым PermitTunnel: ключи с restrict там до обновления вели себя не так, как написано.
Обновите sshd и перезапустите — сессии при рестарте не рвутся.
🔒 Безопасность
Если agent forwarding нужен постоянно, взгляните на альтернативы: ProxyJump вместо цепочки с пробросом агента закрывает большинство сценариев и не даёт удалённой машине доступа к ключам в принципе.
Вопрос к тем, кто держит парк серверов: вы вообще пользуетесь restrict в authorized_keys или ограничиваетесь отдельным пользователем и command=? И насколько у вас распространён проброс агента — или все уже переехали на ProxyJump?
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
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
В дистрибутивах исправление обычно приезжает бэкпортом в старую версию, а не бампом до 10.5 — ориентируйтесь на changelog пакета, а не на цифру в
ssh -V.✅ Как правильно
Порядок действий по убыванию пользы:
openssh-clientна рабочей машине — уязвимость с агентом бьёт по клиенту, а не по серверу.ForwardAgent yesв~/.ssh/configна весьHost *— плохая идея независимо от версии.authorized_keysна серверах с включённымPermitTunnel: ключи сrestrictтам до обновления вели себя не так, как написано.sshdи перезапустите — сессии при рестарте не рвутся.🔒 Безопасность
Если agent forwarding нужен постоянно, взгляните на альтернативы:
ProxyJumpвместо цепочки с пробросом агента закрывает большинство сценариев и не даёт удалённой машине доступа к ключам в принципе.Источники
💬 Вопрос к сообществу
Вопрос к тем, кто держит парк серверов: вы вообще пользуетесь
restrictвauthorized_keysили ограничиваетесь отдельным пользователем иcommand=? И насколько у вас распространён проброс агента — или все уже переехали наProxyJump?TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение