Bitwarden es un gestor de contraseñas de código abierto que ofrece la posibilidad de almacenar, organizar y generar contraseñas complejas de manera segura. El gestor de contraseñas de Bitwarden está disponible tanto como un servicio en la nube como en la opción de alojar el sistema en un servidor web propio.

Bitwarden se basa en una arquitectura cliente-servidor, donde el cliente es una aplicación instalada en diferentes dispositivos (computadoras, smartphones, tablets) y el servidor es responsable del almacenamiento y gestión de las credenciales.

Para interactuar con las contraseñas almacenadas en el servidor, se puede elegir y configurar cualquier servidor web, incluido Nginx.

La relevancia de Nginx y las vulnerabilidades asociadas

Según los datos de W3Tech de junio de 2022, Nginx tenía la mayor cuota de mercado entre los servidores web, con un 33.6% de los sitios que lo utilizaban. Docker también informa que Nginx es la solución más utilizada en entornos de contenedores de software. Esta popularidad hace que las vulnerabilidades relacionadas con Nginx sean aún más relevantes y críticas.

Es importante destacar que los errores de configuración en Nginx pueden afectar directamente la disponibilidad, integridad y confidencialidad de las aplicaciones y los datos.

Vulnerabilidad de traversal de alias y su peligro

El término "traversal de alias" se refiere a una vulnerabilidad de seguridad que puede ocurrir cuando se utiliza la directiva "alias" en las configuraciones de servidores web. El alias es una función también utilizada por Nginx que permite mapear un directorio específico a una URL determinada.

El problema de seguridad surge cuando un usuario malintencionado intenta aprovechar el alias para acceder a archivos o directorios fuera de la ruta especificada. Por ejemplo, si una aplicación web utiliza el alias para mapear el directorio "/var/www" a la URL "/static", un usuario podría intentar acceder a "../secrets" para obtener visibilidad de archivos confidenciales sin tener autorización.

La directiva "location" y su explotación

La directiva "location" se utiliza en Nginx para especificar cómo el servidor debe manejar las solicitudes de una ruta o URL específica. Permite definir reglas para la coincidencia de las solicitudes y configurar las acciones a tomar. Sin embargo, la directiva "location" también puede ser explotada para ataques a servidores Nginx si no se configura correctamente. Existen varias técnicas de ataque que se pueden utilizar, como aprovechar una coincidencia ambigua o incorrecta, inyectar código o realizar redireccionamientos no deseados o inseguros.

Daniel (Celesian) Matsumoto (Hakai Offensive Security) destacan las configuraciones incorrectas de Nginx que pueden introducir vulnerabilidades explotables de forma remota. Las siguientes situaciones, que involucran el uso de las directivas mencionadas anteriormente, exponen riesgos concretos:

  • La directiva "location" no tiene una barra final en la ruta.
  • La directiva "alias" está presente en el contexto de "location" y termina con una barra.

Matsumoto cita el siguiente ejemplo de configuración vulnerable:


location /img {
alias /var/images;
}

Un atacante podría intentar acceder a subdirectorios dentro de la ruta especificada enviando una solicitud para el recurso "/img/..". Al recibir una respuesta de redireccionamiento por parte de Nginx, el atacante puede confirmar la existencia de la vulnerabilidad. De esta manera, cualquier archivo o directorio secundario dentro del directorio principal se vuelve accesible y Nginx los servirá al cliente.

Para un usuario malintencionado, esto significaría acceder a todos los archivos alojados en "/var/". Con simples payloads, como un GET a "/img../log/nginx/access.log", es posible descargar un archivo de registro.

Como se mencionó anteriormente, Bitwarden ofrece la opción de alojarlo en un servidor propio para aquellos que desean mantener su gestor de contraseñas en el lado del servidor.

Al analizar el contenido del repositorio de Bitwarden, Matsumoto descubrió que era posible descargar la base de datos completa de Bitwarden en formato SQLite3 (URL similar a "http:///attachments../vault.db") enviando una solicitud "ad hoc" no autenticada (es decir, sin iniciar sesión).

También es posible recuperar los archivos de registro de Bitwarden, que tienen nombres predecibles y pueden descargarse accediendo a rutas ya conocidas.

Nginx es una herramienta robusta y ampliamente utilizada que alimenta una gran parte de los sitios web que visitamos a diario. Sin embargo, como se ha demostrado en este artículo, las configuraciones incorrectas pueden convertir inadvertidamente al servidor web en el eslabón más débil de la cadena.

El enfoque de seguridad de Nginx coloca la responsabilidad en los desarrolladores para evitar configuraciones peligrosas, destacando la importancia de comprender profundamente las diversas configuraciones y realizar implementaciones prudentes. Es crucial tomar medidas de seguridad adecuadas al utilizar Nginx en combinación con servicios sensibles como Bitwarden, para proteger la integridad y confidencialidad de los datos de los usuarios.