В библиотеке libssh (не путать с libssh2), предназначенной для добавления клиентской и серверной поддержки протокола SSHv2 в программы на языке Си, выявлена уязвимость (CVE-2021-3634), приводящая к переполнению буфера при инициировании процесса смены ключа (rekey) с использованием механизма обмена ключами, применяющего другой алгоритм хэширования. Проблема устранена в выпуске 0.9.6.
Суть проблемы в том, что операция смены ключа допускает применение криптографических хэшей с размером слепка, отличающимся от первоначально использованного алгоритма. При этом память для хэша в libssh выделялась исходя из первоначального размера хэша и использование хэша большего размера приводит к перезаписи данных за границей выделенного буфера. В качестве запасного метода защиты можно ограничить список поддерживаемых методов обмена ключами только алгоритмами с одинаковым размером хэша. Например, для привязки к SHA256 в код можно добавить:
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_KEY_EXCHANGE,
"diffie-hellman-group14-sha256,curve25519-sha256,ecdh-sha2-nistp256");
Суть проблемы в том, что операция смены ключа допускает применение криптографических хэшей с размером слепка, отличающимся от первоначально использованного алгоритма. При этом память для хэша в libssh выделялась исходя из первоначального размера хэша и использование хэша большего размера приводит к перезаписи данных за границей выделенного буфера. В качестве запасного метода защиты можно ограничить список поддерживаемых методов обмена ключами только алгоритмами с одинаковым размером хэша. Например, для привязки к SHA256 в код можно добавить:
rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_KEY_EXCHANGE,
"diffie-hellman-group14-sha256,curve25519-sha256,ecdh-sha2-nistp256");
Уязвимость в libssh, приводящая к переполнению буфера
www.opennet.ru