AIコーディングエージェント向けのマルチエージェント静的アプリケーションセキュリティレビューハーネス:コードベースをマッピングし、脆弱性クラスを探索し、検出結果を連鎖・検証して、SARIF、JSON、PDFにレポートします。
Claude Code(および将来的には他のAIエージェント)向けのマルチエージェントアプリケーションセキュリティレビューハーネス。1つの ルータースキルが、コードベースをマッピングし、クラスごとのナレッジベースで脆弱性をハンティングし、検出結果をチェーンしてエスカレーションし、実際の 影響を検証し、README / JSON / SARIF / doc / PDF にレポートする、完全なオフェンシブセキュリティパイプラインへディスパッチします。
スコープ: このハーネスは、あなたが所有する、またはテストを許可されているコードに対して静的分析(ソースレビュー、データフロートレース、PoC/ペイロード 構築)を実行します。稼働中のサードパーティシステムを攻撃するものではありません。
security-harness/ # a plugin marketplace └── plugins/security-harness/ ├── skills/ │ ├── sh-router # single entry point - routes any appsec request │ ├── sh-security-review # the pipeline orchestrator (Stages 0-5) │ └── sh-kb-* (15) # per-vuln-class knowledge bases ├── agents/ │ ├── sh-recon # map: Graft graph + stack/SBOM/CVE + attack surface │ ├── sh-hunter # find: source→sink hunting, one per class (parallel) │ ├── sh-chainer # escalate: combine findings into attack chains │ ├── sh-verifier # confirm: offensive + seceng + dev verification + PoC │ └── sh-reporter # deliver: README/JSON/SARIF/HTML/PDF/doc └── references/ # shared contracts (finding schema, SARIF map, state files, rubrics)
### 対象となる脆弱性クラス(`sh-kb-*` スキル)
access-control(IDOR/BOLA/priv-esc) · sqli · xss · ssrf · injection(cmd/code/SSTI/LDAP) · auth(session/JWT)
· deserialization · path-traversal(LFI/RFI) · secrets · csrf · xxe · open-redirect · crypto · race-conditions
· file-upload。依存関係の CVE/SBOM は偵察ステージで処理されます。
## インストール
このハーネスは複数のエージェント向けに提供されています。完全なパッケージングの詳細とリリース
チェックリストは [`docs/DISTRIBUTION.md`](https://github.com/dmdhrumilmistry/security-harness/blob/main/docs/DISTRIBUTION.md) にあります。
**Claude Code** - このリポジトリをプラグインマーケットプレイスとして追加し、プラグインをインストールします:```
/plugin marketplace add dmdhrumilmistry/security-harness
/plugin install security-harness
/plugin marketplace add は次のいずれかを受け付けます: GitHub の owner/repo(上記のとおり)、完全な git URL
(https://github.com/dmdhrumilmistry/security-harness.git)、またはクローンのローカルパス
(例: チェックアウト先のディレクトリから /plugin marketplace add ./security-harness)。
その後 /plugin install security-harness を実行し、プロンプトが表示されたらリロードします。
Gemini CLI - ネイティブ拡張機能で、マニフェストはリポジトリのルートにあります:```bash gemini extensions install https://github.com/dmdhrumilmistry/security-harness
**[opencode](https://opencode.ai)、Codex、または任意の [agentskills.io](https://agentskills.io) エージェント** - スキルをディスカバリディレクトリにコピーします。Codex はさらに `AGENTS.md` を自動的に読み取ります:```bash
git clone https://github.com/dmdhrumilmistry/security-harness
cd security-harness
python3 scripts/sync-agent-skills.py --install agents # ~/.agents/skills
python3 scripts/sync-agent-skills.py --install opencode # ~/.config/opencode/skills
Graft はパイプラインによって自動的にインストールおよびセットアップされます。 Stage 0 は、Graft が存在しない場合に npm install -g @nanonets/graft を実行し(Node/npm が必要)、その後 graft init <target> --no-agents --no-global
を実行して、対象リポジトリ用の Graft MCP サーバーと freshness フックを登録します。グラフ自体(<target>/graft/、
自動的に gitignore される)は偵察中に構築されます。手動で事前インストールするには:npm install -g @nanonets/graft。Graft の
構造ビルドは無料で API キーは不要です。オプションの --deep LLM パスは、設定されている場合に GRAFT_API_KEY /
GRAFT_PROVIDER / GRAFT_MODEL を使用します。
その他のツールも、存在しない場合には Stage 0 によって自動インストールされます(マシン上にある任意のパッケージマネージャー経由 -
winget/choco/scoop、brew、apt、npm/pip/go - 詳細は references/tooling-setup.md を参照)。インストールは
通知され、昇格不要の方法が優先され、実行をブロックすることは決してありません。インストールできないものは単に
利用不可としてマークされ、パイプラインはフォールバックします。Stage 0 は、欠落している機能グループを埋めるものだけをインストールします:
syft · CVE: grype
(推奨)、trivy、または osv-scanner のいずれかwkhtmltopdf または pandoc(PDF/DOCX 用)。それ以外の場合は report.html(またはヘッドレス Chrome の PDF)が得られます。これらはすべてオプションです - 何もインストールされない場合、パイプラインはネイティブ検索 + マニフェスト解析に適切にフォールバックします。
自然言語のリクエストでルーターを呼び出します:``` /sh-router full security review of ./api /sh-router find SQLi and IDOR in src/ /sh-router just map this codebase # recon only
またはパイプラインを直接呼び出します:```
/sh-security-review . classes:sqli,access-control,ssrf depth:deep
/sh-security-review . stage:report # regenerate reports for the latest run
各ステージは、その認知負荷に合わせたモデルで実行されるため、トークンは発見品質が実際に依存する部分に費やされ、機械的な作業では節約されます。これはデフォルトです - 引数は不要です。
| ステージ | デフォルトモデル |
|---|---|
| recon | sonnet |
| hunt(クラスごと) | パターンクラス(secrets、crypto、open-redirect、csrf)には haiku · source→sink トレーシング(sqli、xss、ssrf、injection、path-traversal、xxe、file-upload、auth)には sonnet · 深いロジッククラス(access-control、race-conditions、deserialization)には opus |
| chain | opus |
| verify | opus(精度のゲート - 強力に維持) |
| report | haiku |
models: 引数で上書きできます(これもルーターを通過します):```
/sh-security-review . # default tiered map above
/sh-security-review . models:max # every stage + hunter on opus (max quality, max cost)
/sh-security-review . models:cheap # aggressive downshift (trades some verify precision)
/sh-security-review . models:verify=opus,hunt=sonnet # per-stage overrides
/sh-security-review . models:report=sonnet,hunt.pattern=sonnet # per-hunter-tier override
ステージ: `setup, recon, hunt, chain, verify, report`。モデル: `opus, sonnet, haiku, inherit`。`hunt` では、
モデルを単独で指定すると全ハンターがそのモデルに統一され、`hunt.pattern` / `hunt.trace` / `hunt.logic` は特定の階層を対象とします。
その他のトークン節約機能は組み込みです。recon は実際の攻撃対象領域を持つクラスに対してのみハンターを起動し、ハンターは
ファイル全体を読む代わりに Graft グラフへ問い合わせ、`findings.json`/SARIF はモデルではなく
決定論的スクリプトによって生成されます。
### 出力
すべては `<target>/.security-harness/<run-id>/` 配下に出力されます:
- `recon.md`、`codebase-map.json` - マップ(スタック、SBOM、CVE、攻撃対象領域)。
- `findings.jsonl` → `chains.md` → `verified.jsonl` - 作業状態(`references/state-files.md` を参照)。
- `reports/` - `README.md`、`findings.json`、`results.sarif`、`report.html`、`report.pdf`(+ `report.docx`)。
公開される各所見には、ペイロード、PoC、検証判定、CWE/OWASP ID、CVSS、および
コードレベルの緩和策が含まれます。
## プルリクエストレビュー
`sh-pr-review` はコードベース全体ではなく単一のプルリクエストをレビューし、
結果を **PR 自体に** インラインコメントとして投稿し、ブランチ保護で強制できる
`security/pr-review` コミットステータスを設定します。
**読み取り可能な任意の PR に対して、自分のマシンから実行できます。** プラグインをインストールして、次のように尋ねてください:```
review https://github.com/acme/api/pull/128
review PR 42
security review this PR
PR リンクを貼り付けると、そのリポジトリのその PR をレビューし、まず一時ディレクトリにクローンします。ハンターはパッチだけでなくファイルも読むからです。作業中のリポジトリには何も書き込まれません。
裸の番号を渡すと、現在いるリポジトリ、つまり git remote が指すリポジトリに対して解決されます。何も渡さなければ、現在のブランチのオープン PR を対象にします。
Phase 7 は所見と判定を出力し、何かを投稿する前に確認を求めます - 辞退は正常な結果であり、ペイロードは後で投稿できるようにディスク上に残ります。
分析に時間を費やす前に、対象リポジトリに実際に書き込めるかどうかを確認するので、他人のプロジェクトをレビューする場合は、10 分経ってから気づくのではなく、投稿が 403 になることを最初に知らせてくれます。
これをノイズではなくマージゲートとして使えるようにする 3 つの特性があります:
introduced、aggravated、pre_existing のいずれかの pr_impact を持ちます。最初の 2 つはブロックし、pre_existing は報告されるだけで決してブロックしません。作者が書いていないコードでマージをブロックすることは、必須チェックが削除される原因になるため、ハンターが aggravated と pre_existing の間で迷った場合は pre_existing を選ばなければなりません。sh-kb-* ベースが使うのと同じクラススラッグにマッピングし、その後ティアを選択します。Tier 0(セキュリティに関連する変更なし)は何も起動せず、それでもステータスを設定します。Tier 3 は完全なパイプラインを実行します。| 判定 | ステータス | 条件 |
|---|---|---|
| fail | failure | --fail-on(デフォルト medium)以上で、信頼度 >= 80 の introduced または aggravated の所見 |
| warn | success | introduced または aggravated がなく、pre-existing の所見が報告された |
| pass | success | 所見なし、またはトリアージが Tier 0 で停止した |
| error | error | レビューを完了できなかった |
warn が意図的に success を報告するのは、マージをブロックする警告は余計な手順を伴う失敗であり、チームはチェックを削除することで対応するからです。error は failure と区別して保たれ、壊れた実行が見つけられなかった脆弱性のように見えることは決してありません。
レビューイベントは常に COMMENT であり、REQUEST_CHANGES や APPROVE になることはありません。コミットステータスが強制メカニズムであり、ブランチ保護が読み取るのはこれです。
スコープ: このスキルはプルリクエストとコミットステータスに書き込み、それ以外のどこにも書き込みません。イシューを開かず、外部トラッカーに何も作成しません。