XML-RPC es una de esas funciones de WordPress de las que la mayoría de los administradores de sitios nunca ha oído hablar y, sin embargo, lleva más de una década funcionando silenciosamente en segundo plano en casi cualquier instalación de WordPress. El archivo xmlrpc.php está en el directorio raíz y acepta peticiones desde el exterior. Originalmente, era la única forma de gestionar un blog de WordPress de forma remota. Hoy en día, es sobre todo un riesgo de seguridad que los atacantes adoran explotar.
Qué hace XML-RPC en WordPress
XML-RPC son las siglas de Extensible Markup Language – Remote Procedure Call. Dicho de forma sencilla, es una forma de que el software externo se comunique con tu sitio WordPress a través de HTTP. La aplicación externa envía una petición XML con un formato concreto a tusitio.com/xmlrpc.php, WordPress la procesa y devuelve una respuesta XML.
A través de esta interfaz, los clientes remotos pueden hacer cosas como:
- Crear, editar y borrar entradas y páginas
- Subir imágenes y otros archivos multimedia
- Moderar y gestionar comentarios
- Obtener la configuración y los metadatos del sitio
- Enviar y recibir pingbacks entre blogs
Piénsalo como una API primitiva, funcional pero diseñada en una época anterior a que las APIs REST fueran habituales.
XML-RPC vs. REST API: de imprescindible a obsoleto
A mediados de los años 2000, si querías escribir una entrada de blog desde el móvil o desde una aplicación de escritorio como Windows Live Writer, XML-RPC era tu única opción. WordPress adoptó la MetaWeblog API y la Blogger API, ambas basadas en XML-RPC, para que estas herramientas pudieran comunicarse con tu sitio.
Después, en 2016, WordPress 4.7 incorporó la REST API de serie. De repente había una forma moderna y estandarizada de interactuar con WordPress, una que utiliza JSON en lugar de XML, admite una autenticación adecuada y es mucho más fácil de manejar. A partir de ese momento, XML-RPC se convirtió en una reliquia. La mayoría de los plugins, aplicaciones e integraciones modernos usan exclusivamente la REST API.
Riesgos de seguridad de XML-RPC: fuerza bruta, DDoS y más
El archivo es accesible públicamente por defecto en cualquier sitio WordPress. Eso de por sí ya no es genial, pero los problemas reales van más a fondo:
- Amplificación de fuerza bruta: XML-RPC tiene un método llamado
system.multicallque permite agrupar cientos de peticiones en una sola. Un atacante puede probar 500 combinaciones de usuario y contraseña en una única petición HTTP. Muchos plugins de protección de inicio de sesión ni siquiera detectan esto, porque solo vigilanwp-login.php. - Abuso de pingbacks: la función de pingback puede usarse como arma para ataques DDoS. Un atacante ordena a miles de sitios WordPress que "hagan ping" a un servidor objetivo, convirtiendo así sitios inocentes en una botnet. Esto ha ocurrido repetidamente en ataques reales.
- Enumeración de nombres de usuario: incluso sin credenciales válidas, las respuestas de XML-RPC pueden confirmar si un nombre de usuario existe, dando a los atacantes la mitad de la información que necesitan.
- Superficie de ataque innecesaria: cualquier endpoint accesible públicamente que acepte autenticación es un posible punto de entrada. Si no usas XML-RPC, tenerlo abierto es como dejar sin cerrar una puerta por la que nadie pasa nunca.
¿Tu sitio WordPress sigue necesitando XML-RPC?
La respuesta sincera: casi nadie. Hay algunos casos puntuales:
- Jetpack dependía mucho de XML-RPC, pero se está pasando a la REST API. Las versiones más recientes de Jetpack funcionan sin él para la mayoría de las funciones.
- Aplicaciones móviles muy antiguas: la aplicación móvil actual de WordPress utiliza la REST API. Solo las versiones obsoletas anteriores a 2016 siguen necesitando XML-RPC.
- Herramientas de terceros heredadas: algunas recetas antiguas de IFTTT o plataformas de publicación quizá todavía lo usen, pero existen alternativas para todas ellas.
Si ninguno de estos casos se aplica a ti, no hay un buen motivo para mantener XML-RPC habilitado.
Cómo deshabilitar XML-RPC en WordPress
El método más rápido es un filtro en el functions.php de tu tema o en un plugin propio:
add_filter('xmlrpc_enabled', '__return_false');Esto deshabilita los métodos de XML-RPC, pero el archivo sigue devolviendo una respuesta. Para bloquear el acceso por completo a nivel de servidor, añade esto a tu .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>O, si estás en Nginx:
location = /xmlrpc.php {
deny all;
return 403;
}Muchos plugins de seguridad (Wordfence, iThemes Security, Sucuri) también ofrecen un interruptor para deshabilitar XML-RPC con un clic.
Detecta un endpoint XML-RPC abierto con InspectWP
InspectWP comprueba si tu endpoint xmlrpc.php es accesible desde el exterior. Si responde a las peticiones, el informe lo señala y explica por qué deberías plantearte deshabilitarlo, sobre todo si tu sitio no tiene un motivo legítimo para mantenerlo activo.