
FAFAF
OpenSSH hasta 7.7 es propenso a una vulnerabilidad de enumeración de usuarios debido a que no retrasa la salida para un usuario de autenticación no válido hasta que el paquete que contiene la solicitud se haya analizado por completo, relacionado con auth2-gss.c, auth2-hostbased.c y auth2-pubkey.c.
CVE: CVE-2018-15473
Informe de https://www.openwall.com/lists/oss-security/2018/08/15/5
Sin parchear la versión actual, un atacante remoto puede probar fácilmente si un usuario determinado existe o no (enumeración de nombres de usuario) en un servidor OpenSSH objetivo:
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));
El atacante puede intentar autenticar a un usuario con un paquete malformado (por ejemplo, un paquete truncado), y:
si el usuario no es válido (no existe), entonces userauth_pubkey() retorna inmediatamente y el servidor envía un SSH2_MSG_USERAUTH_FAILURE al atacante;
si el usuario es válido (existe), entonces sshpkt_get_u8() falla y el servidor llama a fatal() y cierra su conexión con el atacante.
uso: ssh-check-username.py [-h] [-t HOSTNAME] [-p PORT] [-u USUARIO] [-w WORDLIST]
opciones:
-h, --help muestra este mensaje de ayuda y sale
-t HOSTNAME Objetivo único
-p PORT puerto al que conectar: Puerto predeterminado es 22
-u USUARIO nombre de usuario que deseas enumerar
-w WORDLIST enumerar múltiples usuarios
Por favor, utiliza este script de forma responsable y solo en sistemas en los que tengas permiso para acceder. El acceso no autorizado a un sistema puede conllevar graves consecuencias legales.