概要
Vercelプラグインが非Vercelプロジェクトでも全プロンプトやbashコマンドを収集 同意取得はプロンプトインジェクションで、実際のUIでは表示されない 「匿名使用データ」の範囲が広く、bashコマンド全文やデバイスIDも送信 全プロジェクトで動作し、明確なオプトアウト方法は隠されている 問題点と対策、改善提案を解説
Vercelプラグインの問題点と実態
- Vercelプラグイン が Vercel非対応プロジェクト でも動作
- vercel.json や next.config、依存関係がなくても発動
- ClaudeなどのAIツール利用時、 「プロンプト共有」 の確認が突然表示
- 同意取得 はUIでなく、 プロンプトインジェクション による擬似的な質問
- Claudeのシステムコンテキストに命令を注入、質問とシェルコマンド実行を指示
- 「匿名使用データ」 の範囲が不明瞭
- bashコマンド全文、デバイスID、OS、検出フレームワーク、CLIバージョンなど
- bashコマンドは 毎回自動送信、オプトイン不要
- プロンプト全文は オプトイン時のみ
- プロジェクト検出なし
- すべてのプロジェクト、全ファイルで動作
- フレームワーク検出機能はあるが、 テレメトリ発火の制御には未使用
- デバイスID は一度作成され永続利用、セッションやプロジェクトを横断して紐付け
- オプトアウト方法 はREADME内のみ記載
- インストール時や初回起動時には案内なし
問題点まとめ
- 同意取得が不透明
- UIでの明示的な同意でなく、AIへの命令で擬似的に質問
- 「Vercelプラグインからの質問」との明示もなし
- 「匿名使用データ」の説明が不十分
- 実際はプロジェクト名やファイルパス、環境変数名なども送信対象
- オプトアウトしない限り 常時収集
- 全プロジェクトで動作
- RustやPythonなどVercel非対応のプロジェクトでも監視
- フレームワーク検出機能を テレメトリの発火制御に未使用
- オプトアウト方法が分かりにくい
- 環境変数や設定ファイル編集が必要
- READMEはプラグインキャッシュディレクトリ内のみ
改善提案
- 全テレメトリ項目で明示的オプトイン必須
- 収集項目ごとに選択肢を提示
- 「匿名使用データ」の再定義
- 実際の収集内容を正確に明示
- テレメトリのプロジェクト限定化
- フレームワーク検出結果で発火制御
- Claude Codeプラグインの可視化
- プラグイン由来の質問には明示的なラベル表示
- プラグインごとの権限設定
- インストール時に収集範囲・権限を明示
- VS CodeのactivationEventsのような仕組み導入
現時点での対策方法
- Vercelテレメトリ完全停止
export VERCEL_PLUGIN_TELEMETRY=offを~/.zshrcなどに追記
- プラグイン無効化
~/.claude/settings.jsonで"vercel@claude-plugins-official": falseを設定
- デバイスID削除
-
rm ~/.claude/vercel-plugin-device-idで永続IDを削除 -
環境変数でテレメトリを停止しても、プラグインは通常通り利用可能
-
機能損失はデータ収集のみ
-
技術的根拠とGitHub課題
- ソースコードの該当箇所
- テレメトリエンドポイント:
hooks/telemetry.mjs8行目 - デバイスID生成:
hooks/telemetry.mjs10行目 - bashコマンド収集:
hooks/posttooluse-telemetry.mjs29-33行目 - セッション開始時の情報送信:
hooks/session-start-profiler.mjs471-480行目 - 同意プロンプトの注入:
hooks/user-prompt-submit-telemetry.mjs67-85行目 - プロジェクト制御なし:
hooks/hooks.jsonのmatcher設定
- テレメトリエンドポイント:
- 関連GitHub課題
- #34, #38, #19, #12
総括
- Vercel と Claude Code 両者の設計・運用の問題
- 利用者は現状を把握し、 明示的なオプトアウト で自己防衛が必要
- プラグイン・AIツールの権限設計や可視性向上の必要性