
Uma Prova de Conceito para a exploração da falha CVE-2021-46398
Neste repositório, você encontrará uma prova de conceito da exploração da falha CVE-2021-46398 através de um docker compose, bem como uma análise dos impactos dessa falha em sistemas de informação.
# 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
De acordo com o site do FileBrowser, o FileBrowser é um software popular do tipo "crie sua própria nuvem" que você pode instalar em um servidor, direcioná-lo a um caminho e, em seguida, acessar seus arquivos através de uma bela interface web desenvolvida na linguagem Go, com muitos recursos. É um pouco como o Google Drive, exceto que todos podem possuir e hospedar sua própria instância.
Os administradores do FileBrowser podem criar vários usuários, até mesmo outro usuário com privilégios de administrador, e dar acesso a qualquer diretório desejado. A criação de usuários é tratada por um endpoint . O endpoint aceita entrada no formato para criar usuários, mas não verifica o cabeçalho , cujo valor deveria ser , mas aceita ; e é aí que surge a vulnerabilidade. Além disso, a não é validada e também não há tokens anti- implementados. Portanto, um atacante pode explorar facilmente essa vulnerabilidade para criar um usuário backdoor com privilégios de administrador e acesso ao diretório home ou a qualquer diretório que o atacante queira acessar, bastando enviar um URL de página web maliciosa para o administrador legítimo e acessar todo o sistema de arquivos do servidor (mais explicação desse processo na seção de demonstração).
/api/usersContent-Typeapplication/jsontext/plainOriginAlém disso, um administrador pode executar comandos no sistema, então essa vulnerabilidade leva a um RCE.
Aqui está um diagrama de sequência que resume o processo de ataque (Alice sendo o hacker e Bob sendo o administrador e anfitrião da instância do FileBrowser):
sequenceDiagram
Alice (hacker) ->> Alice (hacker): *Cria maliciosamente a página HTML maliciosa*
Alice (hacker) ->> Bob (admin): Aqui está uma página legal! Você precisa ver isso, cara!
Bob (admin) ->> Alice (hacker): Valeu, cara, vamos abrir isso!
Bob (admin) ->> Bob (admin): *Abre a página pensando que é algo legal*
Bob (admin) -->> FileBrowser: *Envia uma requisição para criar um usuário sem saber*
FileBrowser -->> FileBrowser: *Cria um novo usuário com privilégios de administrador conforme solicitado*
Alice (hacker) ->> FileBrowser: Hehehe, Bob é tão burro! *Conecta-se ao FileBrowser com o usuário backdoor*
FileBrowser ->> Alice (hacker): *Aceita a conexão de Alice com o novo usuário criado*
Alice (hacker) ->> FileBrowser: *Solicita acesso ao shell do FileBrowser com o botão apropriado e então faz chamadas de sistema no computador de Bob*O objetivo desta demonstração é montar uma mini-arquitetura composta por duas/três máquinas:
É uma arquitetura realmente simplificada cujo objetivo é destacar o aspecto técnico da falha.
Para este experimento, você precisará apenas do docker.
Nesta configuração, a máquina alvo é baseada em uma imagem do FileBrowser v2.17.2 (que é vulnerável a esta falha), na qual a única conta do FileBrowser é a conta de administrador que tem admin/admin como login/senha.
Iniciando a máquina alvo:
mkdir srv && docker compose up
Do lado do atacante, a página web maliciosa nos permitirá executar a chamada à API do FileBrowser e criar nosso usuário backdoor a partir do computador do administrador.
Um exemplo de tal página é fornecido neste repositório com o nome index.html. É uma simples página HTML com um formulário oculto que realiza uma requisição POST para o endpoint /api/users do FileBrowser com o payload no nome da entrada. Esse payload cria um usuário com privilégios de administrador cujo login é "oui" e senha é "oui", e é acionado quando o botão é clicado.
Obviamente, poderíamos ter criado uma página mais bonita e atraente do que esta e esconder o envio da requisição HTTP em outro elemento do site, isso é apenas para que você possa ver o aspecto técnico da exploração da falha. Lembre-se de que o objetivo desta página web maliciosa é ser aberta pelo administrador do FileBrowser sem que ele suspeite de nada!
Do lado do administrador, estamos tranquilamente fazendo coisas de administrador no FileBrowser. Vá para 127.0.0.1:8080 e faça login com as credenciais de admin admin/admin.
Em seguida, recebemos a página web maliciosa por qualquer meio, como em um e-mail de phishing, e realizamos a ação que aciona o exploit. Abra a página index.html e clique no botão; ele lança o payload.
Agora, de volta ao lado do atacante, agora temos um usuário backdoor com privilégios de administrador no servidor FileBrowser.
Abra seu navegador favorito em modo de navegação privada para garantir que você não está usando nenhum meio de autenticação do administrador. Vá para localhost:8080 e faça login com as credenciais do usuário backdoor oui/oui.
Parabéns! Agora você tem acesso ao sistema de arquivos do servidor FileBrowser e, portanto, a todos os arquivos dos usuários do servidor!
E porque o FileBrowser é uma ótima plataforma com muitos recursos, você pode iniciar uma instância de terminal pressionando o botão "toggle shell"... tente digitar whoami, e faça o que quiser como root :)
Para permitir que o usuário backdoor use comandos de shell, eles devem ser explicitamente declarados no payload. Veja o
index.htmlpara adicionar os seus!
A falha foi corrigida a partir da versão v2.18.0. As informações sobre isso estão disponíveis no GitHub deles. A correção não foi cara de implantar, pois exigiu apenas 6 linhas de código alteradas em um único arquivo de programa. Como a vulnerabilidade veio da falha na análise (veja descrição da falha), foi suficiente garantir que qualquer requisição fosse analisada no formato application/json antes de ser processada para qualquer outra coisa.
Este trabalho foi realizado como parte do curso de Segurança de Sistemas de Informação ministrado no último ano da especialização em Engenharia de Sistemas de Informação na Grenoble INP - Ensimag, UGA.