Desde hace tiempo el archivo de WordPress xmlrpc.php
es el objetivo de un tipo de ataque muy específico, anteriormente conocido como vulnerabilidad pingback de XML-RPC y actualmente conocido como Brute Force Amplification Attack o Ataque de amplificación de fuerza bruta.
En esta entrada explicaré todo lo que necesitas saber para proteger tu sitio WordPress de este exploit malicioso, así como de otras amenazas similares.
Índice de contenidos
¿Qué es XML-RPC?
Antes de ponernos manos a la obra protegiendo el archivo xmlrpc.php
, es importante saber qué hace, por qué está en toda instalación de WordPress, y una explicación bastante exacta es la siguiente:
[XML-RPC es] una especificación y serie de implementaciones que permiten que el software de diversos sistemas operativos se ejecute en entornos diferentes para realizar llamadas de procesos en internet. Es un procedimiento remoto que realiza llamadas usando HTTP como transporte y XML como codificador. XML-RPC se diseño para seer lo más simple posible, al tiempo de permitir que se transmitan, procesen y devuelvan estructuras de datos completos.
Dicho más sencillo, básicamente XML-RPC permite a las plataformas de internet interactuar unas con otras. En concreto, el archivo de WordPress xmlrpc.php
permite que diversas aplicaciones externas se conecten, transmitan y procesen datos.
¿Necesito XML-RPC?
Ya que preguntas te diré que NO, en realidad no necesitas el archivo xmlrpc.php
. Ahora bien, hay varios plugins que utilizan la funcionalidad XML-RPC de WordPress para realizar operaciones remotas, así que, ante la duda, pregunta al desarrollador de cada plugin si necesita usarlo.
Por ejemplo, Jetpack utiliza XML-RPC para conectar varios de sus componentes con WordPress.com, y la misma aplicación WordPress para iPhone o Android no se conectará con tus sitios si no tienes XML-RPC activo.
Pero salvo que uses Jetpack o algún otro plugin muy específico, la mayoría de los sitios WordPress no necesitan el archivo xmlrpc.php
para nada.
En consecuencia, si no necesitas el archivo es perfectamente factible que lo borres, bloquees o desactives, sobre todo para evitarte la multitud de ataques que usan este archivo.
Protección con plugins
Si buscas una solución rápida en el directorio oficial de plugins hay varios que te ofrecen desactivar XML-RPC, elige el que más confianza te merezca, o prueba varios hasta dar con el que se ajuste a tus necesidades.
Protección mediante .htaccess
Si le has perdido el miedo al archivo .htaccess hay varias maneras de bloquear el archivo xmlrpc.php
. Aquí tienes unas cuantas:
Bloquear xmlrpc.php mediante RedirectMatch
# protect xmlrpc
<IfModule mod_alias.c>
RedirectMatch 403 (?i)/xmlrpc.php
</IfModule>
Lo mejor de esta técnica es que no importa donde tengas instalado WordPress, el archivo xmlrpc.php
quedará protegido independientemente de su ubicación en la estructura de directorios (p.ej.,/wp/xmlrpc.php
, /wordpress/xmlrpc.php
, /loquesea/xmlrpc.php
, etc.). También distingue mayúsculas de minúsculas, así que estarás protegido ante cualquier variación de ataque «todo mayúsculas» (all-cap).
Bloquear xmlrpc.php mediante Order/Deny
# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Cualquiera de estos códigos funcionan perfectamente para proteger el archivo xmlrpc.php
bloqueando cualquier intento de acceso al mismo, pero este método es especialmente chulo antes ataques contra XML-RPC. Es simple, exhaustivo, fiable y sin mantenimiento.
Hay otros modos de protegerte mediante .htaccess, y te invito a probarlas, aquí las tienes.
Protección mediante wp-config.php
También puedes protegerte de ataques a XML-RPC desactivando el protocolo desde al archivo wp-config.php
, añadiendo la siguiente línea a continuación de require_once(ABSPATH . 'wp-settings.php');
:
add_filter('xmlrpc_enabled', '__return_false');
Protección mediante una función personalizada
Si no eres de instalar plugins, o de tocar archivos del sistema como .htaccess
o wp-config.php
, también puedes protegerte de los ataques de amplificación de fuerza bruta desactivando la funcionalidad system.multicall
del archivo xmlrpc.php
. mediante una función que puedes añadir a tu plugin de funcionalidades o al archivo functions.php:
function shapeSpace_disable_xmlrpc_multicall($methods) {
unset($methods['system.multicall']);
return $methods;
}
add_filter('xmlrpc_methods', 'shapeSpace_disable_xmlrpc_multicall');
Eso sí, este método tienes pros y contras:
- Pro – no necesitas instalar otro plugin
- Pro – no necesitas modificar .htaccess o wp-config.php
- Contra – solo vale para el tema activo si lo pones en el archivo functions.php
- Contra – solo vale para este tipo de amenaza concreta
Creo que no hace falta explicar los pros, y sobre los contras, ten en cuenta que esto solo te protege de ataques al system.multicall
y no a otras variables, y que si lo añades al archivo functions.php y cambias de tema estarás expuesto.
En definitiva
Sobre todo debes ser consciente de que el archivo de WordPress xmlrpc.php
es un importante foco de ataques, y mientras no haya una solución definitiva para que WordPress no utilice este método de conexión entre aplicaciones ( mediante la WP REST API, por ejemplo) más vale bloquearlo, controlarlo o eliminarlo, ya que es uno de los objetivos principales de ataques de fuerza bruta, vulnerabilidades de pingbacks y ataques de amplificación, entre otros.
Más información:
- Perishable Press
- Cómo proteger WordPress de la vulnerabilidad pingback
- CloudFlare Blog
- Blog Sucuri
- WordPress Codex
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Yo simplemente lo borro xmlrpc.php y cero complicaciones.
Yo simplemente borro xmlrpc.php y cero complicaciones.
Hombre, valer vale, pero en cada actualización tienes que volver a borrarlo
Otra de las mil y una cosas que se tienen que tocar en WordPress porque la mayoria no la utilizaran en su vida. Ya creo que va siendo hora que le hagan una buena revision al sistema y solo dejen lo necesario y no sigan engordandolo. Pero por lo visto la filosofia de WordPresses es «desactiva y modifica toda la mierda que te pongamos».
Hombre, en este caso creo que es más por primar más el tema móvil, recuerda que si no no rula la app para móviles.
Hola Fernando. Wordfence comenta en una publicación que protege contra ataques a xmlrpc.php https://www.wordfence.com/blog/2015/10/wordpress-xml-rpc-brute-force-attacks-amplification-multiple-logins/
¿Es necesario bloquear el archivo o borrarlo si utilizamos este plugin? Y una duda más, los sistemas que comentas para htaccess y demás, si se implementan, ¿seguiría funcionando jetpack o interferirían con la función de conexión?
Un saludo
Buenas, y no sería, también, una buena opción cambiar los pemisos del archivo ? 🙂
¿y cuales pondrías? Solo necesitan el de lectura, y es el mínimo
Un 600 permitiría a alguien que no sea administrador editar el archivo?… o es que simplemente con que tenga cualquier permiso de lectura en el nivel que sea ya hace al archivo vulnerable?
Solo con permisos de lectura
Se pueden aplicar dos formas a la vez (htacces y wp-config)?.. o con una sola es suficiente? 🙂
Una sola pero funcionan de distinto modo, yo elegiría la de htaccess
Por mi parte utilizo: All In One WP Security que también protege otras muchas cosas.