skills/yusuketsunoda/ppt-trans/security-threat-review

security-threat-review

SKILL.md

/security-threat-review - Red Team / Blue Team 包括セキュリティ評価

Goal

攻撃者(Red Team)と防御者(Blue Team)の2視点でアプリ全体を評価し、 攻撃シナリオと防御ギャップの対応表を含む統合レポートを出力する。

他のセキュリティスキルとの違い:

  • /security-audit-quick = grepベースの既知パターン検出(機械的・高速)
  • /security-hardening = 単一脅威の深掘り(脅威モデル→緩和→テスト→ゲート)
  • /review --focus security = PR差分のセキュリティレビュー(差分限定)
  • /security-threat-review = アプリ全体の攻撃/防御2視点評価(包括的・定期的)

Input

引数 説明 デフォルト
--scope 評価対象を限定 all(アプリ全体)
--layer Blue Team の評価レイヤーを限定(1-8) 全レイヤー

--scope オプション

対象
all アプリ全体(デフォルト)
api src/app/api/ のみ
actions src/app/actions/ のみ
auth 認証/認可関連のみ
payment Stripe/課金関連のみ
upload ファイルアップロード/処理関連のみ

# アプリ全体の包括評価(デフォルト)
/security-threat-review

# API Routesのみ評価
/security-threat-review --scope api

# 認証関連のみ評価
/security-threat-review --scope auth

# 全体評価だが Blue Team は Layer 1-3(認証/認可/入力)のみ
/security-threat-review --layer 1-3

Workflow

Phase 0: 偵察(攻撃面の把握)

まず以下を実行し、アプリの攻撃面を把握する:

# 1. 全APIエンドポイント
echo "=== API Routes ==="
find src/app/api -name "route.ts" | sort

# 2. 全Server Actions
echo "=== Server Actions ==="
find src/app/actions -name "*.ts" | sort

# 3. セキュリティモジュール一覧
echo "=== Security Modules ==="
find src/lib/security -name "*.ts" | sort

# 4. RLSポリシー数
echo "=== RLS Policies ==="
grep -r "CREATE POLICY" supabase/migrations/ --include="*.sql" | wc -l

# 5. テストモード境界
echo "=== Test Mode ==="
cat src/lib/test-mode.ts | head -50

この情報を両エージェントへのコンテキストとして渡す

Phase 1: Red Team / Blue Team 並列実行

2つのエージェントを並列で起動する:

Red Team(攻撃者視点)

Task(red-team-attacker):
  このPowerPoint翻訳SaaSを攻撃者の視点で評価してください。

  ## アプリ概要
  - Stack: Next.js 16 + React 19 + Supabase + Stripe + Claude API
  - 機能: PPTXアップロード → テキスト抽出 → Claude翻訳 → ダウンロード
  - 認証: Supabase Auth (Cookie-based)
  - 課金: Stripe Subscriptions

  ## 攻撃面
  [Phase 0の結果を貼る]

  ## スコープ
  [--scope オプションの値]

  出力は .claude/docs/reviewer-output-format.md に従ってください。

Blue Team(防御者視点)

Task(blue-team-defender):
  このPowerPoint翻訳SaaSの防御態勢を評価してください。

  ## アプリ概要
  - Stack: Next.js 16 + React 19 + Supabase + Stripe + Claude API
  - 機能: PPTXアップロード → テキスト抽出 → Claude翻訳 → ダウンロード
  - 認証: Supabase Auth (Cookie-based)
  - 課金: Stripe Subscriptions

  ## 防御機構
  [Phase 0の結果を貼る]

  ## スコープ
  [--scope オプションの値]
  [--layer オプションの値]

  出力は .claude/docs/reviewer-output-format.md に従ってください。
  Defense Scorecard(Layer 1-8)を必ず含めてください。

Phase 2: 結果統合

review-aggregator エージェントを使って両チームの出力を統合する。

ただし、通常のPRレビュー統合に加えて、以下を追加出力する:

攻撃-防御 対応表(このスキル固有の出力)

両チームの結果を突き合わせ、攻撃シナリオと防御状況の対応表を生成する:

### Attack-Defense Matrix

| # | 攻撃シナリオ (Red) | 防御状況 (Blue) | Gap | Priority |
|---|-------------------|----------------|-----|----------|
| 1 | IDOR: 他人のfileIdでダウンロード | RLS + user_idチェック済み | None | - |
| 2 | Rate Limit バイパス: ヘッダー偽装 | isProductionRuntime()でガード済み | None | - |
| 3 | テストモード偽装: X-E2E-Test | fail-closed だが一部チェック漏れ | Partial | High |
| 4 | Webhook偽造: 署名なしリクエスト | 署名検証あり | None | - |
| 5 | 翻訳回数制限バイパス | カウンター実装あり、ただしrace condition | Yes | Critical |

Gap の判定基準:

Gap 意味
None Red Teamの攻撃がBlue Teamの防御で完全に阻止される
Partial 防御は存在するが不完全。条件次第で突破可能
Yes 防御が欠如し、攻撃が成立する

Priority の判定基準:

Priority 条件
Critical Gap=Yes かつ 影響がデータ漏えい/権限昇格/課金詐欺
High Gap=Partial かつ 影響が深刻
Medium Gap=Partial かつ 影響が限定的
Low 理論的なリスクのみ
- Gap=None(防御済み)

Phase 3: 最終レポート出力

## Security Threat Review Report

### Executive Summary
[3-5行: 全体評価、最も重要なGap、推奨アクション]

### Defense Scorecard (Blue Team)
[Layer 1-8 のスコアカード表]

### Attack-Defense Matrix
[Phase 2 の対応表]

### Blockers (Critical/High Gaps)
- [confidence=XX] <タイトル> (file:line) — <概要><推奨策>
  - Red Team: [攻撃シナリオ要約]
  - Blue Team: [防御ギャップ要約]

### Important (Medium Gaps)
- [confidence=XX] <タイトル> (file:line) — <概要><推奨策>

### Suggestions (Hardening Opportunities)
- [confidence=XX] <タイトル> (file:line) — <改善案>

### Strengths (Well-Defended Areas)
- [防御が適切に機能している領域]

### Recommended Next Steps
1. [最優先で対応すべき項目]
2. [次に対応すべき項目]
3. [中期的に対応すべき項目]

---
Reviewed by: Red Team (攻撃者視点) + Blue Team (防御者視点)
Aggregated by: review-aggregator

AI Assistant Instructions

MUST

  1. Phase 0 を必ず最初に実行(攻撃面の把握なしにエージェントを起動しない)
  2. Red Team と Blue Team を並列で Task 起動する(直列にしない)
  3. Attack-Defense Matrix を必ず出力する(このスキルの核心)
  4. Defense Scorecard を必ず含める(Blue Teamの出力から抽出)
  5. Gap=Yes の項目は Blocker として扱う
  6. Recommended Next Steps を優先度順で出力する

NEVER

  • 片方のチームだけ実行しない(Red/Blue 両方必須)
  • Attack-Defense Matrix を省略しない
  • 修正を自動実行しない(レポートのみ)
  • 他のセキュリティスキル(/security-audit-quick 等)を内部で呼ばない(スコープが異なる)
  • テストファイルへの修正指示を出さない(検出・報告は行う)
Weekly Installs
22
First Seen
Mar 1, 2026
Installed on
gemini-cli22
opencode22
codebuddy22
github-copilot22
codex22
kimi-cli22