¿Sabes que es esta URL en tu sitio web wordpress? wp-json/wp/v2/users esta es una de las vulnerabilidades más común en wordpress, se llama API REST de wordpress y cuando el acceso no está restringido es posible que cualquier persona entre al siguiente directorio: https://tu-sitio-web.com/wp-json/wp/v2/users y puedan ver todos los nombres de usuario que tienes registrados en tu web.
wp-json/wp/v2/users retorna una lista de todos los usuarios que publicaron por lo menos un post, además expone nombre de autor, ID de usuario, URL del avatar.
¿Cómo funciona?
Cuando una persona logra entrar a tu API REST lo que verán en pantalla es un código aparentemente sin sentido. Pero ese código tiene mucho sentido para quien sabe como leerlo, y no es tan difícil leerlo.
Lo que ves en pantalla es un código JSON el cual estructura datos de forma que se pueden enviar y todos los lenguajes de programación pueden interpretarlo. de esta forma se enviar paquetes de información ordenados y fáciles de comprender.
Pero se vuelven una vulnerabilidad si exponen información sensible, como datos personales o credenciales de acceso. En este caso Wordpress deja expuestos tus “Nombres de Usuario”.
Si te fijas en el apartado "slug": podrás ver tu nombre de usuario, como se muestra en la imagen.
Si presionas “Ctrl + F” te saldrá la barra de búsqueda, luego escribe “slug” en la barra y presiona enter. esto dejara resaltado en amarillo el apartado “slug” donde podras ver si tu nombre de usuario esta expuesto.
¿Por qué es una vulnerabilidad?
Para un ciberatacante, esto se llama “enumeración de usuarios” esta información es muy valiosa ya que al tener tu nombre de usuario solo necesita adivinar tu contraseña con un ataque de fuerza bruta para tener acceso total a tu panel de administrador de Wordpress.
¿Cómo deshabilitar la REST API de WordPress?
Antes de empezar es necesario advertirte que no debes bloquear por completo el acceso a la API REST ya que algunos plugin que usan de forma legítima la API podrían dejar de funcionar o algunas funciones podrían empezar a fallar:
- Contact Form 7: Usa algunos endpoints de la API REST para envíos de formularios.
- WooCommerce: Aprovecha la API REST para leer, crear, actualizar, borrar información y gestionar el carrito.
- Yoast SEO: Se integra directamente con la API REST para extraer todos los metadatos de SEO.
- Jetpack: Requiere acceso a la API REST para conectarse con los servicios de WordPress.
Entre otros muchos plugins que usan la API REST en sus funciones.
Lo más recomendable es restringir el acceso sin bloquearlo completamente.
La forma más sencilla y segura de deshabilitar la API REST de WordPress es mediante un plugin o añadiendo un pequeño fragmento de código en el archivo functions.php de tu tema hijo (child theme) o en un plugin de snippets (como Code Snippets).
Opción 1: Usar un plugin (La forma más fácil, sin código)
Puedes usar el plugin gratuito Disable REST API.
- Ve a tu panel de control de WordPress → Plugins → Añadir nuevo.
- Busca Disable REST API.
- Instálalo y actívalo.
¿Cómo funciona?
Deshabilita la API REST para todos los usuarios que no hayan iniciado sesión. Los usuarios autenticados (como administradores en el panel de control) seguirán teniendo acceso para evitar romper el editor de bloques (Gutenberg) o plugins como Yoast o WooCommerce en el admin
Opción 2: Mediante código (Sin instalar plugins)
Si prefieres no cargar la web con más plugins, puedes añadir este bloque de código al archivo functions.php de tu tema o mediante el plugin Code Snippets:
Deshabilitar para usuarios NO autenticados (Recomendado)
Es la opción más segura, ya que bloquea el acceso público pero no rompe el panel de administración de WordPress.
Copia y pega el siguiente codigo:
Deshabilitar endpoints específicos
Para deshabilitar únicamente endpoints específicos como la lista de usuarios /wp/v2/users, que suele ser un objetivo común, para evitar técnicas de enumeración de usuarios la mejor estrategia es filtrar las rutas mediante el hook rest_endpoints.
De esta manera, la API REST sigue funcionando con normalidad para Gutenberg, Yoast SEO o WooCommerce, pero el endpoint seleccionado devolverá un error o será eliminado por completo de la API.
Opción 3: Eliminar la ruta del endpoint.
Añadir el siguiente fragmento de código al archivo functions.php de tu tema o mediante un plugin de fragmentos como Code Snippets elimina por completo la ruta de usuarios para cualquiera que no sea administrador:
¿Qué hace?
Si una persona sin rol de administrador intenta acceder a https://tusitio .com/wp-json/wp/v2/users WordPress responderá con un error 404 Not Found como si la ruta no existiera.
¿Cómo puedo bloquear la enumeración de usuarios a través de las URLs redireccionadas tipo /?author=1 en WordPress?
Además de la API REST, la enumeración de usuarios mediante el parámetro /?author=N es una de las técnicas de reconocimiento más comunes en WordPress: si un atacante prueba https://tusitio .com/?author=1, WordPress automáticamente lo redirecciona a la URL canónica del autor por ejemplo, https://tusitio .com/author/juanperez/, exponiendo el nombre de usuario de login.
Para bloquear o redirigir esta técnica, puedes aplicar código directamente en tu archivo functions.php o añadir reglas en la configuración de tu servidor web .htaccess o Nginx
Opción 4: Mediante código en WordPress
Añade este fragmento al archivo functions.php de tu tema hijo o mediante el plugin Code Snippets. Captura la petición antes de que WordPress procese la redirección canónica y la bloquea si el usuario no es administrador:
¿Qué hace?
Si alguien intenta acceder a /?author=1 o a la página de archivo de autor /author/nombre/, lo redirige silenciosamente con un estado 301 a la página principal.
Si en lugar de redirigir prefieres devolver un error 404 (Página no encontrada) o 403 (Prohibido):
Opción 5: Mediante Plugins de Seguridad
Si utilizas un plugin de seguridad integral como Wordfence, iThemes Security (Solid Security) o All In One WP Security & Firewall, todos incluyen un selector para activar esta protección automáticamente:
- Wordfence: All Options → Brute Force Protection → Marca la casilla "Prevent user enumeration via author scans".
- Solid Security: Settings → Advanced → User Security → Activa "Disable Author Archives".