La API REST de WordPress (/wp-json) es una puerta de entrada que, por defecto, expone información valiosa que los atacantes pueden explotar para reconocimiento y planificación de ataques. Indicamos cómo bloquear este acceso y evitar exponer esta información en un sitio web WordPress.

Información filtrada y explotación de REST API de WordPress

Información sensible que filtra por defecto con el REST API de WordPress

  • Estructura completa del sitio: nombres de temas, plugins activos y sus versiones, accediendo a https://tu-sitio.com/wp-json.
  • Listado de endpoints: revela qué plugins están instalados (AIOSEO, MonsterInsights, WooCommerce, etc.).
  • Rutas de usuarios: /wp-json/wp/v2/users expone nombres de usuario, facilitando ataques de fuerza bruta.
  • Tipos de contenido personalizados: revela la arquitectura de datos del sitio.
  • Configuración del sitio: zona horaria, estructura de URLs, etc.

Cómo explotan esta información los atacantes:

  • Footprinting (reconocimiento): Escanean /wp-json para mapear la infraestructura.
  • Identificación de CVE: Detectan plugins vulnerables por sus endpoints expuestos.
  • Ataques dirigidos: Con los nombres de usuario, realizan ataques de fuerza bruta.
  • Ingeniería inversa: Estudian la estructura para diseñar exploits personalizados.

Ejemplo de consulta maliciosa:

Proteger acceso a API REST de WordPress

Hay varios métodos para proteger el acceso al API REST de WordPress, a continuación explicamos uno de ellos, modificando el fichero functions.php del tema visual actual para redirigir el acceso (si es un usuario no autenticado) a la página princial.

Paso 1: Acceder al archivo functions.php

En primer lugar, necesitaremos acceder al fichero functions.php del tema de WordPress, esto lo podemos hacer de varias formas:

Desde el administrador de archivos del hosting:

  1. Accede a cPanel o al panel de control de del hosting donde esté alojada la web.
  2. Accedemos al «Administrador de Archivos» (o herramienta similar).
  3. Navegaremos a la carpeta : public_html/wp-content/themes/tu-tema-activo/
  4. Localizamos el archivo functions.php.

Vía FTP (con cliente FTP como FileZilla o desde línea de comandos)

Podemos usar clientes como FileZilla en modo gráfico o bien, desde la línea de comandos:

Desde el panel de WordPress (menos seguro, solo si no hay otra opción)

  • Desde Apariencia → Editor de archivos de tema.
  • Selecciona functions.php de la lista.
  • En el editor realiza las modificaciones.

Paso 2: Implementar el código de redirección en functions.php

IMPORTANTE: Si no usas un tema hijo, crea uno primero, NO es recomendable editar el tema padre directamente.

Añade este código al final del archivo functions.php, antes del ?> si existe:

Paso 3: Verificar sintaxis (crítico para no romper el sitio)

Antes de guardar, es muy recomendable comprobar la sintaxis del fichero functions.php, porque si hay errores, el sitio web «se romperá»:

Una vez revisado el fichero funtions.php, vuelve a subirlo.

Paso 4: Probar la implementación

Desde navegador web

Accede al sitio web sin loguear, lo más fiable es abriendo una ventana de incógnito/privada:

  1. Abre una ventana de incógnito/privada
  2. Visita https://tusitio.com/wp-json
  3. Resultado esperado: debe redirigir automáticamente a https://tusitio.com

Desde terminal (simulando atacante)

Verificar que con usuario logueado sí hay acceso

  1. Inicia sesión como administrador
  2. Visita https://tusitio.com/wp-json
  3. Resultado esperado: Muestra el JSON completo de la API

Mejoras adicionales para máxima seguridad: Bloquear también en .htaccess

Si se quiere una doble capa de seguridad, se puede añadir también el bloqueo al REST API desde el fichero .htaccess, añadiendo este contenido: