Уязвимость в SSH-клиентах OpenSSH и PuTTY

В SSH-клиентах OpenSSH и PuTTY выявлена уязвимость (CVE-2020-14002 в PuTTY и CVE-2020-14145 в OpenSSH), приводящая к утечке сведений в алгоритме согласования соединения. Уязвимость позволяет атакующему, способному перехватить трафик клиента (например, при подключении пользователя через контролируемую атакующим точку беспроводного доступа), определить попытку первоначального подключения клиента к хосту, когда клиентом ещё не прокэширован ключ хоста.

Зная, что клиент пытается подключиться в первый раз и ещё не имеет на своей стороне ключ хоста, атакующий может транслировать соединение через себя (MITM) и выдать клиенту свой хостовый ключ, который SSH-клиент посчитает ключом целевого хоста, если не выполнит сверку отпечатка ключа. Таким образом, атакующий может организовать MITM не вызвав подозрения у пользователя и игнорировать сеансы, в которых на стороне клиента уже имеются прокэшированные ключи хостов, попытка подмены которых приведёт к выводу предупреждения об изменении ключа хоста. Атака строится на беспечности пользователей, не выполняющих ручную проверку fingerprint-отпечатка ключа хоста при первом подключении. Те кто проверяют отпечатки ключей от подобных атак защищены.

В качестве признака для определения первой попытки подключения используется изменение порядка перечисления поддерживаемых алгоритмов хостовых ключей. В случае если происходит первое подключение клиент передаёт список алгоритмов по умолчанию, а если ключ хоста уже имеется в кэше, то связанный с ним алгоритм выставляется на первое место (алгоритмы сортируются в порядке предпочтения).

Проблема проявляется в выпусках с OpenSSH c 5.7 по 8.3 и в PuTTY с 0.68 по 0.73. Проблема устранена в выпуске PuTTY 0.74 через добавление опции для отключения динамического построения списка алгоритмов обработки хостовых ключей в пользу перечисления алгоритмов в постоянном порядке.

Проект OpenSSH не планирует изменять поведение SSH-клиента, так как если не указать алгоритм имеющегося ключа на первом месте, будет применена попытка применения не соответствующего прокэшированному ключу алгоритма с выводом предупреждения о неизвестном ключе. Т.е. возникает выбор — либо утечка информации (OpenSSH и PuTTY), либо вывод предупреждений о смене ключа (Dropbear SSH) в случае, если сохранённый ключ не соответствует первому алгоритму в списке по умолчанию.

Для обеспечения защиты в OpenSSH предлагается использовать альтернативные способы проверки ключа хоста при помощи записей SSHFP в DNSSEC и сертификатов хоста (PKI). Также можно отключить адаптивный выбор алгоритмов хостовых ключей через опцию HostKeyAlgorithms и использовать опцию UpdateHostKeys для получения клиентом дополнительных ключей хоста после аутентификации.

Источник: http://www.opennet.ru/opennews/art.shtml?num=53286