
CVE-2026-35585 の概念実証エクスプロイト。これは File Browser(バージョン 2.0.0 から 2.33.1)における OS コマンドインジェクションの脆弱性です。悪意のあるファイルアップロードを介したリモートコード実行のための、Python およびブラウザベースの PoC スクリプトを含みます。
このリポジトリは、File Browser(バージョン 2.0.0 から 2.33.1)で発見された重大なOSコマンドインジェクション脆弱性 CVE-2026-35585 のProof of Concept(PoC)です。
この脆弱性は「Custom Command Hooks」機能に存在します。シェル実行時に $FILE や $USERNAME などの環境変数が十分にサニタイズされないため、ファイルアップロード権限を持つ認証済みユーザーは、悪意のあるファイル名を使ってホストシステム上で任意のコマンドを実行できる可能性があります。
発見者: saku0512 (https://github.com/Saku0512)
このプロジェクトは、教育目的および倫理的なセキュリティテスト目的でのみ使用してください。
このツールの悪用、損害、または違法行為について、作者は一切の責任を負いません。コンピューターシステムへの不正アクセスは違法です。このソフトウェアを使用することで、明示的な許可を得た環境でのみセキュリティテストを行うことに同意したものとみなされます。
File Browser では、管理者が「After Upload」などのフックを設定できます。これらのフックが実行される際、アプリケーションはシェルコマンドを実行し、$FILE のような変数を実際のファイル名に置換します。ファイル名に ;、&、| などのシェルメタ文字が含まれている場合、適切にエスケープされずにシステムシェルで実行されてしまいます。
このセクションでは、提供されている環境とexploitスクリプトを使って、リモートコード実行(RCE)を再現する手順を説明します。
Docker Compose を使って、脆弱な環境(File Browser v2.33.1)を起動します。初回は data/filebrowser.db が存在しないため、先にFile BrowserのDBを初期化してからhookを設定します。
# 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
既に 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
コンテナ起動後にhook設定を変更する場合は、SQLiteのロックを避けるため docker compose stop してから設定コマンドを実行し、最後に 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 のトークンを取得します。id > /srv/pwned_browser_rce.txt を実行するファイル名 payload を生成します。/srv/pwned_browser_rce.txt を File Browser API 経由で読み、RCE の結果を画面内で確認します。/srv は docker-compose.yml でこのリポジトリにマウントされているため、成功するとホスト側にも pwned_browser_rce.txt が作成されます。
File Browser を バージョン 2.33.8 以降へアップデートしてください。 修正済みバージョンでは、フック機能がデフォルトで無効化され、変数展開がより安全に処理されます。