Acerca de XML-RPC

XML-RPC es un protocolo de llamada a procedimiento remoto que utiliza XML para el intercambio de datos. En XML-RPC, el cliente que desea llamar a un método remoto crea los parámetros de entrada en formato XML y los envía mediante una solicitud HTTP a un servidor remoto que implementa el protocolo XML-RPC.

Cómo funciona XML-RPC en WordPress

WordPress es una plataforma de blogs completa. Es altamente personalizable y facilita el desarrollo de un sitio web. Mediante XML-RPC de WordPress se pueden crear clientes de blogs de WordPress y otro software que realice tareas por lotes, como crear varias entradas a partir de un archivo, entre otras. El sistema XML-RPC puede ampliarse mediante plugins de WordPress para modificar su comportamiento. La funcionalidad XML-RPC está activada de forma predeterminada desde WP 3.5, especialmente para los dispositivos móviles y las aplicaciones de escritorio de terceros que la utilizan para comunicarse con WordPress.

El problema de XML-RPC es que puede provocar el agotamiento de la CPU y de la memoria, y que la base de datos del sitio alcance el número máximo de conexiones abiertas. Esto hará que el sitio vulnerable (y el servidor) quede fuera de servicio durante un período de tiempo, lo que afecta a la disponibilidad de su sitio web.

Un atacante podría abusar de la API XML-RPC de WP de cuatro maneras:

  • Recopilación de información — el atacante puede sondear puertos específicos en la red interna del objetivo
  • Escaneo de puertos — el atacante puede escanear los puertos de los hosts de la red interna
  • Ataques DoS — Además de la transferencia de datos, xmplrpc.php también se encarga de habilitar los pingbacks y los trackbacks. Son las notificaciones que usted recibe cuando un blog o un sitio web de terceros enlaza a su sitio. Aunque ha sido reemplazado, algunos sitios web siguen utilizando XML-RPC.php por compatibilidad con versiones anteriores. Si usted es uno de ellos, los hackers pueden lanzar ataques DDoS contra xmlrpc.php enviando una gran cantidad de pingbacks y dejar su sitio fuera de servicio, es decir, hacerlo inaccesible para sus usuarios.
  • Hackeo de routers — el atacante puede reconfigurar un router interno de la red
  • Ataques de fuerza bruta - XML-RPC (XML-remote processing call) permite llamadas remotas codificadas transportadas mediante HTTP, que le permiten publicar, editar o eliminar de forma remota un archivo o contenido de su sitio web WordPress. En cada solicitud, xmplrpc.php envía la información de autenticación. Esto facilita enviar una gran cantidad de datos de una sola vez. Sin embargo, la posibilidad de enviar una gran cantidad de datos de una sola vez implica que los hackers también pueden introducir numerosas contraseñas. Si un hacker envía suficientes solicitudes de autenticación con distintas combinaciones de nombre de usuario y contraseña, es posible que finalmente acierte y, como resultado, su sitio quede comprometido.

Compruebe si XML-RPC ya está desactivado en su blog

Antes de continuar, debemos realizar una comprobación sencilla para validar si XML-RPC está activado en su blog. Para ello, intente acceder al archivo xmlrpc.php desde su navegador mediante la siguiente URL https://domain.com/xmlrpc.php (sustituya domain.com por su nombre de dominio).

Si está desactivado, recibirá el mensaje “403 – Forbidden”. Si recibe cualquier otro mensaje, siga leyendo para conocer sus opciones de mitigación.

Mitigaciones o soluciones alternativas basadas en código

1. Si no utiliza la funcionalidad XML-RPC para nada, para protegerse frente a posibles vulnerabilidades, agregue las siguientes líneas al archivo .htaccess:

# protect xmlrpc
<IfModule mod_alias.c>
RedirectMatch 403 /xmlrpc.php
</IfModule>

2. Para redirigir las solicitudes de xmlrpc.php a una página personalizada, modifique RedirectMatch de la siguiente manera:

# protect xmlrpc
Redirect 301 /xmlrpc.php http://example.com/custom-page.php

3. Denegar todo acceso a xmlrpc.php:

# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

4. Permitir el acceso a xmlrpc.php únicamente a direcciones IP específicas.

# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from <IP>
Allow from <IP>
</Files>

También puede agregar el siguiente código a su archivo wp_config.php, después de la línea require_once(ABSPATH . ‘wp-settings.php’);, si desea desactivar XML-RPC en su sitio.

add_filter('xmlrpc_enabled', '__return_false');