¿Qué es el XML-RPC de WordPress y Cómo evitarlo?
El XML-RPC de WordPress se elaboró para formalizar la comunicación entre diferentes sistemas y aplicaciones fuera de WordPress y poder interactuar, un ejemplo de esto serían los clientes de escritorio o aplicaciones móviles.
Esta especificación ha formado parte de WordPress desde su creación e hizo un trabajo muy útil. Sin ella, WordPress habría estado fuera del juego. Sin embargo, xmlrpc.php tiene sus desventajas, debido a que puede introducir vulnerabilidades en tu sitio de WordPress. Esta es la principal razón por la que ha sido reemplazado por la REST API de WordPress, que hace un trabajo mucho mejor al abrir WordPress a otras aplicaciones.
¿Qué es xmlrpc.php?
XML-RPC es una especificación que permite la comunicación entre WordPress y otros sistemas. Lo hizo mediante la normalización de esas comunicaciones, utilizando HTTP como mecanismo de transporte y XML como mecanismo de codificación.
XML-RPC es anterior a WordPress: estaba presente en el software de blogs b2, que se bifurcó para crear WordPress en 2003. El código del sistema se almacena en un archivo llamado xmlrpc.php, en el directorio raíz del sitio. Y sigue ahí, aunque XML-RPC está muy desactualizado.
Si usaste la aplicación móvil WordPress antes de la versión 3.5, quizás recuerdes haber tenido que habilitar XML-RPC en tu sitio para que la aplicación pueda publicar contenido. Esto se debe a que la aplicación no estaba ejecutando el propio WordPress, sino que era una aplicación separada que se comunicaba con tu sitio de WordPress usando xmlrpc.php.
Pero no sólo se utilizó la aplicación móvil para XML-RPC: también se usó para permitir la comunicación entre WordPress y otras plataformas de blogs, permitió trackbacks y pingbacks.
Pero desde que el REST API se integró en el núcleo de WordPress, el archivo xmlrpc.php ya no se utiliza para esta comunicación. En su lugar, la REST API se utiliza para comunicarse con la aplicación móvil de WordPress, con los clientes de escritorio, con otras plataformas de blogs, con WordPress.com y con otros sistemas y servicios. La gama de sistemas con los que la REST API puede interactuar es mucho mayor que la permitida por xmlrpc.php. Además, hay mucha más flexibilidad y seguridad.
Debido a que la REST API ha reemplazado a XML-RPC, ahora debería desactivar xmlrpc.php en su sitio. Veamos por qué.
Ataques DDoS a través de Pingbacks XML-RPC
Una de las funciones que xmlrpc.php habilitó fue pingbacks y trackbacks. Estas son las notificaciones que aparecen en los comentarios de tu sitio cuando otro blog o sitio se vincula a tu contenido.
Si XML-RPC está habilitado en tu sitio, un hacker podría potencialmente montar un ataque DDoS en tu sitio explotando xmlrpc.php para enviar un gran número de pingbacks a tu sitio en poco tiempo. Esto podría sobrecargar tu servidor y poner tu sitio fuera de acción.
Ataques de fuerza bruta a través de XML-RPC
Cada vez que xmlrpc.php hace una solicitud, envía el nombre de usuario y la contraseña para su autenticación. Esto presenta una importante responsabilidad de seguridad y es algo que la REST API no hace. De hecho, el REST API utiliza OAuth que envía tokens para la autenticación en lugar de nombres de usuario o contraseñas.
Debido a que xmlrpc.php envía información de autenticación con cada solicitud, los hackers podrían utilizarla para intentar acceder a tu sitio. Un ataque de fuerza bruta como este podría permitirles insertar contenido, borrar código o dañar tu base de datos.
Si un atacante envía suficientes solicitudes a tu sitio, cada una con un par de nombres de usuario y contraseñas diferentes, existe la posibilidad de que eventualmente pueda dar con la correcta, dándole acceso a tu sitio.
Por eso, si estás ejecutando una versión actualizada de WordPress, que utiliza la REST API para comunicarse con sistemas externos, debes desactivar xmlrpc.php. No es necesario y podrías estar haciendo tu sitio vulnerable.
¿Cómo desactivar xmlrpc.php?
1- Editar wp-config.php
Editar el archivo wp-config.php the la configuración del wordpress y al final agregar la siguiente linea después de la linea que incluye ABSPATH :
add_filter( 'xmlrpc_enabled', '__return_false' );
2- Editar el archivo .htaccess
Bloquear XML-RPC ingresando este codigo cerca del inicio del archivo .htaccess:
# START XML RPC BLOCKING
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
# FINISH XML RPC BLOCKING
3- Desactivar trackbacks and pingbacks
Ir desde el Panel de administración del WordPress a Escritorio > Ajustes > Ajustes de comentarios.
Desactivar las opciones:
- Tratar de avisar a los sitios enlazados desde el artículo.
- Permitir notificaciones de enlaces de otros blogs (pingbacks y trackbacks) en los nuevos artículos.
¡Eso es todo!
Referecias