Опубліковано реліз OpenSSH 9.2, відкритої реалізації клієнта та сервера для роботи за протоколами SSH 2.0 та SFTP. У новій версії усунуто вразливість, що веде до подвійного звільнення області пам'яті на стадії до проходження аутентифікації. Уразливості схильний лише випуск OpenSSH 9.1, у ранніх версіях проблема не проявляється.
Для створення умов прояву вразливості достатньо змінити банер SSH-клієнта на SSH-2.0-FuTTYSH_9.1p1 для того, щоб домогтися виставлення прапорів SSH_BUG_CURVE25519PAD і SSH_OLD_DHGEX, що залежать від версії SSH-клі. Після виставлення даних прапорів пам'ять під буфер «options.kex_algorithms» звільняється двічі — при виконанні функції do_ssh2_kex(), що викликає compat_kex_proposal(), і при виконанні функції do_authentication2(), що викликає по ланцюжку input_userauth_request(na), , assemble_algorithms() та kex_assemble_names().
Створення робочого експлоїту для вразливості вважається малоймовірним, оскільки процес експлуатації занадто ускладнений - сучасні бібліотеки розподілу пам'яті надають захист від подвійного звільнення пам'яті, а процес pre-auth, у якому є помилка, виконується зі зниженими привілеями в ізольованому sandbox-оточенні.
Окрім зазначеної вразливості у новому випуску також усунуто ще дві проблеми з безпекою:
- Помилка при обробці налаштування PermitRemoteOpen, що призводить до ігнорування першого аргументу, якщо він відрізняється від значень any і none. Проблема проявляється у версіях новіше OpenSSH 8.7 і призводить до пропуску перевірки при вказанні лише одного повноваження.
- Атакуючий, контролюючий DNS-сервер, що використовується для визначення імен, може домогтися підстановки спецсимволів (наприклад, "*") у файли known_hosts, якщо в конфігурації включені опції CanonicalizeHostname і CanonicalizePermittedCNAMEs, і системний резолвер не перевіряє коректність відповідей. Проведення атаки розглядається як малоймовірне, оскільки імена, що повертаються, повинні відповідати умовам, заданим через CanonicalizePermittedCNAMEs.
Інші зміни:
- У ssh_config для ssh додано налаштування EnableEscapeCommandline, що управляє включенням обробки на стороні клієнта escape-послідовності "~C", що надає командний рядок. За замовчуванням обробка ~C тепер відключена для використання більш жорсткої sandbox-ізоляції, що потенційно може призвести до порушення роботи систем, в яких ~C використовується для перенаправлення портів під час роботи.
- У sshd_config для sshd додано директиву ChannelTimeout для завдання таймууту неактивності каналу (канали, в яких за вказаний у директиві час не зафіксовано трафік, будуть автоматично закриті). Для сеансу, X11, агента та перенаправлення трафіку можуть бути задані різні таймаути.
- У sshd_config для sshd додана директива UnusedConnectionTimeout, що дозволяє встановити тайм-аут для завершення клієнтських з'єднань, що знаходяться певний час без активних каналів.
- У sshd додано опцію «-V» для виведення версії за аналогією з подібною опцією в клієнті ssh.
- У висновок ssh -G доданий рядок Host, що відображає значення аргументу з ім'ям хоста.
- У scp та sftp додано опцію «-X» для керування такими параметрами протоколу SFTP, як розмір буфера копіювання та кількість очікуваних завершення запитів.
- У ssh-keyscan дозволено сканування повних CIDR-діапазонів адрес, наприклад, "ssh-keyscan 192.168.0.0/24".
Джерело: opennet.ru