Solución a la exposición del archivo bootstrap.inc en instalaciones de Drupal sobre Nginx

Hace un tiempo atrás nos planteamos investigar las causas por las cuales se podían acceder directamente a un conjunto de archivos en algunas instalaciones de Drupal, sobre todo aquellas que estaban en la ruta /includes/*. Este comportamiento fue de las primeras cosas que publicamos en el blog, a la hora de hacer un fingerprint a Drupal. Se establecieron dos preguntas de trabajo:

  1. ¿Es normal que puedan ser accesible archivos del sistema directamente en Drupal como los *.inc?
  2. Si es un problema de configuración, ¿Existe alguna solución para evitarlo?

Sobre la primera pregunta llegamos a la conclusión que no era un comportamiento normal que ciertos archivos del sistema (CMS) pudieran ser accesible directamente, sobre todo aquellos que brindan información de interés para los ciberdelincuentes. La investigación indicó que este comportamiento se producía con más frecuencia en instalaciones de Drupal sobre Nginx.

Nuestro brillante ingeniero en Ciencias Informáticas, Nestor Antonio Castro Castillo, graduado hace apenas cuatro meses, realizó un breve estudio para descubrir las principales causas que provocan esta situación y como pueden ser resueltas. Estudio que hoy ponemos a su consideración:

El problema

Drupal es un sistema de gestión de contenidos o CMS (por sus siglas en inglés, Content Management System) libre, modular, multipropósito y muy configurable que permite publicar artículos, imágenes, archivos, además de otros servicios como foros, encuestas, votaciones, blogs y administración de usuarios y permisos.

Cada distribución de Drupal incluye un archivo .htaccess que permite realizar cambios de configuración basada en directorios cuando la aplicación es desplegada en un servidor web Apache. En el mismo se definen ciertas directivas que impiden acceder directamente a archivos que contengan código fuente. No obstante, cuando Drupal se despliega en servidores Nginx, esta y otras directivas de seguridad de Apache no funcionan pues los mecanismos para garantizar la seguridad en Nginx son diferentes y no vienen por defecto con Drupal.

Este problema no se resuelve del todo cuando aplicamos la solución que brinda  el portal de Nginx porque se enfoca, entre otras cosas, en impedir el acceso a los archivos .php pero no con otras extensiones. Cuestión primaria pero no única de la cual preocuparse. En la figura 1 puede apreciarse como aún es posible descargar el archivo bootstrap.inc en una instalación de Drupal a la que se le aplicado las directivas que propone Nginx. En la figura 2 podemos ver parte del contenido de dicho archivo.

1

Figura 1. Acceso directo al archivo bootstrap.inc en una instalación de Drupal 7.43 sobre Nginx.

2

Figura 2. Algunas informaciones interesantes que brinda el archivo bootstrap.inc.

Si intentamos repetir el proceso con cualquier otro fichero, de extensión .inc, .sh, .yml, del cual conozcamos su ubicación en el sistema de archivos de Drupal, se obtiene el mismo resultado.

¿Qué implicaciones puede traer esto? La primera fase de la mayoría de los ataques sobre aplicaciones web, ya sean basadas en CMS o no, es la recopilación de información mediante la técnica de fingerprinting. En el caso específico de los CMS, como Drupal, la  OTG de OWASP especifica la importancia de enmascarar la tecnología base(OTG-INFO-008)

Aunque el proyecto Drupal considera que no hay beneficios detrás de la implementación de técnicas de seguridad mediante oscuridad, permitir el acceso directo al código fuente debe ser considerado una mala práctica de seguridad en cualquier aplicación web.

La Solución

Para solucionar el problema antes planteado hay que tener en cuenta dos aspectos fundamentales en el proceso de configuración de los accesos a los archivos de nuestra instalación de Drupal en Nginx.

Paso 1. Definir correctamente los permisos y la propiedad sobre los archivos

El sistema de archivos del servidor debe ser configurado de manera que el servidor web no tenga permiso para editar o escribir los archivos que ejecuta.

En la Documentación Comunitaria de Drupal se explica la forma de asignar los permisos en el sistema de archivos, incluso se brinda un script en Bash para sysadmins con el objetivo de configurar automáticamente estos permisos de la forma correcta.

Para ejecutar este script, abra un terminal apuntando al directorio donde se encuentra el mismo y escriba (figuras 3 y 4):

3

Figura 3. Ejecución de script para asignar permisos en el sistema de archivo.

4

Figura 4. Resultados de la ejecución exitosa del script.

Nótese que el grupo especificado como propietario de los archivos es www-data, ya que normalmente a este pertenecen los procesos de ejecución de servidores web como Nginx y Apache.

Paso 2. Limitar el acceso directo a los archivos en Nginx

A continuación se debe garantizar que la configuración de la aplicación impida el acceso directo a los archivos con extensiones .inc, .sh, .yml. Para ello vamos a adicionar las siguientes directivas a la solución que brinda Nginx (/etc/nginx/sites-enabled):

5

Figura 5. Adicionando directivas para impedir el acceso a archivos con extensiones .in, .sh y .yml.

Una vez hecho esto, reiniciamos el servidor y tratamos de descargar archivos con alguna de esas extensiones. Si todo salió bien deberíamos ver una página similar a esta:

6.png

Figura 6. Mensaje con código de respuesta HTTP 404 al tratar de descargar el fichero bootstrap.inc luego de adicionar las directivas de seguridad a la aplicación en Nginx.

Conclusiones

Ocultar la base tecnológica de nuestras aplicaciones no garantiza su seguridad, sin embargo contribuye dificultando, o por lo menos retrasando, la labor de potenciales atacantes. Las técnicas mostradas en esta entrada funcionan en la mayoría de los casos y con casi todas las versiones de Drupal pertenecientes a las ramas 6.x, 7.x y 8.x. Es recomendable que cada sysadmin y webmaster elabore las directivas específicas que se adapten a su entorno de ejecución y a sus reglas de negocio particulares. Las pruebas de concepto las realizamos con Nginx 1.10.0 y Drupal 7.43.

Agradecemos nuevamente al ingeniero Nestor Antonio Castro Castillo por este interesantísimo artículo que  escribió para el blog y esperamos que contribuya, sobre todo en lo desarrolladores que utilizan 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