攻撃面レビュー(dev:attack-surface-review)
ゴール
- 攻撃者が実際に取りうる経路を特定し、コード根拠付きの候補所見と 実証ベースの成立所見を分けて提示する。
- 静的レビューサブエージェントが攻撃候補を洗い出し、動的検証サブエージェントが 有力候補を実際の攻撃ベクターで検証する。
- メインセッションは両レポートを読み、
実証済み未実証だが懸念あり棄却に仕分ける。
実行手順
Step 1: 静的レビューサブエージェントを起動する
最初に Task で agents/investigate-attack-surface-static.md を使って
静的レビューサブエージェントを起動する。
サブエージェントへの依頼には最低限以下を含める。
- 対象アプリまたは対象ディレクトリ
- 既知の技術スタックや主要エントリポイント
- 重点的に見たい観点があればその指定
references/finding-template.mdを必ず読むこと- 修正実装は行わず、攻撃候補の抽出とレポート整形に専念すること
Step 2: 動的検証サブエージェントを起動する
次に Task で agents/investigate-attack-surface-dynamic.md を使って
動的検証サブエージェントを起動する。
このとき静的レビューの結果を入力として渡し、優先度の高い候補から検証させる。 動的検証は、軽量な既存手段で再現可能なものに限る。
Step 3: 両レポートを査読する
返ってきたレポートを読み、以下を確認する。
references/finding-template.mdの形式に沿っているか- 静的レポートにコード根拠・到達経路・前提条件があるか
- 動的レポートに再現手順・payload・観測結果・未成立理由があるか
- 根拠のない一般論やCWE列挙に流れていないか
- 未確認範囲・制約が明記されているか
レポートが粗い場合は、該当サブエージェントに不足点を指定して再調査させる。
Step 4: メインセッションが判定する
静的レビューと動的検証を突き合わせ、各候補を以下のいずれかに分類する。
実証済み: 動的検証で成立し、優先対応が必要未実証だが懸念あり: コード上は有力だが、今回の範囲では成立確認できていない棄却: 静的レビューの仮説だったが、コード読解または検証で成立しないと判断できた
Medium以上が1件以上ある場合、その場で修正実装を開始しない。
Step 5: メインセッションが次アクションを決める
判定結果をもとに、メインセッションで AskUserQuestion を実行するか、 追加調査を回すか、今回は見送るかを決める。
注意: AskUserQuestion はサブエージェントで直接実行しない。
完了条件
- 全所見にコード根拠と攻撃シナリオがある
- 静的レビューサブエージェントが候補所見レポートを返している
- 動的検証サブエージェントが実証結果レポートを返している
- メインセッションが両レポートを査読し、必要なら再調査を指示した
- メインセッションが
実証済み未実証だが懸念あり棄却に分類した - Medium以上あり: メインセッションのAskUserQuestionで dev:spec への誘導を実施済み
- Medium以上なし: 監視/改善バックログ化の提案を記載済み