mcpField
R
regression-sweep

regression-sweep

github.com/transilienceaiセキュリティ598137 回インストール13 週間前に更新
リポジトリ

regression-sweep について

regression-sweepは、検証済みのセキュリティ発見を定期的に再確認するスキルです。PoCを再実行して出力を正規化比較し、CVEスコアも確認します。新たな発見は作成しません。

主な機能

  1. 01検証済み発見の一覧化
  2. 02タイムアウト付きPoC再実行
  3. 03正規化した出力の比較
  4. 04CVE重大度の再確認
  5. 05JSONとMarkdownレポートの作成

活用シーン

  1. 01脆弱性が残っているか週次確認
  2. 02大規模パッチ適用後の発見再確認
  3. 03重大度変化や再発の検出
  4. 04修正済みと判定不能な結果の区別

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/transilienceai/communitytools --skill regression-sweep

インストール後、Claude Code で/regression-sweepを入力して読み込まれたか確認します。

同梱ファイルreference/diff-normalization.md

詳細

回帰スイープ

validated/*.json ツリー全体を走査し、各検出結果の poc.py を再実行して、出力を記録済みの poc_output.txt と比較し、週次のドリフトレポートを作成します。クラウドエージェントのタスク #4 に組み込まれています。

トリガー

毎週の Cron(デフォルトは月曜日の 02:00 UTC)。大規模なパッチのデプロイ後に、アドホックで実行することもできます。

ワークフロー

  1. 検証済みの検出結果をインデックス化します。 validated/*.json を Glob で検索し、各エントリの FINDING_DIR(findings/finding-NNN/ 配下)を解決します。
  2. 各検出結果について:
    • 60 秒のタイムアウトを設定して python3 poc.py を再実行します。
    • stdout/stderr を findings/finding-NNN/evidence/validation/regression-{week}-rerun.txt に記録します。
    • 正規化した行セットの比較(タイムスタンプ、リクエスト ID、一時トークンを除去)を使用して、findings/finding-NNN/evidence/validation/poc-rerun-output.txt(バリデーターが元々再実行した際の出力)との差分を確認します。
    • tools/nvd-lookup.py で検出結果の CVE を再確認します。重大度に変化はありますか?
  3. 各検出結果を次のいずれかに分類します:
    • still_valid — 再実行結果が許容範囲内でベースラインと一致し、CVSS に変化がありません。
    • drift_severity — 再実行結果は一致しますが、CVSS が 1.0 以上変動しています(NVD でスコアが再評価されています)。
    • newly_invalid — 再実行結果が一致せず、エクスプロイトが作動しなくなっています。パッチが適用された可能性があります。
    • newly_revalidated — 後に REJECTED とマークされた検出結果が、再び作動します。回帰です。
    • inconclusive — 再実行でエラーが発生しました(ネットワーク、ターゲットに到達不能)。次回のスイープで再試行します。
  4. レポートを artifacts/regression-{YYYYWww}.json と、人が読みやすい形式の regression-{YYYYWww}.md に書き込みます。状態の遷移(newly_revalidated、drift_severity、newly_invalid)は、アナリストが確認できるよう、明示的な見出しの下にレポートへ記載します。

出力

{OUTPUT_DIR}/
  artifacts/
    regression-{YYYYWww}.json         # machine-readable result
    regression-{YYYYWww}.md           # human summary
  findings/finding-NNN/evidence/validation/
    regression-{YYYYWww}-rerun.txt    # captured re-run output

regression-{week}.json のスキーマ:

{
  "week": "2026W19",
  "swept_at": "2026-05-13T02:00:00Z",
  "counts": {"still_valid": 47, "drift_severity": 2, "newly_invalid": 5, "newly_revalidated": 1, "inconclusive": 3},
  "findings": [
    {"finding_id": "finding-012", "asset": "asset42", "cve": "CVE-2024-12345",
     "verdict": "newly_invalid", "reason": "PoC output diverged: response now 404",
     "baseline_cvss": 9.8, "current_cvss": 9.8}
  ]
}

ルール

  1. 実証に徹し、妨害しません。 PoC の再実行は観測であり、変更ではありません。すべての poc.py は検証時にすでに実証のみの制約(タスク 03 の安全性セクション)を満たしており、スイープでは同じスクリプトを再実行するだけです。スクリプトは仕様上、証明シグナルを読み取って終了します。再実行時に、本来含まれているべきではない変更操作を PoC が試みた場合、スイープはその検出結果を inconclusive として中止し、stderr に WARN を出力します。この PoC には回帰スコアの判定ではなく、再検証が必要です。
  2. PoC ごとの実行時間に上限を設けます。 poc.py ごとにタイムアウトは 60 秒です。タイムアウトは newly_invalid ではなく inconclusive とします。これにより、ネットワークの瞬断による誤検知の「パッチ適用済み」判定を防ぎます。
  3. 正規化した差分を使用します。 比較前に、タイムスタンプ(\d{4}-\d{2}-\d{2}T\d{2}:\d{2})、リクエスト ID([a-f0-9]{32,})、一時的なセッショントークンを除去します。実際のエクスプロイト出力は構造的に安定しています。
  4. 新たな検出結果を追加しません。 回帰スイープでは既存の検出結果のステータスを変更できますが、新しい検出結果は作成できません。新たに確認された脆弱性は、このスキルではなく Validation Run タスクで扱います。
  5. 冪等性を保ちます。 同じ週のスイープを再実行すると、同じ regression-{YYYYWww}.json が上書きされます。検出結果ごとの regression-{week}-rerun.txt にはタイムスタンプを付け、履歴を保持します。
  6. 同時に再実行する数を制限します。 本番アセットへの過剰な負荷を避けるため、スイープごとの PoC 再実行は最大 5 件まで並列に実行します。

参考資料

  • reference/diff-normalization.md — 正規化ルールの詳細と、検出結果ごとの出力安定性に関するヒューリスティクス。

コメント