
FAFAF
OpenSSH fino alla versione 7.7 è soggetto a una vulnerabilità di enumerazione degli utenti a causa del fatto che non ritarda il bailout per un utente non valido fino a quando il pacchetto contenente la richiesta non è stato completamente analizzato, correlato a auth2-gss.c, auth2-hostbased.c e auth2-pubkey.c.
CVE: CVE-2018-15473
Articolo da https://www.openwall.com/lists/oss-security/2018/08/15/5
senza applicare patch alla versione corrente, un attaccante remoto può facilmente verificare se un determinato utente esiste o meno (enumerazione dei nomi utente) su un server OpenSSH di destinazione:
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));
L'attaccante può provare ad autenticare un utente con un pacchetto malformato (ad esempio, un pacchetto troncato), e:
se l'utente non è valido (non esiste), allora userauth_pubkey() ritorna immediatamente e il server invia un SSH2_MSG_USERAUTH_FAILURE all'attaccante;
se l'utente è valido (esiste), allora sshpkt_get_u8() fallisce e il server chiama fatal() e chiude la connessione con l'attaccante.
usage: ssh-check-username.py [-h] [-t HOSTNAME] [-p PORT] [-u USERNAME] [-w WORDLIST]
options:
-h, --help mostra questo messaggio di aiuto ed esce
-t HOSTNAME Singolo target
-p PORT porta su cui connettersi: Porta predefinita 22
-u USERNAME nome utente da enumerare
-w WORDLIST enumera più utenti
Si prega di utilizzare questo script in modo responsabile e solo su sistemi per i quali si dispone dell'autorizzazione. L'accesso non autorizzato a un sistema può portare a gravi conseguenze legali.