Релиз OpenSSH 8.3 с устранением уязвимости в scp
После трёх месяцев разработки представлен релиз OpenSSH 8.3, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.
В новом выпуске добавлена защита от атаки на scp, позволяющей серверу передать другие имена файлов, отличающиеся от запрошенных (в отличие от прошлой уязвимости, атака не даёт возможность сменить выбранный пользователем каталог или glob-маску). Напомним, что в SCP сервер принимает решение о том, какие файлы и каталоги отправить клиенту, а клиент лишь проверяет корректность возвращённых имён объектов. Суть выявленной проблемы в том, что если системный вызов utimes завершается ошибкой, то содержимое файла интерпретируется как метаданные файла.
Данная особенность при подключении к серверу, подконтрольному злоумышленнику, может использоваться для сохранения в ФС пользователя других имён файлов и другого содержимого при копировании при помощи scp в конфигурациях, приводящих к сбою при вызове utimes (например, при запрете utimes политикой SELinux или фильтром системных вызовов). Вероятность проведения реальных атак оценивается как минимальная, так как в типичных конфигурациях вызов utimes не завершается сбоем. Кроме того, атака не проходит незаметно - при вызове scp показывается ошибка передачи данных.
Общие изменения:
- В sftp прекращена обработка аргумента "-1" по аналогии с ssh и scp, который раньше принимался, но игнорировался;
- В sshd при использовании IgnoreRhosts теперь предоставляется три варианта выбора: "yes" - игнорировать rhosts/shosts, "no" - учесть rhosts/shosts и "shosts-only" - разрешить ".shosts", но запретить ".rhosts";
- В ssh обеспечена обработка подстановки %TOKEN в настройках LocalFoward и RemoteForward, используемых для перенаправления Unix-сокетов;
- Разрешена загрузка открытых ключей из незашифрованного файла с приватным ключом, если отсутствует отдельный файл с открытым ключом;
- При наличии в системе libcrypto в ssh и sshd теперь использует реализацию алгоритма chacha20 из данной библиотеки, вместо встроенной переносимой реализации, которая отстаёт по производительности;
- Реализована возможность дампа содержимого бинарного списка отозванных сертификатов при выполнении команды "ssh-keygen -lQf /path";
- В переносимой версии реализовано определение систем, в которых сигналы с опцией SA_RESTART прерывают работу select;
- Решены проблемы со сборкой в системах HP/UX и AIX;
- Устранены проблемы со сборкой seccomp sandbox в некоторых конфигурациях Linux;
- Улучшено определение библиотеки libfido2 и решены проблемы со сборкой с опцией "--with-security-key-builtin".
Разработчики OpenSSH также в очередной раз предупредили о грядущем переводе в разряд устаревших алгоритмов, использующих хеши SHA-1, в связи с повышением эффективности коллизионных атак с заданным префиксом (стоимость подбора коллизии оценивается примерно в 45 тысяч долларов). В одном из ближайших выпусков планируют отключить по умолчанию возможность использования алгоритма цифровых подписей по открытому ключу "ssh-rsa", который упоминается в оригинальном RFC для протокола SSH и остаётся широко распространённым на практике (для проверки применения ssh-rsa в своих системах можно попробовать подключиться по ssh с опцией "-oHostKeyAlgorithms=-ssh-rsa").
Для сглаживания перехода на новые алгоритмы в OpenSSH в одном из следующих выпусков по умолчанию будет включена настройка UpdateHostKeys, которая позволит автоматически перевести клиентов на более надёжные алгоритмы. Среди рекомендуемых для миграции алгоритмов упомянуты rsa-sha2-256/512 на базе RFC8332 RSA SHA-2 (поддерживается с OpenSSH 7.2 и используется по умолчанию), ssh-ed25519 (поддерживается с OpenSSH 6.5) и ecdsa-sha2-nistp256/384/521 на базе RFC5656 ECDSA (поддерживается с OpenSSH 5.7).
Начиная с прошлого выпуска "ssh-rsa" и "diffie-hellman-group14-sha1" удалены из списка CASignatureAlgorithms, определяющего алгоритмы, допустимые для цифровой подписи новых сертификатов, так как использование SHA-1 в сертификатах сопряжено с дополнительным риском из-за того, что атакующий имеет неограниченное время на поиск коллизии для существующего сертификата, в то время как время атаки на хостовые ключи ограничены таймаутом подключения (LoginGraceTime).