
Una prova di concetto per lo sfruttamento della vulnerabilità CVE-2021-46398.
In questo repository troverai una prova di concerto dello sfruttamento della vulnerabilità CVE-2021-46398 tramite docker compose, oltre a un'analisi degli impatti di questa vulnerabilità sui sistemi informativi.
# 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
Secondo il sito web di FileBrowser, FileBrowser è un popolare software del tipo crea-il-tuo-cloud che puoi installare su un server, puntarlo a un percorso e quindi accedere ai tuoi file tramite una piacevole interfaccia web sviluppata in linguaggio Go, con molte funzionalità. È un po' come Google Drive, tranne per il fatto che chiunque può possedere e ospitare la propria istanza.
Gli amministratori di FileBrowser possono creare più utenti, anche un altro utente con privilegi di amministratore, e dare accesso a qualsiasi directory desiderino. La creazione degli utenti è gestita da un endpoint . L'endpoint accetta input in formato per creare utenti, ma non verifica l'header il cui valore dovrebbe essere , e accetta invece ; ed è qui che nasce la vulnerabilità. Inoltre, l' non viene validata e non sono implementati token anti-. Pertanto un attaccante può facilmente sfruttare questa vulnerabilità per creare un utente backdoor con privilegi di amministratore e accesso alla home directory o a qualunque directory l'attaccante voglia, semplicemente inviando l'URL di una pagina web dannosa all'amministratore legittimo e accedendo all'intero filesystem del server (ulteriori spiegazioni di questo processo nella sezione dimostrazione).
/api/usersContent-Typeapplication/jsontext/plainOriginInoltre, un amministratore può eseguire comandi sul sistema, quindi questa vulnerabilità porta a una RCE.
Ecco un diagramma di sequenza che riassume il processo di attacco (Alice è l'attaccante e Bob l'amministratore e host dell'istanza 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*L'obiettivo di questa dimostrazione è allestire una mini-architettura composta da due/tre macchine:
È un'architettura davvero semplificata il cui scopo è evidenziare l'aspetto tecnico della vulnerabilità.
Per questo esperimento ti servirà solo docker.
In questa configurazione, la macchina target è basata su un'immagine FileBrowser v2.17.2 (che è vulnerabile a questo difetto), in cui l'unico account FileBrowser è l'account amministratore che ha admin/admin come login/password.
Avvio della macchina target:
mkdir srv && docker compose up
Dal lato dell'attaccante, la pagina web dannosa ci permetterà di eseguire la chiamata API di FileBrowser e creare il nostro utente backdoor dal computer dell'amministratore.
Un esempio di tale pagina è fornito in questo repository con il nome index.html. È una semplice pagina HTML con un modulo nascosto che esegue una richiesta POST all'endpoint /api/users di FileBrowser con il payload nel nome dell'input. Questo payload crea un utente con privilegi di amministratore il cui login è "oui" e la password "oui", e viene attivato quando si fa clic sul pulsante.
Ovviamente avremmo potuto creare una pagina più carina e accattivante di questa e nascondere l'invio della richiesta HTTP in un altro elemento del sito; è solo per farti vedere l'aspetto tecnico dello sfruttamento della vulnerabilità. Ricorda che l'obiettivo di questa pagina web dannosa è essere aperta dall'amministratore di FileBrowser senza che questi sospetti nulla!
Dal lato dell'amministratore, stiamo tranquillamente svolgendo attività di amministrazione su FileBrowser. Vai su 127.0.0.1:8080 e accedi con le credenziali dell'amministratore admin/admin.
Poi, riceviamo la pagina web dannosa con qualsiasi mezzo, come in una email di phishing, ed eseguiamo l'azione che attiva l'exploit. Apri la pagina index.html e fai clic sul pulsante; questo lancia il payload.
Ora, tornando dal lato dell'attaccante, abbiamo un utente backdoor con privilegi di amministratore sul server FileBrowser.
Apri il tuo browser web preferito in modalità di navigazione privata per assicurarti di non utilizzare alcun mezzo di autenticazione dell'amministratore. Vai su localhost:8080 e accedi con le credenziali dell'utente backdoor oui/oui.
Congratulazioni! Ora hai accesso al filesystem del server FileBrowser e quindi a tutti i file degli utenti del server!
E poiché FileBrowser è una grande piattaforma con molte funzionalità, puoi avviare un'istanza del terminale premendo il pulsante "toggle shell"... prova a digitare whoami e fai quello che vuoi come root :)
Per consentire all'utente backdoor di usare i comandi shell, questi devono essere dichiarati esplicitamente nel payload. Vedi
index.htmlper aggiungere i tuoi!
La vulnerabilità è stata corretta a partire dalla versione v2.18.0. Le informazioni al riguardo sono disponibili sul loro GitHub. La patch non è stata molto costosa da implementare poiché ha richiesto solo 6 righe di codice modificate in un singolo file di programma. Poiché la vulnerabilità derivava dal fallimento del parsing (cfr. descrizione della vulnerabilità), è bastato garantire che ogni richiesta fosse analizzata nel formato application/json prima di essere elaborata per qualsiasi altra cosa.
Questo lavoro è stato svolto nell'ambito del corso di Sicurezza dei Sistemi Informativi tenuto nell'ultimo anno della specializzazione in Ingegneria dei Sistemi Informativi presso Grenoble INP - Ensimag, UGA.