OpenSSH 10.6: sftp, две ошибки GSSAPI в sshd и сжатие без LZ77

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 всё равно не стоит, полной защиты такие меры не дают.

Остальные исправления безопасности короче:

  • 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.

Источники и ссылки


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