OpenSSH 10.6, выпущенный 6 октября, намеренно ухудшает эффективность SSH-сжатия и перестаёт принимать в командной строке имена пользователей с символами $ и \. Для администраторов и DevOps-команд это означает: после обновления часть автоматизации может сломаться, зато два класса рисков — утечка данных через сжатие и инъекции через конфигурацию SSH — становятся существенно менее удобными для атакующего.
О релизе OpenSSH 10.6 сообщает The New Stack. Самое заметное изменение касается опции Compression: разработчики отключили LZ77-кодировщик словаря, который использовался при сжатии трафика. Сжатие останется доступным, но будет работать хуже — это прямо отмечено в списке потенциально несовместимых изменений.
Причина не в борьбе за лишние миллисекунды. В одном SSH-сеансе несколько каналов — например, интерактивная оболочка, туннель и передача файлов — используют общий буфер словаря сжатия. Исследователи показали, что по изменениям длины сжатого шифротекста можно подбирать фрагменты открытого текста из другого канала. Шифрование соединения при этом не ломается: проблема в побочном канале, который создаёт повторное использование состояния компрессора.
Команда OpenSSH выбрала консервативную реакцию: убрала механизм, а не пыталась окружить его дополнительными ограничениями. В release notes пользователям советуют переносить сжатие на уровень приложения, где это возможно. Такой вариант обычно эффективнее для конкретного протокола и не делит один словарь между независимыми каналами SSH. Для обычной админской сессии разница может остаться незаметной; для медленных каналов, резервного копирования и крупных передач через SSH её стоит измерить до массового развёртывания.
Второе намеренно ломающие изменение адресовано скриптам и платформам, которые собирают команду ssh из внешних данных. Клиент теперь отвергает символы $ и \ в имени пользователя, переданном в командной строке. Раньше такое значение могло попасть в оболочку через директивы вроде ProxyCommand или Match exec и превратиться в инъекцию. Об ограничении сообщил исследовательский коллектив SecBuddyF KeenLab Tencent, также известный как CodeBuddy Security.
Есть важное исключение. Значение, заданное директивой User в конфигурационном файле SSH, под новый запрет не подпадает. Это сохраняет работу с легаси-системами, где действительно существуют нестандартные учётные записи, но одновременно подчёркивает границу доверия: конфигурационный файл администратор контролирует сам, а аргумент командной строки может прийти из CI-переменной, тикета, веб-интерфейса или чужого скрипта. Разработчики отдельно напоминают, что передавать недоверенный ввод прямо в командную строку всё равно плохая идея: фильтр двух символов не способен учесть все варианты оболочек и пользовательских настроек.
Помимо этих изменений, релиз исправляет несколько менее заметных, но полезных проблем. sftp стал строже проверять пути, возвращённые сервером, чтобы при рекурсивном копировании сервер не мог направить запись за пределы целевого каталога. sshd теперь сохраняет учётные данные GSSAPI только после успешной аутентификации. Также исправлена обработка летнего времени в ssh-keygen: прежняя ошибка могла сдвинуть срок действия сертификата на час, а в часовом поясе Antarctica/Troll — на два.
Для команд эксплуатации практический план выглядит прозаично: проверить CI/CD-скрипты, bastion-хосты и внутренние обёртки вокруг SSH на динамические имена пользователей; отдельно протестировать каналы, где включено Compression и важна пропускная способность. OpenSSH 10.6 хорошо показывает нынешний баланс в инфраструктурном ПО: совместимость ценна, но когда «редкий сценарий» даёт атакующему путь к данным или выполнению команды, поддерживать старое поведение становится дороже, чем один раз починить автоматизацию.