ASA-2019-00574 – libssh2: Out-of-bounds read ao conectar-se a um servidor SSH mal-intencionado


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00574

Identificador(es)

ASA-2019-00574, CVE-2019-17498

Título

Out-of-bounds read ao conectar-se a um servidor SSH mal-intencionado

Fabricante(s)

The libssh2 project

Produto(s)

libssh2

Versão(ões) afetada(s)

libssh2 version 1.9.0 e anteriores

Versão(ões) corrigida(s)

libssh2 versões com o seguinte commit aplicado:

packet.c: improve message parsing #402
https://github.com/libssh2/libssh2/pull/402/commits/1c6fa92b77e34d089493fe6d3e2c6c8775858b94

Prova de conceito

Sim

Descrição

Existe uma vulnerabilidade de out-of-bounds read, que implica potencial negação de serviço ou divulgação remota de informações. Vulnerabilidade é acionada quando libssh2 é usado para conectar-se a um servidor SSH malicioso. O overflow ocorre quando o servidor SSH envia uma mensagem para finalizar conexão, o que significa que a vulnerabilidade pode ser acionada no início do processo de conexão, antes da conclusão da autenticação.

Detalhes técnicos

O local de origem da vulnerabilidade é packet.c:480:

if(message_len < datalen-13) {

O valor de datalen não é confiável porque é controlado pelo servidor SSH remoto. Se datalen == 11, por exemplo, a subtração irá causar um overflow e a verificação de limites de message_len será ineficaz. message_len é um número inteiro unsigned de 32 bits que também é controlado pelo servidor SSH remoto, portanto, isso pode levar a um out-of-bounds read na linha 485:

language_len =
_libssh2_ntohu32(data + 9 + message_len);

O out-of-bounds read geralmente causa apenas uma falha de segmentação, mas também há potencial para causar outros tipos de danos na chamada para LIBSSH2_DISCONNECT na linha 499:

if(session->ssh_msg_disconnect) {
LIBSSH2_DISCONNECT(session, reason, message,
message_len, language, language_len);
}

Depende de como a biblioteca libssh2 é usada, porque session->ssh_msg_disconnect é uma função de callback que é nula por padrão, mas pode ser configurada pelo usuário da biblioteca (chamando libssh2_session_callback_set).

Créditos

Kevin Backhouse (Semmle Security Research)

Referência(s)

Another libssh2 integer overflow (CVE-2019-17498)/ semmie blog
https://blog.semmle.com/libssh2-integer-overflow-CVE-2019-17498/

packet.c: improve message parsing #402
https://github.com/libssh2/libssh2/pull/402/commits/1c6fa92b77e34d089493fe6d3e2c6c8775858b94

Out-of-bounds read in libssh2 (CVE-2019-17498)
https://github.com/kevinbackhouse/SecurityExploits/tree/8cbdbbe6363510f7d9ceec685373da12e6fc752d/libssh2/out_of_bounds_read_disconnect_CVE-2019-17498

CVE-2019-17498
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-17498

CVE-2019-17498
https://nvd.nist.gov/vuln/detail/CVE-2019-17498

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 8 dezembro 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.