Випуск OpenSSH 9.2 з усуненням уразливості, що виявляється на етапі до автентифікації

Опубліковано реліз 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

Додати коментар або відгук