El endpoint /wp-mail.php es un archivo legítimo pero antiguo del núcleo de WordPress, diseñado para una funcionalidad llamada "Publicar por correo electrónico". Sin embargo, hoy en día se considera obsoleto y su presencia activa puede suponer un riesgo de seguridad.

¿Para qué sirve wp-mail.php?

Es un script que permite publicar entradas en tu blog enviando un correo electrónico a una dirección específica. Fue introducido en las primeras versiones de WordPress (alrededor de la 1.2, en 2004) y estaba pensado para cuando publicar desde el navegador no era tan sencillo.

Su funcionamiento es el siguiente: cuando se ejecuta el archivo (ya sea manualmente o mediante una tarea programada), WordPress se conecta a una cuenta de correo configurada (vía POP3), revisa los mensajes nuevos y, si encuentra alguno, lo convierte en una entrada de blog.

⚠️ ¿Por qué es un problema de seguridad?

Aunque es un archivo oficial, tiene varios problemas que lo convierten en un riesgo potencial:

Funcionalidad obsoleta y vulnerable: Esta característica ya no se recomienda y ha sido origen de vulnerabilidades de seguridad en el pasado. Por ejemplo, versiones antiguas de WordPress (anteriores a la 4.7.1) tenían una vulnerabilidad (CVE-2017-5491) que permitía a atacantes publicar entradas sin autorización. También se han reportado problemas de cross-site scripting (XSS) relacionados con este archivo en versiones afectadas.

Ausencia de controles de acceso modernos: El archivo no tiene ningún sistema de autenticación fuerte. Cualquier persona que conozca la URL de wp-mail.php podría ejecutarla, lo que abre la puerta a ataques como la publicación de spam o la saturación del servidor (denegación de servicio).

Confianza en la seguridad del correo: La función se basa en la configuración de una cuenta de correo y la verificación del remitente, un sistema que puede ser vulnerable a suplantación de identidad (spoofing).

Expone información: Se ha reportado que puede exponer la dirección de correo del remitente en algunos casos.

¿Cómo comprobar si está accesible?

Accede a: https://tu-dominio.com/wp-mail.php

Normalmente el servidor responderá con un mensaje indicando que no hay mensajes que procesar o mostrará una página en blanco. Esto es un comportamiento esperado.

¿Qué deberías hacer?

La recomendación general es deshabilitar o bloquear el acceso a este archivo a menos que tengas una necesidad muy específica de esta funcionalidad antigua y estés dispuesto a asumir los riesgos.

Puedes hacerlo de varias formas:

Bloquear el acceso público desde el servidor:

<FilesMatch "(wp-mail)\.php$"> Require all denied </FilesMatch>

Desactivar la funcionalidad desde WordPress:

Añadir la siguiente línea al archivo wp-config.php también la desactiva, evitando que se ejecute aunque se acceda a la URL:

define('DISABLE_WP_CRON', true);

(Nota: Esta línea deshabilita el cron de WordPress en general; asegúrate de que no afecte a otras tareas programadas que tengas).

Nginx:

location = /wp-mail.php { deny all; return 403; }

Utilizar un WAF

Un firewall de aplicaciones web puede bloquear solicitudes automatizadas o patrones de ataque dirigidos a archivos del núcleo de WordPress.

Si decides usar esta función (no recomendado):

Asegúrate de que la cuenta de correo que uses sea exclusiva para esto, tenga una contraseña muy segura y que el script se ejecute mediante un cron del servidor en lugar de dejarlo expuesto a ejecuciones públicas.