
Una prueba de concepto para la explotación de la vulnerabilidad CVE-2021-46398.
En este repositorio encontrarás una prueba de concepto de la explotación de la falla CVE-2021-46398 a través de un docker compose, así como un análisis de los impactos de esta falla en los sistemas de información.
# Exploit Title: FileBrowser 2.17.2 - Cross Site Request Forgery (CSRF) to Remote Code Execution (RCE)
# Date: 05/02/2022
# Exploit Author: FEBIN MON SAJI
# Vendor Homepage: https://filebrowser.org/
# Software Link: https://github.com/filebrowser/filebrowser
# Version:
FileBrowser <= 2.17.2
# Tested on: Ubuntu 20.04
# CVE : CVE-2021-46398
Según el sitio web de FileBrowser, FileBrowser es un popular software del tipo "crea tu propia nube" que puedes instalar en un servidor, apuntarlo a una ruta y luego acceder a tus archivos a través de una agradable interfaz web desarrollada en el lenguaje Go, con muchas funciones. Es un poco como Google Drive, excepto que cada uno puede poseer y alojar su propia instancia.
Los administradores de FileBrowser pueden crear múltiples usuarios, incluso otro usuario con privilegios de administrador, y dar acceso a cualquier directorio que deseen. La creación de usuarios se maneja mediante un endpoint /api/users. El endpoint acepta entradas en formato JSON para crear usuarios, pero no verifica la cabecera Content-Type HTTP, cuyo valor debería ser application/json, sino que acepta text/plain; y ahí es donde surge la vulnerabilidad. Además, el Origin no se valida y tampoco hay implementados tokens anti-CSRF. Por lo tanto, un atacante puede explotar fácilmente esta vulnerabilidad para crear un usuario backdoor con privilegios de administrador y acceso al directorio de inicio o al directorio al que el atacante quiera acceder, simplemente enviando la URL de una página web maliciosa al administrador legítimo y acceder a todo el sistema de archivos del servidor (más explicación de este proceso en la sección de demostración).
Además, un administrador puede ejecutar comandos en el sistema, por lo que esta vulnerabilidad conduce a un RCE.
Aquí hay un diagrama de secuencia que resume el proceso de ataque (Alice es la hacker y Bob es el administrador y anfitrión de la instancia de FileBrowser):
sequenceDiagram
Alice (hacker) ->> Alice (hacker): *Maliciously creates the malicious HTML page*
Alice (hacker) ->> Bob (admin): Here is a cool page! You must check that bro!
Bob (admin) ->> Alice (hacker): Thanks dude, let's open that!
Bob (admin) ->> Bob (admin): *Opens the page thinking it's something cool*
Bob (admin) -->> FileBrowser: *Sends a request to create a user without knowing it*
FileBrowser -->> FileBrowser: *Creates a new admin privileged user as requested*
Alice (hacker) ->> FileBrowser: Eheheh Bob is so dumb! *Connect to FileBrowser with the backdoor user*
FileBrowser ->> Alice (hacker): *Accept Alice connection with the new user created*
Alice (hacker) ->> FileBrowser: *Request shell access to FileBrowser with the appropriate button then makes sytem calls on Bob's computer*
El objetivo de esta demostración es montar una mini-arquitectura compuesta por dos/tres máquinas:
Es una arquitectura realmente simplificada cuyo objetivo es resaltar el aspecto técnico de la falla.
Para este experimento, solo necesitarás docker.
En esta configuración, la máquina objetivo se basa en una imagen de FileBrowser v2.17.2 (que es vulnerable a esta falla), en la que la única cuenta de FileBrowser es la cuenta de administrador que tiene admin/admin como usuario/contraseña.
Lanzamiento de la máquina objetivo:
mkdir srv && docker compose up
Desde el lado del atacante, la página web maliciosa nos permitirá ejecutar la llamada a la API de FileBrowser y crear nuestro usuario backdoor desde el ordenador del administrador.
En este repositorio se proporciona un ejemplo de dicha página con el nombre index.html. Es una página HTML simple con un formulario oculto que realiza una solicitud POST al endpoint /api/users de FileBrowser con el payload en el atributo name del input. Este payload crea un usuario con privilegios de administrador cuyo login es "oui" y contraseña "oui", y se activa cuando se hace clic en el botón.
Obviamente podríamos haber creado una página más bonita y atractiva que esta y ocultar el envío de la solicitud HTTP en otro elemento del sitio web; es solo para que puedas ver el aspecto técnico de la explotación de la falla. ¡Recuerda que el objetivo de esta página web maliciosa es que el administrador de FileBrowser la abra sin sospechar nada!
Desde el lado del administrador, estamos tranquilamente haciendo tareas de administración en FileBrowser. Ve a 127.0.0.1:8080 e inicia sesión con las credenciales de administrador admin/admin.
Luego, recibimos la página web maliciosa por cualquier medio, como en un correo de phishing, y realizamos la acción que activa el exploit. Abre la página index.html y haz clic en el botón; esto lanza el payload.
Ahora, volviendo al lado del atacante, ahora tenemos un usuario backdoor con privilegios de administrador en el servidor FileBrowser.
Abre tu navegador web favorito en modo de navegación privada para asegurarte de que no estás usando ninguno de los medios de autenticación del administrador. Ve a localhost:8080 e inicia sesión con las credenciales del usuario backdoor oui/oui.
¡Felicidades! Ahora tienes acceso al sistema de archivos del servidor de FileBrowser y, por lo tanto, a todos los archivos de los usuarios del servidor.
Y como FileBrowser es una gran plataforma con muchas funciones, puedes lanzar una instancia de terminal presionando el botón "toggle shell"... intenta escribir whoami y haz lo que quieras como root :)
Para permitir que el usuario backdoor use comandos de shell, deben estar declarados explícitamente en el payload. ¡Consulta
index.htmlpara añadir los tuyos!
La falla ha sido parcheada a partir de la versión v2.18.0. La información al respecto está disponible en su GitHub. El parche no fue muy costoso de implementar, ya que solo requirió cambiar 6 líneas de código en un único archivo de programa. Dado que la vulnerabilidad provenía del fallo de análisis (cf. descripción de la falla), bastó con asegurarse de que cualquier solicitud se analizara en formato application/json antes de procesarse para cualquier otra cosa.
Este trabajo se realizó como parte del curso de Seguridad de los Sistemas de Información impartido en el último año de la especialización en Ingeniería de Sistemas de Información en Grenoble INP - Ensimag, UGA.