¿Cuántos plugins están activos en tu sitio web de WordPress? Si la respuesta es «… muchos», tal vez te interese seguir leyendo. Hoy venimos con una entrada que pretende recordarnos que la seguridad de un sistema informático en su totalidad, es igual que la de su punto más débil. Irónicamente hoy hablaremos sobre el plugin iThemes Security, un plugin concebido para reforzar las medidas de seguridad de un sitio WordPress – de ahora en adelante WP – así como realizar copias de seguridad. Y es que si utilizamos mal éste plugin, y además nuestro servidor web no está configurado para evitar directory listing, nuestra base de datos podría ser robada total o parcialmente.
Backups
Mantener una serie de respaldos de nuestra base de datos es imprescindible de cara a una posible necesidad de recuperación de los datos si éstos se perdieran en una catástrofe de cualquier índole. Una de las funcionalidades que incluye éste plugin es la generación de copias de seguridad con un solo click. Para repasar las opciones de configuración, he instalado la versión 4.4.1 de WP en mi ordenador local y posteriormente instalé y activé el plugin. Los apartados más llamativos que la pestaña «Backups» nos permite configurar, son:

Fig 1. Algunas opciones que podemos configurar
- Backup methods: Nos permite elegir entre:
- Save locally and Email: Genera la copia de seguridad y la enviará el email configurado. También la guardará en la ruta especificada en el campo backup location. Es la opción por defecto en modo local o de desarrollo.
- Email only: La crea, la envía por email, y la borra. Por defecto si se instala en modo producción.
- Save locally only: Queda guardada en el sistema de ficheros.
- Backup Location: Ruta del sistema hacia el directorio donde se almacenará. La opción por defecto es, en ruta relativa,
wp-content/uploads/ithemes-security/backups
. Una ruta pública y accesible, dependiendo de la configuración del servidor.
Me picó la curiosidad. Sabiendo esto y un poco de dorking, se puede hacer una búsqueda en google para ver qué resultados arroja al respecto. El dork es inurl:/ithemes-security/backups/
.

Fig 2. Aproximadamente 100 resultados de búsqueda
Efectivamente, observamos que se producen resultados. He probado a acceder a unas cuántas URLs y en todas se ha producido directoy listing, en algunos casos se mostraban los backups tanto en formato zip como sql y en otros no había nada, ya bien porque o nunca se habían creado manualmente, o porque el plugin estuviera configurado para enviar las copias exclusivamente por email, o porque el fichero .htaccess con la cláusula Deny From All
que crea el plugin durante su instalación, no funciona. No obstante, esto último no cobra sentido porque en caso de cumplirse, se devolvería un HTTP Error 403 Forbidden y no se listaría nada. Lo cual nos lleva a pensar que podría ser la causa de una missconfiguration del servidor web que proporciona el hosting, ya que sucede tanto en servidores como Nginx, Apache y Lighttpd.
Si decidiéramos abrir unos de estos ficheros de respaldo, nos encontraríamos con un script de comandos SQL para restablecer la base de datos. En él, tendríamos la lista de usuarios y contraseña – cifradas, por suerte – y toda la información del blog que el autor no hubiera decidido excluir. No obstante, el hecho de que estén cifradas las contraseñas no debe ser motivo de despreocupación. Los algoritmos de cifrado que usa WP son conocidos y por tanto un bruteforce contra una contraseña cifrada y en local sería mucho más rápido y menos escandaloso que los remote bruteforce que simplemente intentar hacer login con credenciales al azar.

Fig 3. ¡Premio!
Soluciones
A modo de conclusión, existen diferentes acciones que podemos llevar a cabo dependiendo de nuestra situación. La más sencilla es activar la opción «Disable Directory Browsing» en el apartado «System Tweaks» del plugin. No obstante, aquí van otras soluciones alternativas:
Si la página se encuentra en un VPS u ordenador que gestionas
Entonces puedes:
- Revisar la configuración del servidor respecto al directory-listing así como el correcto funcionamiento del .htaccess .
- Cambiar la ruta del campo Backup Location por algo como /home/misuaurio/backups o /var/backups/miweb. Recuerda que al menos el usuario www-data debe tener permisos de escritura allá donde le indiques.
- Si la pereza es una de tus cualidades, crea un fichero index.html o index.php en ithemes-security/backups/. Eso sí, al menos ten las directivas DirectoryIndex (Apache) o index (Ngnix) bien configuradas.
Conclusiones finales
En el caso de que decidieras seguir usando el plugin estando todos estos puntos tenidos en consideración, te puede interesar saber que el formato de los backups es:
[nombredominio]-[segundos desde la EPOCH hasta la creación del fichero]-[random string, entre 4 y 7 caracateres].[sql|zip]
Por ejemplo
two.wordpress-1436976338-cJSKA.zip
Más o menos es el patrón que he destilado. Puede no estar del todo afinado, habría que destripar el código del plugin para cerciorarse. De cualquier manera, que siga un patrón podría servir para que alguien que se aburra mucho construya direcciones URL que, de acertar, podría llevarse un fichero de backup. Aunque tengas bien configurado el servidor para evitar únicamente directory listing, si se hace una petición por un recurso estático que existe, será servido.
Otro aspecto, sobre el que ya hay ríos de tinta es acerca de los riesgos que conlleva contar con una third-party-plugin en un sitio WP. Es necesario y obligatorio estudiar todas las opciones que presentan, y más aún las predeterminadas por defecto, en cada plugin que se instala. Porque iThemes Security tiene más de 700.000 instalaciones activas a día de hoy, pero vemos que una incorrecta configuración – no necesariamente responsabilidad nuestra – puede comprometer la confidencialidad del sitio en su conjunto. Se ha dado el caso de que google ha indexado unos 100 registros, pero gracias a herramientras como WPScan podemos comprobar si una web no indexada implementa éste plugin, ya sea por detección pasiva o manual.
¡Un saludo!