Cómo deshabilitar el XML-RPC en WordPress (Apache y Nginx)

El siguiente tutorial explica como deshabilitar la funcionalidad XML-RPC en WordPress, para evitar la realización de ataques de fuerza bruta amplificados contra nuestros sitios a través del método system.multicall. Las directivas de acceso mostradas, en teoría, deben ser similares para la mayoría de los CMS que utilizan XML-RPC y son desplegados en servidores web Apache o Nginx, asumiendo que el archivo xmlrpc.php se encuentra, con ese nombre, en el directorio raíz de la instalación del CMS. Para más información sobre los riesgos de seguridad que implica tener habilitada esta característica, se recomienda leer este artículo.

Comencemos por tanto, guiados por el ingeniero en Ciencias Informáticas Nestor Antonio Castro Castillo que nos explica, paso a paso, como debemos poceder según el tipo de Servidor Web que utilicemos:

Deshabilitar XML-RPC en WordPress + Nginx

Asumiendo que ya hemos descargado nuestra versión de WordPress y la hemos puesto en el directorio raíz de nuestro servidor Nginx (en mi caso es el directorio por defecto /var/www/html), que ya contamos con una base de datos para nuestro sitio y lo hemos configurado en el fichero wp-config.php, lo siguiente que debemos hacer es definir las reglas de configuración de Nginx, para que este pueda manejar la navegación en nuestro sitio:

# Upstream to abstract backend connection(s) for php
upstream php {
    server unix:/run/php/php7.0-fpm.sock;
     server 127.0.0.1:9000;
}
server {
   listen 80 default_server;
   listen [::]:80 default_server;
## Your website name goes here.
   server_name wordpress;
## Your only path reference.
   root /var/www/html/wordpress;
## This should be in your http block and if it is, it’s not needed here.
   index index.php;
location = /favicon.ico {
   log_not_found off;
   access_log off;
}
location = /robots.txt {
   deny all;
   log_not_found off;
   access_log off;
}
location / {
   # This is cool because no php is touched for static content.
   # include the “?$args” part so non-default permalinks doesn’t break when using query      string
   try_files $uri $uri/ /index.php?$args;
}
    location ~ \.php$ {
    #NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }
   location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
  }
}

A continuación, vamos a adicionar la directiva que bloqueará el acceso directo al archivo xmlrpc.php y retornará una página de Error 404. Para ello, en el bloque server, adicionamos la siguiente directiva:

# IMPORTANT: for security purposes, disable access to xmlrpc
location = /xmlrpc.php {
deny all;
return 404;
access_log off;
log_not_found off;
}

Esto se escribirá en un archivo de nombre wordpress (u otro de su selección), el cual vamos a copiar en el directorio sites-available de Nginx mediante el  comando:

sudo cp wordpress /etc/nginx/sites-available/

Luego, vamos a hacer referencia a este archivo desde un enlace simbólico con el mismo nombre en la carpeta sites-enabled mediante el comando:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

Una vez hecho esto reiniciamos el servidor web y tendremos nuestro sitio corriendo con todas las solicitudes realizadas al fichero xmlrpc.php siendo denegadas y retornando una página de Error 404.

Deshabilitar XML-RPC en WordPress + Apache

Tratándose de Apache, el proceso es incluso más simple que en Nginx. Una vez más, asumimos que ya tenemos nuestra instalación de WordPress en el directorio raíz del servidor Apache (/var/www/html). Dado que vamos a prohibir el acceso al archivo xmlrpc.php mediante el sistema de control de acceso basado en directorios de Apache, necesitamos realizar 2 pasos básicos.

Paso 1: Habilitar mod_rewrite
Primero habilitamos el módulo rewrite en nuestro servidor mediante el comando: a2enmod rewrite

Luego, en el fichero de configuración de apache (/etc/apache2/apache.conf) adicionamos la siguiente directiva: AllowOverride All

Esto permite realizar cambios de acceso a directorio desde el archivo .htaccess, ya que es el nombre que por defecto, Apache espera encontrar en la instalación de WordPress para realizar dichos cambios.

Paso 2: Definir .htaccess
Acto seguido, procedemos a crear, en la raíz de la instalación de WordPress, el archivo .htaccess, mediante el comando:

sudo touch /var/www/html/wordpress/.htaccess

Posteriormente, incorporaremos la siguiente directiva:

# Disable WordPress xmlrpc.php requests
order deny,allow
deny from all

Al concluir, cualquier solicitud al fichero xmlrpc.php será denegada y se retornará una página de Error 403.

Conclusiones

Las vulnerabilidades de XML-RPC se producen por dos vías, la primera está dada por la implementación de los métodos disponibles a consumir  y las acciones que estos permiten realizar en el sistema y segundo, el desconocimiento de muchos administradores sobre XMLR-RPC, su habilitación por defecto y su funcionamiento como punto de entrada.

Agradecemos nuevamente al ingeniero Nestor Antonio Castro Castillo por este interesante tutorial que  escribió para el blog. Esperamos que su contenido contribuya, sobre todo en lo desarrolladores que utilizan WordPress y Drupal, a mejorar la seguridad en sus actuales y futuras aplicaciones web.

S4lud0s y h4st4 el próx1m0 p0st!!!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s