OpenSSH 10.6 отключает сжатие LZ77 из-за утечки данных через общий словарь

OpenSSH

Выпуск OpenSSH 10.6 закрывает несколько уязвимостей, которые нашли при разборе кода с помощью инструментов искусственного интеллекта. Самой заметной правкой стало полное отключение сжатия LZ77. Общий словарь сжатия позволял вытащить содержимое чужого канала из той же сессии. Идентификаторы CVE этим ошибкам не присвоили.

Детали уязвимостей

Реализацию протокола SSH 2.0 и передачи файлов SFTP используют для удалённого доступа к серверам, сетевым устройствам, сборочным системам и репозиториям кода. Ошибка в ней затрагивает почти любую инфраструктуру, от домашнего сервера до промышленного контура. Поэтому разбор исправлений полезен даже тем, кто не обновляется сразу.

Механизм LZ77 ищет повторы в потоке и заменяет их ссылками на словарь. Словарь один на всю SSH-сессию, а сессия несёт несколько независимых каналов, так работает мультиплексирование. Если один канал подконтролен злоумышленнику, а второй передаёт секреты, подбор входных данных в первом меняет длину шифротекста во втором. По этим колебаниям восстанавливают открытый текст. Атаку описали Фабиан Боймер и Маркус Бринкманн в работе "Пересечение потоков: восстановление открытого текста SSH через общий контекст сжатия в мультиплексированных каналах". Защита от неё известна давно: не сжимать трафик с разным уровнем доверия в одном соединении. Теперь словарный кодировщик убрали совсем. Опция Compression работает слабее, зато утечка через словарь исчезает. Тем, кто экономит трафик, советуют сжимать данные на уровне приложения.

Отдельная уязвимость нашлась в sftp. Клиент доверял путям, которые возвращал сервер при рекурсивном копировании, и мог записать файл за пределами целевой директории. Достаточно было подключиться к серверу, подконтрольному злоумышленнику. Патч предложил Чо Джунхун. Две ошибки в механизме GSSAPI (система единой аутентификации, распространённая в корпоративных сетях) касаются сервера sshd. Учётные данные сохранялись после неудачной попытки входа, а состояние не сбрасывалось между попытками. При включённой настройке GSSAPIAuthentication они могли перейти в следующую сессию и сработать уже после успешного входа. Здесь помог Мориц Тайле.

Ещё одна проблема ведёт к внедрению команд. В именах пользователей, введённых в командной строке, запретили символы $ и \. Через них имя подставлялось в директивы ProxyCommand и Match exec из настроек, что давало возможность выполнить код. На имена из файлов конфигурации запрет не распространяется, и это стоит учитывать при переносе правил. Нашли проблему специалисты Tencent Keen Lab. В ssh-keygen исправили пересчёт дат с учётом летнего времени. Раньше срок действия сертификата мог сдвинуться на час, а в отдельных часовых поясах на два. Проверка максимального размера пакета при распаковке закрывает создание zip-бомб, то есть архивов, которые разворачиваются в огромный объём данных.

Ключевое слово restrict в файле authorized_keys запрещает перенаправления, но на туннели PermitTunnel оно не действовало. Теперь ограничение соблюдается полностью. Опция none внутри блоков Match раньше воспринималась как имя файла, а не как отключение директивы. Это касалось, например, AuthorizedPrincipalsFile. Отдельный случай связан с платформами, где нет передачи файловых дескрипторов и для выделения терминала нужны права root. Там процесс sshd-session сохранял повышенные привилегии. Пользователь мог обойти ограничения и, к примеру, занять порты с низкими номерами. Речь идёт о QNX 6, SCO OpenServer 5 и сборках с опцией --disable-fd-passing. Для них принудительно выключили GatewayPorts и StreamLocalForwarding, а поддержку самих систем в будущем уберут.

Команда OpenSSH отмечает рост числа отчётов, которые приходят от моделей искусственного интеллекта. Часть находок ИИ затем независимо повторяют другие исследователи. Значит, злоумышленники, не сообщающие об ошибках проекту, тоже могут их находить. Чтобы исправления попадали к пользователям быстрее, проект переходит на более частые выпуски и отказывается от накопления правок к плановой дате. О случаях эксплуатации этих уязвимостей разработчики не сообщают.

Помимо исправлений, в 10.6 добавили гибридную постквантовую подпись ssh-mldsa44-ed25519. Прежний экспериментальный вариант использовал суффикс @openssh.com, теперь его нет, поэтому старые ключи придётся пересоздать. Сервер получил опцию WarnWeakCrypto, включённую по умолчанию: она пишет в журнал случаи, когда клиент выбирает схему согласования ключей, нестойкую к квантовым компьютерам. У ssh-add появился флаг -P для пропуска ввода PIN-кода на токенах, которым он не нужен, у sftp режим -p для создания директорий по аналогии с mkdir. Тайм-ауты каналов теперь принимают доли секунды.

Флаг -R у scp, которым копируют данные между двумя удалёнными хостами, объявили устаревшим. Некоторое время он проработает с предупреждением, затем его проигнорируют.

Обновление до 10.6 закрывает все перечисленные проблемы разом. Администраторам стоит сверить версии на серверах и в образах контейнеров, обновить клиентские сборки и проверить, не включено ли сжатие там, где через одно соединение идёт трафик с разным уровнем доверия. Настройку GSSAPIAuthentication без реальной необходимости лучше не держать активной. Имена пользователей с символами $ и \ в командной строке больше не принимаются, поэтому скрипты с такими значениями придётся переписать. Частые выпуски OpenSSH означают, что за новыми версиями теперь нужно следить внимательнее, чем раньше.

Ссылки

Комментарии: 0