La enumeración de usuarios es una vulnerabilidad que podría ser utilizada por un atacante o un usuario malicioso para intentar obtener un listado de los usuarios de la plataforma y posteriormente utilizar dicha información para planificar y generar ataques de mayor impacto, como por ejemplo, ataques de averiguación de contraseñas por fuerza bruta o diccionario sobre usuarios existentes en el sistema.
Dicho de otro modo: si un atacante consiguiera averiguar un nombre de usuario, ya tendría el 50% de lo que necesita para acceder al panel de administración de nuestro sitio.
Hay dos formas de intentar averiguar el nombre de usuario de WordPress, por eso he dividido la entrada en dos partes.
Averiguar el usuario a través de la URL de Autor
Probablemente hayas configurado los enlaces permanentes para que sean amigables y conseguir un mejor posicionamiento SEO.
Si a la URL de tu sitio le añades el parámetro /?author=1 y existe un usuario con ID=1, notarás que te redirige a una URL del tipo misitio.es/author/miusuario/ donde miusuario es el nombre de usuario.
WordPress almacena en base de datos el nombre de usuario en el campo user_login. Además almacena la versión sanitizada del mismo en el campo user_nicename. Es con éste último campo con el que construye el enlace amigable de autor que vemos en la imagen de arriba.
Bastaría ir probando con IDs diferentes para ir sacando los nombres de usuario que tenemos en BBDD. Incluso hay herramientas como WP Scan que automatizan este proceso realizando barridos y sacando un listado de usuarios válidos de nuestro sitio web.
Por esto es aconsejable cambiar la URL de autor en WordPress. Por defecto no se puede cambiar el nombre de usuario desde el back-end. Para ello debes acceder a la base de datos desde el panel de control de tu hosting y buscar la tabla {prefix}users. Selecciona tu usuario y cambia el campo user_nicename con el nombre que desees, siempre en minúsculas, sin espacios, sin acentos, y sin caracteres extraños.
Así podremos tener nuestro user_login diferente del user_nicename y evitar la enumeración de usuarios. Si lo prefieres, puedes usar el plugin Edit Author Slug que te permitirte cambiar el user_nicename entre otras cosas.
Hasta aquí hemos visto como despistar a un atacante malintencionado mostrando un user_nicename que no coincide con nuestro user_login. Si queremos bloquear la enumeración de usuarios podemos hacerlo a través del archivo .htaccess añadiendo estas líneas:
# Bloquear la enumeración de usuarios (username)
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://tudominio.com/ruta_real_que_sea/? [L,R=301]
También podemos bloquear la enumeración de usuarios a través del archivo functions.php de nuestro tema añadiendo estas líneas:
<?php
//Stop User Enumeration
if ( ! is_admin() && isset($_SERVER['REQUEST_URI'])){
if (preg_match('/(wp-comments-post)/', $_SERVER['REQUEST_URI']) === 0 && !empty($_REQUEST['author']) ) {
wp_die('forbidden');
}
}