mcpField
S
supply-chain-audit

supply-chain-audit

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

supply-chain-audit について

supply-chain-audit は、CI/CD、コンテナ、複数の言語エコシステムを対象にソフトウェアサプライチェーンを監査するコーディングエージェント向けスキルです。重大度、ファイルと行番号、修正テンプレートを含む構造化レポートを作成します。

主な機能

  1. 01対象エコシステムの検出
  2. 02CI/CDとコンテナ設定の監査
  3. 03各言語の依存関係チェック
  4. 04重大度による評価
  5. 05修正案付き構造化レポートの生成

活用シーン

  1. 01GitHub Actionsワークフローのレビュー
  2. 02コンテナイメージとビルド設定の確認
  3. 03複数言語の依存関係の評価
  4. 04マージ前の問題修正の優先順位付け

インストール

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

$npx skills add https://github.com/rysweet/amplihack --skill supply-chain-audit

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

詳細

サプライチェーン監査スキル

CI/CD パイプライン、コンテナイメージ、言語パッケージのエコシステム全体にわたって、ソフトウェアサプライチェーンのセキュリティを監査します。重大度評価、file:line 形式の参照、実行可能な修正テンプレートを含む構造化された検出結果を生成します。

このスキルを使用する場面

  • CI/CD セキュリティレビュー:アクションの参照先が固定されていない、過剰な権限、シークレットの漏えい
  • 依存関係の固定:ロックファイルの欠落、ハッシュ検証の不在、変更可能な semver 参照
  • コンテナサプライチェーン:変更可能なベースイメージのタグ、非 root での実行、SBOM の生成
  • 認証情報の衛生管理:長期間有効なシークレットから OIDC への移行、サブジェクト制約の不足
  • コンプライアンス対応付け:SLSA L1-L4 の準備状況の評価、SBOM 生成のガイダンス
  • マージ前ゲート:サプライチェーンの High/Critical なリグレッションを持ち込む PR をブロック

前提条件 — 外部ツールの確認

監査を実行する前に、不足している外部ツールを確認し、インストールを提案してください。

from supply_chain_audit.external_tools import check_missing_tools, install_tool

missing = check_missing_tools()
if missing:
    # Show the user what's missing and what each tool does
    for tool in missing:
        print(f"Missing: {tool['name']} — {tool['description']}")
        for opt in tool['install_options']:
            print(f"  Install: {opt}")

    # Ask the user if they want to install
    # If yes, install each one:
    for tool in missing:
        success, msg = install_tool(tool['name'])
        print(f"  {tool['name']}: {msg}")

これらのツールがなくても監査は実行できます(オフライン/縮退モード)が、検出結果は少なくなります。

ツールツールがない場合にできないこと
ghGitHub API を使ってアクションのタグを SHA に解決できません
craneコンテナイメージのダイジェストを解決できません
syftSBOM(SPDX/CycloneDX)を生成できません
grype既知の CVE をスキャンできません
cosignイメージの署名またはアテステーションを検証できません

エコシステムの検出

チェックを実行する前に、該当する監査対象の側面を検出します。

シグナルエコシステム対象となる監査項目
.github/workflows/*.ymlGitHub Actions1、2、3、4
Dockerfile / docker-compose.ymlコンテナ5、12
secrets.* を含む .github/workflows/認証情報6
*.csproj / NuGet.Config.NET / NuGet7
requirements*.txt / pyproject.toml / setup.cfgPython8
Cargo.toml / Cargo.lockRust9
package.json / package-lock.json / yarn.lockNode.js10
go.mod / go.sumGo11

該当するすべての監査項目を実行してください。スキップした監査項目は明示的に報告してください。


12 の監査項目

監査項目 1~4:GitHub Actions

reference/actions.md を参照してください。

#名前チェック内容
1アクションの SHA 固定uses: の参照先を @<40-char-SHA> # vX.Y.Z にする必要があります
2ワークフローの権限トップレベルは permissions: read-all、ジョブレベルは最小限の権限付与
3シークレットの露出run: の echo/env にシークレットを含めないこと。ACTIONS_STEP_DEBUG のガード
4キャッシュポイズニングactions/cache のキー衝突、restore-keys の範囲
監査項目 5、12:コンテナ

reference/containers.md を参照してください。

#名前チェック内容
5ベースイメージの固定:latest や semver タグではなく FROM image@sha256:<digest> を使用
12Docker ビルドチェーンマルチステージビルドの最終ステージは scratch/distroless にし、非 root の USER を使用
ディメンション 6:認証情報

reference/credentials.mdを参照してください。

#名前確認項目
6OIDC と長期有効なシークレットid-token: write OIDC を優先し、サブジェクトの制約を確認する
ディメンション 7:.NET / NuGet

reference/dotnet.mdを参照してください。

#名前確認項目
7NuGet のロックと監査RestoreLockedMode、承認済みソース、NuGetAudit の重大度ゲート
ディメンション 8:Python

reference/python.mdを参照してください。

#名前確認項目
8Python の依存関係の完全性--require-hashes、--extra-index-url のリスク、タイポスクワッティングの兆候
ディメンション 9:Rust

reference/rust.mdを参照してください。

#名前確認項目
9Cargo のサプライチェーンCargo.lock がコミットされているか、build.rs のリスク、[patch]/[replace] の適用範囲
ディメンション 10:Node.js

reference/node.mdを参照してください。

#名前確認項目
10Node.js の完全性npm install ではなく npm ci を使用しているか、npx の解決方法、postinstall スクリプト
ディメンション 11:Go

reference/go.mdを参照してください。

#名前確認項目
11Go モジュールの完全性go.sum が存在しコミットされているか、GONOSUMCHECK、replace ディレクティブの適用範囲

5 ステップの監査ワークフロー

ステップ 1:スコープの検出
# Detect active ecosystems
ls .github/workflows/*.yml 2>/dev/null && echo "GHA detected"
ls Dockerfile docker-compose.yml 2>/dev/null && echo "Containers detected"
ls requirements*.txt pyproject.toml 2>/dev/null && echo "Python detected"
ls package.json 2>/dev/null && echo "Node detected"
ls go.mod 2>/dev/null && echo "Go detected"
ls Cargo.toml 2>/dev/null && echo "Rust detected"
ls *.csproj 2>/dev/null && echo ".NET detected"

有効なディメンションを記録します。無効なディメンションはスキップし、レポートに注記します。

ステップ 2:静的解析(エコシステムごと)

各リファレンスファイルにあるディメンション固有のチェックを実行します。次の情報とともに、生の検出結果を収集します。

  • ディメンション番号
  • ファイルパスと行番号(file:line)
  • 現在の値(問題のあるパターン)
  • 期待される値(修正内容)
  • 重大度:Critical/High/Medium/Info
ステップ 3:重大度のスコアリング

検出結果をCVSSに準拠した重大度の範囲に分類します。

重大度CVSS 範囲例
Critical9.0-10.0書き込み権限とシークレットへのアクセス権がある、ピン留めされていないサードパーティ製アクション
High7.0-8.9可変なアクション参照、:latest コンテナ、広い適用範囲を持つ長期有効なシークレット
Medium4.0-6.9permissions: read-all の欠落、Cargo.lock のコミット漏れ
Info0.1-3.9ファーストパーティ組織のアクションでのセマンティックバージョン参照、助言のみのNuGet検出結果
ステップ 4:レポートの生成

構造化されたMarkdownレポートを作成します。

## Supply Chain Audit Report

**Date**: YYYY-MM-DD
**Scope**: [list active ecosystems]
**Skipped**: [list inactive ecosystems with reason]

### Summary

| Severity | Count |
| -------- | ----- |
| Critical | N     |
| High     | N     |
| Medium   | N     |
| Info     | N     |

### Findings

#### CRITICAL-001 · Dim 1 · Unpin third-party action

- **File**: `.github/workflows/release.yml:14`
- **Current**: `uses: actions/checkout@v4`
- **Expected**: `uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2`
- **Fix**: Look up SHA at https://github.com/actions/checkout/releases

### SLSA Readiness

[See reference/sbom-slsa.md for compliance table]

### Recommended Next Steps

1. Fix all Critical findings before next deployment
2. Delegate lock-file issues to `dependency-resolver` skill
3. Install SHA-pinning pre-commit hooks via `pre-commit-manager` skill
ステップ 5:修正の優先順位付け

修正を次の順に並べます。

  1. Criticalを最優先:ピン留め解除、書き込み権限、シークレットへのアクセスが組み合わさったもの
  2. High:本番ワークフローにおけるすべての可変参照
  3. 委任:ロックファイルの生成を dependency-resolver に委任する
  4. 自動化:pre-commit-manager によるコミット前の適用
  5. コンプライアンス:SBOMの生成、SLSA来歴。reference/sbom-slsa.mdを参照してください。

出力形式の規約

  • すべての指摘に file:line を含めます(例:.github/workflows/ci.yml:23)
  • 修正テンプレートは、推測が必要なプレースホルダーを含まず、そのままコピーして貼り付けられる形式にします
  • SHA の照会では、必ず公式リリースページの URL を参照します
  • 各指摘の重大度を明示します。暗黙にしてはいけません
  • レポートの末尾に「次のステップ」セクションを設け、手動で行う修正と自動化可能な修正を区別します

統合ポイント

スキル委任するタイミング
dependency-resolverロックファイルの競合、古くなった間接依存関係、バージョンの非互換性
pre-commit-managerSHA ピン留めフックのインストール、npm ci の適用、go mod verify フックの追加
cybersecurity-analystランタイムの脅威モデリング、ネットワーク露出の分析、インシデント後のレビュー
silent-degradation-auditCI の信頼性の問題、セキュリティのリグレッションを見逃す不安定なテスト

評価シナリオ

評価済みの 3 つのシナリオについては、reference/eval-scenarios.md を参照してください。

  • シナリオ A:GitHub Actions のモノレポ — GHA + Python + Node(仕込まれた指摘 7 件)
  • シナリオ B:コンテナー化された Go サービス — コンテナー + Go + 認証情報(指摘 5 件)
  • シナリオ C:.NET + Rust の混在リポジトリ — .NET + Rust + SLSA 対応状況(指摘 6 件)

参考資料


関連スキル

  • dependency-resolver — ロックファイルの競合解決
  • pre-commit-manager — 品質を自動的に適用するフック
  • cybersecurity-analyst — ランタイムセキュリティと脅威モデリング
  • silent-degradation-audit — CI の信頼性とリグレッション検出
  • pr-review-assistant — サプライチェーンのチェックを含む、開発思想を考慮した PR レビュー

コメント