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
- Phase 0 を必ず最初に実行(攻撃面の把握なしにエージェントを起動しない)
- Red Team と Blue Team を並列で Task 起動する(直列にしない)
- Attack-Defense Matrix を必ず出力する(このスキルの核心)
- Defense Scorecard を必ず含める(Blue Teamの出力から抽出)
- Gap=Yes の項目は Blocker として扱う
- Recommended Next Steps を優先度順で出力する
NEVER
- 片方のチームだけ実行しない(Red/Blue 両方必須)
- Attack-Defense Matrix を省略しない
- 修正を自動実行しない(レポートのみ)
- 他のセキュリティスキル(
/security-audit-quick等)を内部で呼ばない(スコープが異なる) - テストファイルへの修正指示を出さない(検出・報告は行う)
Weekly Installs
22
Repository
yusuketsunoda/ppt-transFirst Seen
Mar 1, 2026
Security Audits
Installed on
gemini-cli22
opencode22
codebuddy22
github-copilot22
codex22
kimi-cli22