🔍 GitHub CVE Scanner - 使用ガイド
GitHub リポジトリをスキャンして、React および Next.js プロジェクトの既知の脆弱性を検出するスクリプトです。
📋 検出される脆弱性
スキャナーは以下の CVE をチェックします:
🚀 使い方
前提条件
- モダンなウェブブラウザ (Chrome、Firefox、Edge など)
- GitHub へのアクセス (任意: プライベートリポジトリ用の Personal Access Token)
手順
1. ブラウザのコンソールを開く
- GitHub の任意のページにアクセスします (例:
https://github.com)
- DevTools を開きます:
- Chrome/Edge:
F12 または Ctrl+Shift+I (Windows) / Cmd+Option+I (Mac)
- Firefox:
F12 または Ctrl+Shift+K (Windows) / Cmd+Option+K (Mac)
- Console タブに移動します
2. スクリプトをコピーして実行する
main.js ファイルを開きます
- ファイルの内容をすべてコピーします
- ブラウザのコンソールに貼り付けます
Enter キーを押して実行します
3. スキャンを設定する
スクリプトは対話形式で一連の質問を行います:
3.1. 認証 (最初の質問)
🔐 Scan private repos too?
OK = Enter PAT
Cancel = Public only
- OK: GitHub の Personal Access Token (PAT) の入力を求められます
- プライベートリポジトリのスキャンが可能になります
- 組織にアクセスするために必要です
- Cancel: パブリックリポジトリのみがスキャンされます
PAT の作成方法:
https://github.com/settings/tokens にアクセスします
- "Generate new token" → "Generate new token (classic)" をクリックします
- わかりやすい名前を付けます
repo スコープ (リポジトリへの完全なアクセス) を選択します
- "Generate token" をクリックします
- トークンをすぐにコピーしてください (再度表示されることはありません)
3.2. スキャンの範囲 (認証済みの場合)
🔍 What do you want to scan?
OK = Organizations
Cancel = User Profile
- OK: 組織をスキャンします
- Cancel: ユーザープロフィールのみをスキャンします
3.3. 組織の選択 (「Organizations」を選択した場合)
🏢 Scan all organizations?
OK = All organizations
Cancel = Single organization
オプション A - すべての組織 (OK):
- 認証済みユーザーのすべての組織を自動的に取得します
- すべての組織のすべてのリポジトリをスキャンします
オプション B - 特定の組織 (Cancel):
- 組織の URL または名前の入力を求められます:
🔗 Enter organization URL or name:
Example: github.com/my-org or my-org
- 受け入れられる形式:
github.com/minha-org
https://github.com/minha-org
minha-org (名前のみ)
3.4. ユーザープロフィール (未認証の場合、または「Profile」を選択した場合)
- GitHub のプロフィールページにいる場合、スクリプトが自動的に検出します
- それ以外の場合は、次のように求められます:
📊 機能
✨ ブランチごとの検証
スクリプトは各リポジトリのすべてのブランチを検証します。デフォルトブランチだけでなく、開発ブランチ、ステージングブランチ、その他のアクティブなブランチの脆弱性も検出されます。
🏢 組織のサポート
- GitHub 組織のリポジトリをスキャンします
- すべての組織または特定の組織をスキャンするオプション
- 組織の URL または名前の入力に対応
🔒 プライベートリポジトリへのアクセス
有効な Personal Access Token を使用すると、スクリプトは以下を実行できます:
- プライベートリポジトリにアクセスする
- プライベート組織をスキャンする
- プライベートリポジトリのブランチを検証する
📈 結果
実行後、スクリプトは以下を表示します:
結果テーブル
コンソールに表示されるテーブル:
- Repo: リポジトリ名
- Branch: 検証されたブランチ名
- Next: Next.js のバージョン (存在する場合)
- React: React のバージョン (存在する場合)
- ReactDOM: react-dom のバージョン (存在する場合)
- RSCWebpack: react-server-dom-webpack のバージョン (存在する場合)
- RSCParcel: react-server-dom-parcel のバージョン (存在する場合)
- RSCTurbopack: react-server-dom-turbopack のバージョン (存在する場合)
- Status: 脆弱性のステータス
✅ Safe: 脆弱性が検出されませんでした
⚠️ CVE-XXXX-XXXXX: 脆弱性が見つかりました
概要
📊 Summary:
Total repos: 15
Branches scanned: 23
With package.json: 20
Skipped: 3 (no package.json)
⚠️ 5 vulnerable repo(s) found!
または
✅ No vulnerabilities found!
⚙️ 技術設定
- API リクエスト間の遅延: 200ms (レート制限を回避するため)
- スキャン間の遅延: 30ms
- ページあたりの結果数: 100 件
- プライベートリポジトリのサポート: あり (PAT 使用時)
- ブランチの検証: 各リポジトリのすべてのブランチ
🔧 トラブルシューティング
エラー: "Token invalid"
- トークンが正しくコピーされたか確認します
- トークンに
repo スコープがあることを確認します
- トークンが期限切れになっていないか確認します
エラー: "No repositories found"
- ユーザー/組織が存在するか確認します
- 組織をスキャンする場合は、アクセス権があるか確認します
- プロフィール/組織にリポジトリがあるか確認します
エラー: "No organizations found"
- 有効なトークンで認証されているか確認します
- 組織に所属していることを確認します
- トークンに組織へアクセスする権限が必要です
スキャンが非常に遅い
- スクリプトはレート制限を回避するために意図的な遅延を入れています
- ブランチが多いリポジトリは時間がかかります
- リポジトリが多い組織は時間がかかります
📝 重要な注意事項
- レート制限: スクリプトは自動遅延により GitHub API の制限を尊重します
- プライバシー: トークンはブラウザ内でのみ使用され、外部サーバーに送信されることはありません
- 精度: スキャナーはリポジトリのルートにある
package.json のみをチェックします
- ブランチ: すべてのブランチが検証されますが、
package.json があるブランチのみが報告されます
- バージョン: スキャナーは CVE の定義に基づいて脆弱なバージョンを検出します
🛡️ セキュリティ
- スクリプトはブラウザ内で完全に実行されます (クライアントサイド)
- データが外部サーバーに送信されることはありません
- Personal Access Token は GitHub API へのリクエストにのみ使用されます
- 必要最小限のスコープのトークンを使用することを推奨します
📄 ライセンス
MIT License
🔄 バージョン
3.0.0
React および Next.js プロジェクトのセキュリティ脆弱性を検出するために開発されました