
FAFAF
O OpenSSH até a versão 7.7 é propenso a uma vulnerabilidade de enumeração de usuários devido ao fato de não atrasar a rejeição de um usuário inválido na autenticação até que o pacote contendo a solicitação seja totalmente analisado, relacionado a auth2-gss.c, auth2-hostbased.c e auth2-pubkey.c.
CVE: CVE-2018-15473
Artigo de https://www.openwall.com/lists/oss-security/2018/08/15/5
sem aplicar o patch na versão atual, um atacante remoto pode facilmente testar se um determinado usuário existe ou não (enumeração de nomes de usuário) em um servidor OpenSSH alvo:
87 static int
88 userauth_pubkey(struct ssh *ssh)
89 {
101 if (!authctxt->valid) {
102 debug2("%s: disabled because of invalid user", __func__);
103 return 0;
104 }
105 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||
106 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
107 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
108 fatal("%s: parse request failed: %s", __func__, ssh_err(r));
O atacante pode tentar autenticar um usuário com um pacote malformado (por exemplo, um pacote truncado), e:
se o usuário for inválido (não existe), então userauth_pubkey() retorna imediatamente e o servidor envia um SSH2_MSG_USERAUTH_FAILURE para o atacante;
se o usuário for válido (existe), então sshpkt_get_u8() falha e o servidor chama fatal() e encerra sua conexão com o atacante.
usage: ssh-check-username.py [-h] [-t HOSTNAME] [-p PORT] [-u USERNAME] [-w WORDLIST]
options:
-h, --help show this help message and exit
-t HOSTNAME Single target
-p PORT port to connect on: Default port is 22
-u USERNAME username you want to enumerate
-w WORDLIST enumerate multiple users
Por favor, use este script de forma responsável e apenas em sistemas para os quais você tenha permissão de acesso. O acesso não autorizado a um sistema pode levar a graves consequências legais.