WordPress tan (in)seguro como gustes

WordPress tan (in)seguro como gustes

El uso de Internet es inevitable, crear páginas Web para publicidad, un blog personal o vender bienes y servicios es casi indispensable hoy en día. Por ello surgieron herramientas como WordPress que fungen como gestores de contenido de páginas Web, pero más que eso, buscan facilitar la vida a personas que no cuenten con experiencia o conocimientos técnicos para desarrollar una página. Sin embargo, esa falta de conocimiento puede llevar a riesgos de seguridad en las páginas desarrolladas.

Una de las ventajas que ofrece WordPress es la implementación de plugin y temas, con los cuales puedes gestionar el contenido de manera amena, pero ¿realmente es una ventaja? No en algunos casos.

El objetivo de este artículo es hablar de la seguridad de herramientas como WordPress, en las que a veces las funcionalidades que se ofrecen pueden ser aprovechadas con un fin distinto para el que fueron desarrolladas.

El equipo de seguridad aplicativa ha observado que gran parte de los sitios que implementan WordPress cuentan con este tipo de funcionalidades habilitadas: alrededor de 90% tiene al menos una de las configuraciones que se mencionan a continuación, las cuales pueden representar una amenaza para la seguridad del aplicativo.


REST API

Primero hablaremos de la divulgación de nombres de usuario en el sistema, que es posible por una API que viene habilitada por omisión al instalar WordPress. Para verificar su estado, basta con ingresar la siguiente URL:

http://[HOSTOBJETIVO]/wp-json/wp/v2/users

Si efectivamente la API está habilitada, veremos una respuesta como la siguiente:

Como se puede observar, despliega, sobre un formato JSON, un número de ID y en seguida un nombre, los cuales son asociados a un autor que, a su vez, es el nombre de usuario en el sistema WordPress.

Con REST API existe otra manera más de listar nombres de usuario válidos, mediante la siguiente URL:

http://[HOSTOBJETIVO]/?author=[Valor numérico]

Mediante la petición anterior, es posible enumerar usuarios gracias al contenido que ha creado cada uno de ellos. Al colocar la cadena author=1, se muestra una página del contenido que haya generado el autor con el ID número 1, que en el ejemplo mostrado abajo es el usuario Appsec.

 

La pregunta en este momento es, ¿de qué me sirve contar con nombres de usuario si no tengo su contraseña? Es cierto, no contamos con la contraseña, pero este tipo de información va de la mano con otras malas configuraciones.


API XML-RPC

WordPress contiene muchos plugin o funcionalidades que podemos ocupar para realizar un mejor desempeño que, en ocasiones, pueden ser aprovechadas de una forma maliciosa. Tal es el caso de la API XML-RPC, la cual se usa para realizar distintas acciones, entre las cuales podemos destacar:

  • Editar post.
  • Eliminar post.
  • Publicar un post.
  • Cargar un archivo.

Para verificar que la API XML-RPC se encuentre habilitada, basta con ir a esta URL:

https://[HOSTOBJETIVO]/xmlrpc.php

 

Veremos un mensaje como el siguiente: “XML-RPC server accepts POST requests only.”

Una vez confirmado que está habilitada la API, vemos que solo es posible consumirla por medio del método HTTP POST. Haciendo uso de una herramienta para interceptar y enviar peticiones HTTP, interceptamos la petición que realiza nuestro navegador y modificamos el método. Además, agregamos las siguientes cadenas de texto:

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>

</methodCall>

 

Observamos que es posible listar todos los métodos disponibles mediante la API XML-RPC, aunque cabe mencionar que tiene una limitante: para hacer uso de algún método de dicha API, son necesarias las credenciales para autenticarse. Sin embargo, haciendo un recuento de actividades, previamente hemos obtenido los usuarios válidos del sistema mediante la enumeración, haciendo uso de REST API, lo cual representa 50% de la tarea.

Para ejemplificar un método mediante XML-RPC, ocupamos el método wp.getUsersBlog, el cual lista los blogs del usuario. Para ello, usamos las siguientes cadenas de texto:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>USERNAME</value></param>
<param><value>PASSWORD</value></param>
</params>
</methodCall>

 

Al intentar consumir el método de la API, vemos que nos muestra un mensaje de error, ya que el usuario o contraseña no son correctos (en este caso, ya sabemos que el dato incorrecto es la contraseña).

Como mencionamos, tenemos 50% del trabajo realizado, ya que contamos con el nombre de usuario para lograr consumir el método. Basta ahora con realizar un ataque de fuerza bruta con alguna herramienta automatizada, pues esta API no bloquea cuentas ni se encuentra implementado el uso de un CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart).

Cuando se detecte la contraseña correcta, que en este caso observamos que es una contraseña relativamente (sin caracteres especiales y longitud de menos de 10 caracteres), se mostrará en la respuesta información como la siguiente:

De esta forma es posible acceder al gestor de contenido y realizar modificaciones desconocidas para el propietario.


Conclusiones

Como se vio en este documento, las características que facilitan la administración de contenido en WordPress pueden ser usadas con fines distintos a los pensados cuando fueron desarrolladas.

Finalmente, algunas recomendaciones para evitar el uso indebido de estas API:

REST API.

  • De no ser necesaria para la administración del sistema es posible deshabilitar dicha funcionalidad mediante el uso de plugin desarrollados específicamente para WordPress.

Para más información visite el siguiente enlace: https://wordpress.org/plugins/disable-json-api/

  • Deshabilitar la página authors y redireccionar a otro sitio de la página que cuando se intente consultar.

Para más información visite el siguiente enlace: https://es.wordpress.org/plugins/disable-author-pages

API XML-RPC.

  • De no ser necesario para la administración del sistema, es recomendable deshabilitarla.

Para más información visite el siguiente enlace: https://es.wordpress.org/plugins/disable-xml-rpc/