Na biblioteca libssh (não confundir com libssh2), destinada a adicionar suporte de cliente e servidor para o protocolo SSHv2 em programas na linguagem C, foi identificada uma vulnerabilidade (CVE-2021-3634) que causa um estouro de buffer ao iniciar o processo de troca de chaves (rekey) usando um mecanismo de troca de chaves que aplica um algoritmo de hash diferente. O problema foi corrigido na versão 0.9.6.
A essência do problema é que a operação de troca de chaves permite o uso de hashes criptográficos com tamanhos de impressão diferentes do algoritmo originalmente utilizado. Nesse caso, a memória para o hash em libssh era alocada com base no tamanho original do hash e o uso de um hash maior resulta em sobrescrita de dados além do buffer alocado. Como um método de proteção alternativo, pode-se restringir a lista de métodos de troca de chaves apenas a algoritmos com o mesmo tamanho de hash. Por exemplo, para vinculação ao SHA256, pode-se adicionar ao código: rc = ssh_options_set(s->ssh.session, SSH_OPTIONS_KEY_EXCHANGE, "diffie-hellman-group14-sha256,curve25519-sha256,ecdh-sha2-nistp256");
Fonte: opennet.ru
