Una de las vulnerabilidades más comentadas de WordPress es la que tiene que ver con el archivo xmlrpc.php. Para resumir, este archivo es el que permite la interacción entre wordpress y aplicaciones remotas. Sirve, a la práctica, para que los propietarios/editores de un sitio WordPress puedan acceder al Gestor de Contenidos y publicar nuevas entradas desde aplicaciones conectadas con WordPress.

La vulnerabilidad tiene que ver (sobre todo) con ataques de fuerza bruta. Es decir, se realizan muchas consultas simultáneas al archivo xmlrpc.php de desde distintos puntos, de modo que el servidor se vuelve inestable y cae, dejando el sitio web inoperativo. Esto es un resumen muy tosco, claro. En realidad existen muchas otras vías por las que el xmlrpc.php puede causar una vulnerabilidad en nuestro sitio web, pero no vamos a entrar en detalles.

Si no tienes intención de realizar operaciones remotas con WordPress y deseas desactivarlo, aparentemente no existe una opción que permita inhabilitar esta funcionalidad desde los menús de configuración. Pero no está todo perdido.

Método radical para desactivar el xmlrpc.php

Si revisas tu código fuente, encontrarás una línea como esta:

<link rel="pingback" href="http://www.adriapadilla.net/xmlrpc.php" />

Para eliminar este vínculo, accede al fichero header.php y busca la siguiente línea:

<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />

Comenta la línea y la función php para que el vínculo se inhabilite

<!--<link rel="pingback" href="<?php // bloginfo( 'pingback_url' ); ?>" />-->

Por último, en el directorio raíz de tu instalación de WordPress, busca el fichero xmlrpc.php y cambia su nombre a algo completamente distinto. Si estás seguro de que no vas a utilizar nunca esta funcionalidad, lo puedes eliminar. Con esto bastaría para que el fichero no sea detectado por los “hackers” malintencionados.

Método suave para desactivar el xmlrpc.php

Si crees que en algún momento vas a necesitar la funcionalidad y no deseas eliminar el fichero, hay otra vía para desactivarla de forma “menos agresiva”, que consiste en denegar el acceso al fichero xmlrpc.php. Consiste en añadir las siguientes líneas al .htaccess de tu sitio web:

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

Existe un último método que permite el acceso parcial al archivo. Se trata de combinar la anterior directiva del .htaccess con permisos de acceso para una o varias IPs concretas. Por ejemplo:

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

Con esto ya tenemos las espaldas cubiertas frente a cualquier intruso malintencionado. Creo que no hace falta recordar la necesidad de realizar una copia de seguridad antes de proceder.



¿Quieres dejar un comentario?



Comentarios

Guiller Krax (9 de abril de 2016 a las 15:08) dice:

Hola Adrià,

Parece ser que he tenido éste tipo de problema con mi servidor. He optado por eliminarlo.

A ver si deja de marcarme limite excedido de cpu.

Gracias por la info 😉


Adria Padilla (8 de mayo de 2016 a las 10:12) dice:

Me alegra que te haya sido útil. Espero que esto te solucione el problema, aunque exceder el límite de la CPU podría ser síntoma de otros problemas. ¡Un saludo!


artandscores (5 de noviembre de 2016 a las 12:53) dice:

Muchas gracias Adrià.

Trabajo con wordpress, estoy optimizando todo lo que puedo, y ya me tenía harto el xmlrpc.php tanto en woorank como en xenu.

He utilizado lo que llamas método radical, sin embargo he debido completarlo con esta función:

/*** Borrar de las cabeceras los enlaces a xmlrpc.php y wlwmanifest.xml
***/
add_action(‘init’, ‘removeHeadLinks’);
function removeHeadLinks() {
remove_action(‘wp_head’, ‘rsd_link’);
remove_action(‘wp_head’, ‘wlwmanifest_link’);
}

Un saludo y muchas gracias por todos los buenos consejos que nos dejas master.


Adria Padilla (6 de noviembre de 2016 a las 09:37) dice:

¡Hola!

¡Gracias por comentar y gracias por la aportación! La función que compartes es perfectamente válida, ¡genial!. Por si alguien la quiere implementar, añadiré: Se debe colocar en el archivo functions.php de nuestro wordpress.

Un saludo 😉


A. Padilla | contacto
Template disponible en GitHub