13 septiembre 2011

Full Path Disclosure en plugins y themes para Wordpress



Wordpress es uno de los CMS más utilizados. En un principio se usaba mucho en sitios personales o blogs, actualmente lo usan como "framework" para desarrollar sitios web no tan personales y en algunos casos lo usan para aplicaciones web. Si bien es un CMS muy utilizado, no todos los desarrolladores se encargan de darle la seguridad que se necesita y, por otro lado, las personas que no son desarrolladores o programadores simplemente instalan éste CMS y no se preocupan de nada más que instalarle plugins, themes y escribir en él, es por este motivo que el Staff de Wordpress debería preocuparse por la seguridad de todos sus usuarios.

En este artículo quiero revivir un tema que escribí el año 2009 en mi blog personal (Parte I, Parte II y Parte III) sobre una falla de seguridad que afecta a muchos plugins y themes, incluyendo los que se instalan por defecto como los themes classic y default o los plugins akismet y hello_dolly.

La vulnerabilidad se produce por un bug presente en muchos themes y plugins que, al llamar a una función del CMS, no validan que exista, provocando un warning o error y como consecuencia, un bonito Full Path Disclosure. El mensaje que nos divulga la ruta de la aplicación corresponde a un mensaje de PHP y se produce al no utilizar la validación function_exists() antes de llamarla.

Para poder explotar la vulnerabilidad debemos llamar directamente a los archivos del theme o plugins. Si pensamos en los que vienen instalado por defecto, la ruta hacia ellos siempre será la misma: wp-content/plugins/akismet.php, wp-content/themes/classic/footer.php, wp-content/themes/default/header.php, etc. Por ejemplo, usamos Google para buscar un sitio al azar que use wordpress como plataforma. buscamos "site:cl inurl:wp-content" y llegamos al sitio "http://www.imp.cl", le agregamos por ejemplo "wp-content/plugins/akismet/akismet.php" y obtenemos el full path disclosure:

La vulnerabilidad se puede "ocultar" desactivando los errores en el archivo de configuración de php, pero el bug sigue existiendo.

El tema a discusión no es de quien es el problema, si del administrador del servidor que no tiene desactivadas esas opciones o de los desarrolladores, a lo que me quiero enfocar es en la despreocupación por parte de los encargados de seguridad de Wordpress que, según ellos, no es problema de wordpress ni de las políticas de seguridad, sino de la persona encargada del server. Pero entonces, una persona que no tiene los conocimientos necesarios para administrar o configurar un servidor, que simplemente contrató un hosting y se leyó el howto para instalar wordpress, que hace?

Yo pienso que la gente de Wordpress tiene la capacidad y deben responsabilizarse por lo lo que están ofreciendo, en las políticas de seguridad debería existir la norma de que los archivos no se puedan llamar directamente, como lo hacen otros CMS.

Vamos a tomar como ejemplo 3 themes y 3 plugins aleatorios que podemos encontrar en el sitio oficial de Wordpress, veremos si validan el acceso directo a los archivos o al menos si validan que las funciones existan antes de ser llamadas. Lo que revisaremos será lo siguiente:


Tanto WP Super Cache como WP Touch tienen llamadas a funciones que no existen cuando se llama al archivo directamente:

add_action( 'init', 'wp_super_cache_text_domain' );

En los archivos wp-super-cache/wp-cache.php y wptouch/wptouch.php respectivamente. De los plugins probados, sòlo WP DB Backup verifica que el archivo no está siendo llamado directamente:

if ( ! defined('ABSPATH') ) {
die('Please do not load this file directly.');
}

En los themes, TODOS son vulnerables. Ningún theme pasó la prueba, si vemos los códigos fuentes sólo el archivo "footer.php" tiene más de 4 llamadas a funciones que no son previamente validadas, como por ejemplo el archivo "coraline/footer.php", tiene:

1. get_sidebar( 'footer' );
2. wp_footer();
3. __();
4. esc_url();
5. esc_attr_e();


Encontrar sitios web que usen Wordpress como plataforma es demasiado sencillo, saber que plugins o themes tienen instalados o son usados en el sitio tambien, sólo tenemos que ver el código fuente del sitio.

De los plugins y themes que vienen por defecto en la instalación de Wordpress, sólo la última versión de Akismet viene parchado para que valide que los archivos no sean llamados directamente.

Explotar Full Path Disclosure para muchos es inofensivo, ya que lo único que nos entrega es la ruta donde se encuentra la aplicación dentro del servidor, pero lo que muchos ignoran, es que mientras más información tengamos sobre el servidor o sitio que estamos atacando, más fácil es lograr con éxito lo que planeamos. En muchas ocasiones cuando tenemos en la mira un sitio web o un servidor, terminamos tomando el control gracias a distintas vulnerabilidades encontradas en todos los sitios alojados en el mismo servidor. Si bien esta vulnerabilidad por si sola no es muy crítica, un sitio podría ser vulnerable a Local File Include, que nos permitiría ver códigos fuentes del sitio, otro a Directory Traversal, permitiendo navegar por los directorios en busca de información sensible y, por último, Full Path Disclosure nos sería útil para saber donde buscar esos archivos que nos pueden entregar la información que necesitamos.

----------------------------------------------------

Contribución enviada por Fernando Lagos (@Zerial)

6 comments :

Antonio dijo...

¿no podeis comunicarselo al equipo de Wordpress?

un saludo

Zerial dijo...

Hola Antonio: El año 2009 cuando empece a investigar sobre este tema se lo comuniqué e intercambiamos un par de emails. La última palabra la tuvieron ellos y fue: Es problema del que administra el servidor al tener display_errors on.

Obviamente yo les comenté que al configurar php.ini y desactivar esa opción lo único que hacen es "esconder" el error, pero no lo solucionan ... No hubo más respuesta.

Zerial dijo...

Corrijo: Es problema del que administra el servidor al tener display_errors on. ---> Es problema ES del que administra el servidor al tener display_errors on.

lost-perdidos dijo...

Si instalar Wordpress es inseguro, con plugins de terceros apaga y vámonos.

Apple Accessories dijo...

único que nos entrega es la ruta donde se encuentra la aplicación dentro del servidor, pero lo que m
http://www.ubeatsbydreheadphone.com/

Albert Raymond dijo...

¿Está usted en cualquier tipo de financiera
problema y
necesita préstamo para pagar su deuda,
ofrecemos todas las clases y tipos de préstamos
con fácil
reembolso a la tasa más baja de 3%
. Ofrecemos préstamos
en todas las monedas y Damos préstamos
desde
cantidad más baja de 5000 a la
cantidad máxima de
50000000 para nuestros novatos. eres
aconsejado
llenar el formulario de solicitud para que podamos
además
proceder.
Candidatos interesados ​​deben rellenar el
forma
a continuación.
INFORMACIÓN PRESTATARIOS
* Nombre ..........
* Sexo ..........
* .......... Edad
* Contacto ..........
* País ..........
* Teléfono ..........
* Cantidad necesaria ..........
* Duración del préstamo: .........
* El propósito del préstamo ..........
* Moneda ..........
* Ocupación ..........
* Género ..........
* Su ingreso mensual ..........
* Modo de amortización: mensual o
año ..........
Póngase en contacto con nosotros a través de
email: royaleagleloanfirms@outlook.com

saludos
Albert Raymond