6 октября вышел OpenSSH 10.6, об этом говорится в примечаниях к выпуску на openssh.com. Это в первую очередь выпуск с исправлениями безопасности: sftp мог записать файлы за пределами целевого каталога, в sshd поправили две ошибки в GSSAPI, а словарное сжатие LZ77 отключили из-за атаки по побочному каналу.
Если вы держите VPS или сервер с доступом по SSH, обновление стоит поставить, как только оно появится в вашем дистрибутиве. Ниже по порядку: что исправили, что может сломаться и что добавили.
Много отчётов от ИИ и выпуски чаще
Команда OpenSSH пишет, что в последнее время получает много отчётов об уязвимостях, и многие из них найдены моделями ИИ или с их помощью. Часть таких отчётов при реалистичной модели угроз оказывается без последствий для безопасности, но разработчики им рады, особенно если человек сам разобрал находку, приложил тест и предложил исправление.
Важнее другое наблюдение: уже не раз ошибку, найденную ИИ, потом независимо находил другой исследователь. Отсюда вывод разработчиков: те, кто не сообщает об ошибках в проекты, скорее всего, тоже могут их найти. Поэтому OpenSSH пока будет выпускать релизы чаще и не копить исправления до следующего планового выпуска. Среди авторов исправлений в 10.6 прямо указан Chris Rohlf «в сотрудничестве с Claude и Anthropic Research».
sftp: запись вне целевого каталога и две ошибки GSSAPI в sshd
Первое исправление касается клиента sftp. Он теперь строже проверяет пути, которые возвращает сервер. Раньше в некоторых случаях вредоносный или взломанный сервер мог подсунуть такие пути, что рекурсивное копирование записывало файлы за пределами целевого каталога. Ошибку нашёл и исправил Junghoon Cho. На практике риск есть, когда вы рекурсивно скачиваете что-то с сервера, которому не до конца доверяете.
Две другие ошибки в sshd связаны с аутентификацией GSSAPI (обычно это Kerberos). Первая: учётные данные GSSAPI от неудачной попытки входа могли сохраниться и стать доступны, если потом прошла другая аутентификация. Теперь sshd сохраняет их только после успешного входа. Вторая: состояние GSSAPI теперь сбрасывается перед аутентификацией, чтобы данные одной попытки не путались со следующей. Обе нашёл Moritz Theile. В самом OpenSSH GSSAPIAuthentication по умолчанию выключен, но некоторые дистрибутивы включают его в своём sshd_config. Если он выключен, эти две ошибки вас не касаются.
Проверить, включён ли GSSAPI на сервере, можно так:
ssh -V sudo sshd -T | grep -i gssapi
Сжатие без LZ77: атака Crossing the Streams
Самая интересная часть выпуска связана со сжатием. Fabian Bäumer и Marcus Brinkmann описали в препринте Crossing the Streams атаку на SSH со сжатием. В одном SSH-соединении может идти несколько каналов: shell, проброс портов и так далее, и у всех у них общий контекст сжатия. LZ77 заменяет повторы ссылками назад, поэтому если атакующий может подмешать свои данные в один канал и видит длину шифротекста в сети, он по ней подбирает секреты из другого канала. Это та же идея, что у CRIME и BREACH для HTTPS.
По данным авторов, в самом удачном для атаки сценарии с низким шумом секрет из 8 символов алфавита в 26 букв восстанавливается не больше чем за 276 попыток. Работа принята на ACM CCS 2026.
В ответ OpenSSH 10.6 отключает словарный кодер LZ77 и в ssh, и в sshd. Опция Compression от этого станет заметно менее эффективной, это изменение указано в списке потенциально несовместимых. Документация и раньше не советовала включать сжатие для соединений, где смешан доверенный и недоверенный трафик. Теперь разработчики рекомендуют сжимать на уровне приложения поверх SSH: так обычно и эффективнее, и такой атаке это не подвержено. Например, вместо ssh -C для больших файлов лучше сжать их заранее.
sudo sshd -T | grep -i compression tar czf - /var/www | ssh backup@host 'cat > www.tgz'
Имена с $ и \ в ssh и другие исправления
Клиент ssh теперь не принимает в командной строке имена пользователей с символами $ и \. Если имя приходит из недоверенного источника, через ProxyCommand, Match exec и похожие места такое имя могло привести к инъекции команд в shell. На имена из директивы User в конфиге ограничение не действует. Разработчики при этом напоминают: передавать недоверенный ввод прямо в командную строку ssh всё равно не стоит, полной защиты такие меры не дают.
$ и \ касается только имён из командной строки, имя из User в конфиге работает как раньше. Источник: openssh.com, OpenSSH 10.6 release notes.Остальные исправления безопасности короче:
- ssh-keygen правильно учитывает переход на летнее время при разборе дат, раньше срок действия сертификата мог съехать на час;
- сжатые пакеты больше не распаковываются сверх максимальной длины пакета;
- ключевое слово
restrictв authorized_keys теперь действует и на проброс туннелей (PermitTunnel, по умолчанию выключен); - опции вроде
AuthorizedPrincipalsFileсо значениемnoneвнутри блокаMatchбольше не принимаются за имя файла; - на старых платформах без передачи файловых дескрипторов (QNX 6, SCO OpenServer 5) принудительно выключены
GatewayPortsиStreamLocalForwarding, а опцию сборки--disable-fd-passingубрали.
Что нового: ssh-mldsa44-ed25519, AgentSocketPath, TCPKeepAlive all
- включён гибридный постквантовый алгоритм подписи ssh-mldsa44-ed25519, уже без суффикса @openssh.com; ключи от прежней экспериментальной версии надо перевыпустить;
- в sshd появилась опция
WarnWeakCrypto, она включена по умолчанию и пишет в лог, если клиент договорился об обмене ключами без постквантовой защиты; - новая опция
AgentSocketPathв sshd задаёт, где создавать сокет проброшенного агента, а у ssh-agent для этого есть флаг-A; PubkeyOptions max-pk-ok: проверки «подойдёт ли этот ключ» больше не съедаютMaxAuthTries, по умолчанию 6 таких проверок бесплатно, так что агент с кучей ключей реже упирается в лимит;TCPKeepAlive allвключает keepalive и для сокетов проброса;- в sftp появился
mkdir -p, аChannelTimeoutпонимает дробные секунды.
Ещё стоит знать о предупреждении на будущее: scp -R (копирование между двумя удалёнными хостами силами удалённого scp) объявлен устаревшим. В 10.6 флаг работает, но выводит предупреждение, а позже будет игнорироваться, и копирование пойдёт через хост, где запущен scp.
В итоге OpenSSH 10.6 стоит поставить без долгих раздумий: sftp больше не пишет за пределы каталога по указке сервера, GSSAPI в sshd ведёт себя аккуратнее, а сжатие без LZ77 закрывает атаку Crossing the Streams ценой эффективности. Если вы пользуетесь Compression yes или ssh -C, лучше перейти на сжатие на уровне приложения. Все выпуски собраны на странице release notes.