OpenSSH 10.5: security-фиксы agent/ssh/sshd, FIDO и ssh -Z

11 августа 2026 вышел OpenSSH 10.5 (portable: 10.5p1). Это не «косметический» релиз: в нём три security-фикса (ssh-agent, ssh, sshd), несколько полезных новинок для FIDO и диагностики ключей, а portable-сборка теперь жёстко требует ECC в libcrypto, включая NISTP521. Официальный анонс: Announce: OpenSSH 10.5 released, полный changelog: openssh.com/txt/release-10.5.

OpenSSH — стандартный клиент и сервер для SSH 2.0 и SFTP на Linux, BSD и большинстве VPS. Если у вас есть удалённый доступ к серверу, деплой по SSH, agent forwarding или FIDO-ключи, этот релиз стоит прочитать внимательно, а не ждать, пока дистрибутив сам подтянет пакет.

Почему релиз вышел быстрее обычного

В заметке к релизу команда OpenSSH прямо пишет: за последнее время пришло много security-отчётов, в том числе из AI-моделей и с AI-помощью. Часть таких находок не подтверждается в реалистичной threat model, но часть — реальные баги. Отдельно отмечено, что баги, найденные AI, потом иногда независимо находят другие исследователи. Вывод для проекта: пока делают более частые релизы, чтобы фиксы доходили до пользователей быстрее, а не ждали «большого» окна.

Для администратора это значит простое правило: security-фиксам в OpenSSH имеет смысл уделять внимание сразу, а не «когда-нибудь при apt upgrade».

Несовместимое изменение: ECC обязателен в portable

Portable OpenSSH (то, что обычно собирают на Linux) теперь требует поддержку Elliptic Curve Cryptography в libcrypto, включая кривую NISTP521. Это есть в дефолтных сборках LibreSSL, OpenSSL, BoringSSL и AWS LC, которые OpenSSH поддерживает. Конфигурация --without-openssl этим требованием не затронута.

На практике пакеты из нормальных дистрибутивов (Ubuntu, Debian, RHEL и т.п.) уже идут с OpenSSL/LibreSSL, где ECC включён. Риск скорее у тех, кто собирает OpenSSH вручную на урезанном libcrypto или на кастомных embedded-сборках. Если у вас «голый» openssl без ECC — 10.5 portable просто не соберётся/не сойдётся по зависимостям так, как раньше.

Security: три фикса, которые важны на практике

1. ssh-agent: lock + session-bind

Исправлено взаимодействие между блокировкой агента и расширением session-bind@openssh.com (им помечают forwarded agents). Когда агент был заблокирован (locked), binding-запросы отклонялись. В результате операции, которые должны были оставаться только локальными, могли выполняться удалённо: в том числе добавление PKCS#11-токенов и использование ключей с destination restrictions. Репорт: sn0x-sharma.

Если вы пользуетесь agent forwarding, ssh-add -x / lock агента, PKCS#11 или ключами с ограничениями по хостам — это один из главных поводов обновиться. Сценарий не «каждый VPS с openssh-server», а инфраструктура с форвардом агента и жёсткими политиками на ключи.

2. ssh: use-after-free при remote forwarding + multiplexing

В клиенте закрыт потенциальный realloc use-after-free: если remote forwarding добавляют через локальный multiplexing-сокет (ControlMaster / ControlPath), пока на сервере ещё висит pending open remote forwarding. Репорт и фикс: Brian Mingus (Cognatory).

Затрагивает в первую очередь тех, кто активно крутит -R / RemoteForward поверх ControlPersist-сессий, а не «просто ssh user@host раз в день».

3. sshd: keyword restrict и tunnel forwarding

Ключевое слово restrict в authorized_keys теперь корректно применяется и к tunnel forwarding. Tunnel forwarding по умолчанию и так административно выключен, но если вы полагаетесь на restrict как на «жёсткий минимум прав» для ключа, поведение до 10.5 могло быть неполным. Репорт: Erichen, Institute of Computing Technology, Chinese Academy of Sciences.

Отдельных CVE-номеров в release notes 10.5 нет — в тексте релиза это блок Security без CVE ID. Не выдумывайте идентификаторы: смотрите upstream notes и advisory дистрибутива, когда пакеты доедут.

Новые возможности

FIDO: touch-required и verify-required в ssh-keygen

В ssh-keygen при сбросе passphrase приватного FIDO-ключа можно выставлять или снимать флаги touch-required и verify-required. Удобно, когда политика «касание / PIN / биометрия» меняется уже после генерации ключа, без пересоздания всего ключа с нуля.

Порядок FIDO-ключей при pubkey auth

Клиент ssh меняет порядок перебора сертификатов/ключей при pubkey authentication: сначала FIDO без user presence (без touch), в конце — FIDO с verify (PIN/биометрия). Идея простая: сначала низкофрикционные authenticator’ы, потом «дорогие» по UX. На машинах с несколькими ключами/сертификатами поведение логина может чуть измениться — это ожидаемо, не баг.

ssh -Z: что реально попробует клиент

Добавлен режим ssh -Z user@host: печатает ключи, которые будут опробованы для public key authentication, в том порядке, в каком их возьмёт клиент. Удобный инструмент отладки, когда «ключ есть, а ssh его не берёт», IdentityFile / CertificateFile / FIDO / agent перепутаны, или непонятен порядок после обновления.

ssh -Z user@example.com

Ожидаемый результат: список identity в порядке попыток, без установки полноценной сессии «ради проверки».

sshd-session в process title

sshd через setproctitle помечает post-authentication monitor как sshd-session. Мелочь, но в ps / мониторинге процессов проще отличить стадии сессии.

Bugfixes, на которые стоит глянуть

  • ssh-keyscan: чтение server banner стало non-blocking — один «залипший» хост меньше блокирует массовый keyscan.
  • sshd: ошибки packet path через sshpkt_fatal() — в логах больше контекста о peer (адрес, порт, пользователь).
  • sshd: при UpdateHostKeys — не больше одной signature-операции на hostkey proof.
  • GSSAPI option names, сломанные рефакторингом servconf в 10.4 (bz3974).
  • Проверка типа pubkey против allowed algorithms до разбора ключа от peer — часть parsing/verification убрана из pre-auth attack surface (предложение Christopher Paul Rohlf, Anthropic).
  • ChannelTimeout и RekeyLimit снова применяются внутри Match-блоков sshd_config.
  • Portable: PAMServiceName снова разрешён внутри Match (сломан в 10.4, bz3987).

Что сделать на сервере

1. Проверить текущую версию

ssh -V
# на сервере
sshd -V 2>&1
# или
dpkg -l openssh-server openssh-client 2>/dev/null
rpm -q openssh-server openssh-clients 2>/dev/null

2. Обновить, когда пакет доедет в репозиторий

Debian/Ubuntu (когда 10.5 появится в security/backports/вашем зеркале; до этого версия в apt может быть ниже upstream):

sudo apt update
apt-cache policy openssh-server openssh-client
sudo apt install --only-upgrade openssh-client openssh-server
ssh -V

После обновления сервера обычно достаточно reload/restart sshd. Не закрывайте текущую SSH-сессию до проверки, что новый sshd принимает новые подключения (второй терминал / console провайдера).

# Debian/Ubuntu: часто unit называется ssh, не sshd
sudo systemctl reload ssh || sudo systemctl reload sshd
sudo systemctl status ssh --no-pager || sudo systemctl status sshd --no-pager

Сборка из исходников (только если вы сами ведёте portable-сборку; проверьте checksums на openssh.com / зеркалах OpenBSD):

# пример: portable tarball 10.5p1 - сверяйте SHA256 из release notes
# SHA256 (base64) openssh-10.5p1.tar.gz = 1E0oqDnqna+WnMaRUP3lmRCys5Nh2tgaO9bL0ZIY2xE=

3. Если пользуетесь agent forwarding и FIDO

  • Обновите и клиент, и (где уместно) окружение с ssh-agent.
  • Перепроверьте политику lock агента и destination restrictions после 10.5.
  • На клиентах с несколькими FIDO-ключами прогоните ssh -Z user@host и убедитесь, что порядок попыток ожидаемый.
  • Ключи в authorized_keys с restrict: перечитайте man, если используете tunnel options — поведение restrict для tunnel forwarding теперь жёстче/корректнее.

Где обычно ломается

  • Обновили только openssh-client на ноутбуке, а jump-host / bastion со старым ssh-agent forwarding оставили как есть.
  • Ждут «магического» CVE-номера в NVD, а в upstream security-блок уже есть без CVE.
  • Кастомная сборка без ECC в libcrypto — portable 10.5 уже не «как раньше».
  • Match-блоки в sshd_config: после 10.4 часть директив (GSSAPI, PAMServiceName, ChannelTimeout, RekeyLimit) вела себя криво — 10.5 чинит, но конфиг всё равно стоит прогнать через sshd -t.
sudo sshd -t
# при ошибке синтаксиса sshd не стартует «тихо» - сначала правка, потом reload

Вывод

OpenSSH 10.5 от 11 августа 2026 — security-oriented релиз с тремя важными фиксами (agent lock + session-bind, UAF в клиенте при remote forward + mux, restrict и tunnel forwarding), плюс FIDO-флаги, ssh -Z и ужесточение требования ECC в portable. Для обычного VPS с паролем/ключом без agent forwarding срочность средняя, но обновление по-прежнему разумный baseline. Для инфраструктуры с agent forwarding, PKCS#11, destination-restricted keys и FIDO — ставьте в очередь обновлений сразу, как только пакет появится в вашем дистрибутиве или у вас принята сборка из upstream.

Источники


Комментарии загружаются…