sast-report について
sast-reportは、完了したSASTスキャンの結果を優先度付きのセキュリティレポートにまとめるスキルです。脆弱または脆弱の可能性がある検出結果を、重大度と機密性への影響で並べます。既存の結果ファイルが必要です。
主な機能
- 01SAST結果ファイルの集約
- 02報告対象の検出結果の選別
- 03重大度と影響による順位付け
- 04最終レポートの作成
活用シーン
- 01複数スキャン結果の統合
- 02確認された脆弱性の優先順位付け
- 03最終評価レポートの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ utkusen/ sast-skills --skill sast-reportインストール後、Claude Code で/sast-reportを入力して読み込まれたか確認します。
詳細
最終セキュリティレポートの作成
完了したすべての SAST 脆弱性スキャン結果を統合し、優先順位を付けた単一のセキュリティレポートを作成します。
前提条件:sast/*-results.md ファイルが少なくとも 1 つ存在する必要があります。存在しない場合は、まず脆弱性検出スキルを実行してください。
含める内容
各結果ファイルから、次の分類に該当する検出結果のみを含めてください。
[VULNERABLE][LIKELY VULNERABLE]
[NOT VULNERABLE] と [NEEDS MANUAL REVIEW] の検出結果はメインレポート本文から除外してください(サマリーでのみ件数を数えます)。
重大度のランク付け
以下の表を基準として、各検出結果に重大度(Critical、High、Medium、Low)を割り当ててください。状況に応じて調整してください(例:金融記録が漏えいする IDOR は Medium ではなく High です)。
| 脆弱性の種類 | デフォルトの重大度 |
|---|---|
| コマンドインジェクション、eval、または安全でないデシリアライゼーションによる RCE | Critical |
| SSTI(サーバーサイドテンプレートインジェクション) | Critical |
| 認証エンドポイントにおける SQLi | Critical |
| JWT アルゴリズムの混同(alg:none、RS256→HS256) | Critical |
| コード実行につながるファイルアップロード(ウェブシェル) | Critical |
| 全データを抽出できる SQLi | High–Critical |
| GraphQL インジェクション(ユーザーが制御する操作ドキュメントによって、認可されていないフィールドの利用またはゲートウェイの悪用が可能になるもの) | High–Critical |
| ファイル読み取りまたは内部 SSRF を伴う XXE | High–Critical |
| 機密性の高いエンドポイントにおける認証の欠如 | High–Critical |
| 内部サービスまたはクラウドメタデータに到達する SSRF | High |
| 機密ファイルまたは設定ファイルを読み取るパストラバーサル | High |
| アップロードしたコンテンツが保存され、他者からアクセス可能なファイルアップロード | High |
| PII、金融データ、または医療データに対する IDOR | High |
| XSS(保存型/永続型) | High |
| クレーム検証の欠如、または回避可能な JWT クレーム検証 | Medium–High |
| 機密性の低いエンドポイントにおける認証の欠如 | Medium |
| 機密性の低いデータに対する IDOR | Medium |
| XSS(反射型または DOM 型) | Medium |
| ビジネスロジックの欠陥(価格の改ざん、ワークフローの回避) | Medium |
| 機密性の低いデータの情報漏えい | Low |
機密性を同順位の判定基準として使用:同じデフォルト重大度の検出結果が複数ある場合は、機密性への影響が大きいものを上位にしてください。つまり、機密性の高いユーザーデータ、認証情報、またはシステム内部情報を漏えいさせる可能性が高いものを優先します。
実行
すべての手順をセッション内で実行してください(サブエージェントは不要です)。
ステップ 1:結果ファイルを確認する
sast/ に以下のファイルが存在するか確認してください。
idor-results.mdsqli-results.mdssrf-results.mdxss-results.mdrce-results.mdxxe-results.mdfileupload-results.mdpathtraversal-results.mdssti-results.mdjwt-results.mdmissingauth-results.mdbusinesslogic-results.mdgraphql-results.md
また、sast/architecture.md が存在する場合は読み込んでください(重大度の根拠を記述する際に、プロジェクト名とコンテキストを使用します)。
ステップ 2:検出結果を読み取って抽出する
存在する結果ファイルをそれぞれ読み込んでください。[VULNERABLE] または [LIKELY VULNERABLE] に分類された検出結果ごとに、以下を抽出してください。
- 検出結果のタイトル
- 脆弱性の種類(元のファイルから特定)
- 影響を受けるファイル/エンドポイント
- 問題の説明
- 影響の説明
- 証拠/コードパス
- 修正方法
- 動的テスト手順(記載がある場合)
ステップ 3:評価して並べ替える
上記の表を使用して、各検出結果に重大度(Critical/High/Medium/Low)を割り当ててください。すべての検出結果を次の順序で並べ替えてください。
- Critical、High、Medium、Low の順
- 各重大度内では、機密性への影響が高い順
ステップ 4:sast/final-report.md を作成する
以下の出力形式を厳密に使用してください。
# Security Assessment Final Report
**Project**: [name from architecture.md, or infer from codebase]
**Generated**: [current date]
**Scans completed**: [comma-separated list of scan types that had result files]
---
## Executive Summary
| Severity | Count |
|----------|-------|
| Critical | N |
| High | N |
| Medium | N |
| Low | N |
| **Total confirmed findings** | **N** |
Scans with no confirmed vulnerabilities: [list]
Findings requiring manual review: N (see individual result files for details)
---
## Vulnerability Index
| # | Title | Type | Severity | Endpoint / File |
|---|-------|------|----------|----------------|
| 1 | ... | RCE | Critical | `POST /api/exec` |
| 2 | ... | SQLi | High | `GET /api/users` |
---
## Findings
### Critical
#### [Finding Title] — [Vuln Type]
- **Source scan**: `sast/[type]-results.md`
- **Classification**: Vulnerable *(or "Likely Vulnerable")*
- **Endpoint / File**: ...
- **Severity rationale**: [1–2 sentences explaining why this is Critical, with focus on confidentiality and integrity impact]
- **Issue**: ...
- **Impact**: ...
- **Proof**:
[元の検出結果にあるコードパスまたは証拠]
- **Remediation**: ...
- **Dynamic Test**:
[元の検出結果にある curl コマンドまたは手順ごとのテスト手順]
---
### High
[Same structure as Critical section]
---
### Medium
[Same structure]
---
### Low
[Same structure]
---
## Appendix: Scan Coverage
| Scan | Result File | Status |
|------|-------------|--------|
| IDOR | `sast/idor-results.md` | Completed / Not run |
| SQLi | `sast/sqli-results.md` | Completed / Not run |
| SSRF | `sast/ssrf-results.md` | Completed / Not run |
| XSS | `sast/xss-results.md` | Completed / Not run |
| RCE | `sast/rce-results.md` | Completed / Not run |
| XXE | `sast/xxe-results.md` | Completed / Not run |
| File Upload | `sast/fileupload-results.md` | Completed / Not run |
| Path Traversal | `sast/pathtraversal-results.md` | Completed / Not run |
| SSTI | `sast/ssti-results.md` | Completed / Not run |
| JWT | `sast/jwt-results.md` | Completed / Not run |
| Missing Auth | `sast/missingauth-results.md` | Completed / Not run |
| Business Logic | `sast/businesslogic-results.md` | Completed / Not run |
| GraphQL injection | `sast/graphql-results.md` | Completed / Not run |
重要な注意事項
- Findings セクションには、
[VULNERABLE]と[LIKELY VULNERABLE]の検出結果のみを含めてください。 [LIKELY VULNERABLE]の検出結果は、タイトルの後に ⚠ 脆弱性の可能性あり を付けて明確に示してください。- 元の検出結果に含まれるすべての詳細を保持してください。Proof、Remediation、Dynamic Test の各セクションを要約したり、途中で省略したりしないでください。
sast/architecture.mdが存在する場合は、アプリケーション固有のコンテキストを加えて重大度の根拠を補足してください(例:「このエンドポイントは決済データを扱うため、機密性への影響は Critical です」)。- 該当する重大度の検出結果がない場合は、その重大度セクション(例:
### Lowの見出し)を省略してください。