検出ルール
すべてのルールを、実行できるデモとともに。
全54件のルール。1つ選ぶと、それをトリガーするファイル、重要な部分、そしてスキャナーが出す結果を確認できます。結果は実際のスキャナーを実行して生成したもので、手書きではありません。
インタラクティブデモにはJavaScriptが必要です。それまでの間、すべてのルールをこちらでご覧いただけます。
エージェントセーフティ
- プロンプトインジェクションペイロード — エージェントに向けられた指示が、どのみち読まれるテキストの中に隠されている状態。
- 説明と権限の不一致 — 自らを読み取り専用と説明していながら、パラメータはそうではないことを示すツール。
- 見えないUnicode文字 — 見た目には何も表示されないが、モデルには届く文字。
- 緩いパラメータスキーマ — URLやファイルパスのような高リスクな入力が、何でも受け入れてしまう状態。
- 隠された指示 — レンダリングされた表示には決して現れない、ファイルの一部に隠されたコマンド。
- スキーマインジェクション — ツール自体ではなく、その1階層下にあるパラメータの説明文に隠された指示。
- Unicodeタグによる密輸 — まったく何も表示されないUnicodeタグ文字で書かれたテキスト。
- ツールシャドーイング — 別のツールがどう振る舞うべきかについて指示を与えるツール。
- 権限昇格の要求 — 機械にではなく、人に対して防御を下げるよう求めます。
- Markdown画像ビーコン — 返信が表示される際、そのアドレス自体がデータを持ち出すMarkdown画像。
- 偽装されたツール結果 — 実行されていないツールの出力のように見せかけたテキスト。
- メモリ汚染 — エージェントが毎回のセッション開始時に読み込むファイルに、指示を書き込みます。
- 遅延トリガー — 最初は正常に振る舞い、後になって別の動作をします。
- エージェントチェーンインジェクション — ユーザーではなく、連鎖する次のエージェントに向けられた指示。
- 混乱した代理人(Confused Deputy) — 特別な権限を持たないツールが、権限を持つ別のツールを使うようエージェントに指示すること。
- システムプロンプトの抽出 — エージェントに、自身の指示やツールを明かすよう求めます。
- 会話履歴アクセス — 説明文で理由を示さないまま、会話履歴を要求します。
- エラーメッセージ内の指示 — エラーの中に隠された指示で、誰も注意深く見ていない瞬間に読み込まれます。
情報流出
- 情報流出パターン — シークレットを扱い、かつデータを外部送信できるツール。
- Webhookシンク — 送られてくるものを収集することだけを目的とした、ハードコードされたアドレス。
- DNS経由の情報流出 — ドメイン検索の名前にエンコードされたデータ。
- 危険な権限の組み合わせ — 非公開データを読み取り、かつ外部のどこかに公開できる1つのツール。
- 「オフライン」ツール内のネットワーク呼び出し — 「ネットワークは一切使用しない」と説明しながら、実際にはネットワークを使用しています。
認証情報
- ハードコードされたシークレット — ファイルに直接書き込まれた認証情報。
- 認証情報ストアへのアクセス — 認証情報を保存することだけを目的としたファイルを読み取ります。
- クラウドメタデータアクセス — クラウドホストに対し、求めれば誰にでも渡される認証情報を要求します。
- シェル履歴へのアクセス — ターミナルに入力されたコマンドの記録を読み取ります。
- MCP設定内の認証情報 — MCP設定ファイルに貼り付けられた、実際に使えるトークン。
- ログに書き込まれたシークレット — あまりにも長く保持されてしまう場所に、出力された認証情報。
- OAuthの設定不備 — 本来の保護機能を無効にしてしまう形で構成されたOAuth。
サプライチェーン
- 信頼できない外部からのインストール — 何かをダウンロードして実行するよう指示する、セットアップ手順。
- バージョン固定されていないMCPサーバー — 何もしなくても、別のソフトウェアに変わり得るサーバー。
- 既知の脆弱性があるMCPサーバー — セキュリティアドバイザリが公開されているバージョンに固定されている状態。
- MCPパッケージのなりすまし — 意図したものと1文字だけ異なる、パッケージ名。
- インストールスクリプトフック — パッケージのインストール直後に、インターネットから実行されるコマンド。
- 依存関係の混同(Dependency Confusion) — あなたの非公開パッケージと同じ名前を持つ、公開パッケージ。
- 脆弱な依存関係 — 公開されているアドバイザリの影響範囲内にある、宣言済みの依存関係。
- 来歴確認の欠如 — 本物のファイルかどうかを確認しないままインストールされるダウンロード。
- 同形異字(ホモグリフ)ツール名 — 画面上では同一に見えるが、実際には異なるテキストである2つのツール名。
- 重複するツール名 — 2つの異なるファイルで宣言された、同じツール名。
- シャドウMCPサーバー — エージェントが利用できるにもかかわらず、プロジェクトの設定には宣言されていないMCPサーバー。
- ツールセットの変異 — 以前見たことのあるツールが、別のファイルから提供され、変更されている状態。
- マニフェストの変更検知 — すでにレビュー済みのツールが、その後ひそかに変更されている状態。
実行
- 過剰な権限 — その役割が必要とする以上のアクセス権を求めるツール。
- 動的実行 — エージェントに渡された何かから、実行時に組み立てられたコード。
- 不透明なペイロード — 誰も読むことができない形でスキルに同梱された何か — ここでは、通常のファイルを装ったプログラム。
- MCP自動承認 — 確認なしにすべてのツールを実行するよう設定されたMCPサーバー。
- 過剰な権限のMCP起動コマンド — サーバーに必要以上の権限を与える起動コマンド。
- MCP STDIOインジェクション面 — MCPのSTDIOトランスポートを使うサーバー。設定値がそのままホストの実行コマンドになります。
- 永続化の仕組み — 再起動しても消えない場所に、自身を書き込みます。
- サンドボックスエスケープ — 実行されているコンテナから抜け出す手段を参照します。
- 文字列の再構成 — 危険な単語を断片から組み立て、検索しても見つからないようにしています。
- コマンドインジェクション面 — 実行時に渡された値をそのまま貼り付けて組み立てられたシェルコマンド。
- 緩すぎるCORS設定 — どのウェブサイトからでも呼び出せてしまうHTTPサーバー。
OWASP MCP Top 10
全10カテゴリを網羅。
すべてのルールはOWASP MCP Top 10(現在ベータ版)の少なくとも1カテゴリに対応しています。複数カテゴリにまたがるルールもあるため、合計はルール数より多くなります。「監査とテレメトリの欠如」は1件のみで、これは妥当です。ログ記録はスキャナーが指摘できる問題であって、解決できる問題ではないためです。
| カテゴリ | 名前 | ルール | 相対カバレッジ |
|---|---|---|---|
| MCP01 | トークンの不適切な管理とシークレットの漏えい | 7 | |
| MCP02 | スコープの肥大化による権限昇格 | 7 | |
| MCP03 | ツールポイズニング | 13 | |
| MCP04 | ソフトウェアサプライチェーン攻撃と依存関係の改ざん | 13 | |
| MCP05 | コマンドインジェクションと実行 | 8 | |
| MCP06 | インテントフローの侵害 | 10 | |
| MCP07 | 認証・認可の不備 | 3 | |
| MCP08 | 監査とテレメトリの欠如 | 1 | |
| MCP09 | シャドウMCPサーバー | 1 | |
| MCP10 | コンテキストインジェクションと過剰共有 | 9 |