mcpField
S
software-supply-chain-failures

software-supply-chain-failures

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

software-supply-chain-failures について

サードパーティ依存関係、ビルド、デプロイを管理する Python チーム向けのサプライチェーン監査スキルです。脆弱性スキャン、SBOM 生成、依存関係の固定、CI/CD 強化のガイダンスをまとめています。

主な機能

  1. 01既知の脆弱性を依存関係からスキャン
  2. 02SBOM の生成と管理
  3. 03ハッシュ固定とロックファイルのガイド
  4. 04推移的依存関係と不審なパッケージの監査
  5. 05CI/CD 強化チェック

活用シーン

  1. 01Python プロジェクトの依存関係監査
  2. 02CI への脆弱性スキャン追加
  3. 03コンプライアンス向け SBOM 生成
  4. 04パッケージとビルドのワークフロー強化

インストール

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

$npx skills add https://github.com/scholarly360/owasp-top10-web-skills --skill software-supply-chain-failures

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

同梱ファイルreferences/ci-cd-templates.mdreferences/cwe-mapping.md

詳細

ソフトウェアサプライチェーンの障害 — OWASP A03:2025

概要

A03:2025はコミュニティ投票で第1位となった懸念事項であり、OWASP Top 10:2025全体でエクスプロイトスコアが最も高いリスクカテゴリです。該当するCWEは6件のみで、テストデータも限られているにもかかわらず、次のとおりです。

指標値
OWASP順位#3(新設 — A06:2021「脆弱で古いコンポーネント」を拡張)
平均発生率5.72%
平均エクスプロイトスコア8.17(全カテゴリ中最高)
平均影響スコア5.23(全カテゴリ中最高)
主なCWECWE-1104、CWE-1395、CWE-1329

主なCWE:

  • CWE-1104 — 保守されていないサードパーティコンポーネントの使用
  • CWE-1395 — 脆弱なサードパーティコンポーネントへの依存
  • CWE-1329 — 更新できないコンポーネントへの依存

このカテゴリの対象範囲

サプライチェーンの障害は、パッケージの調達からビルド、配布、デプロイまで、ライフサイクル全体に及びます。

  1. 追跡・監視されていない依存関係 — 直接依存と推移的依存
  2. 脆弱またはサポート対象外のコンポーネント — 既知のCVEが未修正
  3. SBOM管理の欠如 — ソフトウェア部品表がない
  4. セキュリティ強化されていないCI/CDパイプライン — 職務分離がなく、ビルドに署名がない
  5. 信頼できないパッケージソース、またはタイポスクワッティングされたパッケージソース
  6. パッチ適用の遅延、またはパッチ適用サイクルの欠如
  7. ビルドシステムの侵害(例:SolarWinds 2019、Log4Shell 2021、npmワーム)

Python固有の攻撃対象領域: Flaskだけでも7つ以上の推移的パッケージ(Jinja2、Werkzeug、 MarkupSafe、itsdangerous、click、blinker、packaging)が導入されます。FastAPIはStarlette、Pydanticと、 それらの依存関係を導入します。推移的パッケージはすべて攻撃対象領域です。


脆弱性の検出 — ツールの手順書

1. pip-audit(推奨 — OSVとPyPI Advisory DBをスキャン)
# Install
pip install pip-audit

# Scan current environment
pip-audit

# Scan a requirements file
pip-audit -r requirements.txt

# Output JSON for CI
pip-audit -r requirements.txt -f json -o audit-results.json

# Fix automatically where possible
pip-audit --fix
2. safety(Safety DB / PyUpをスキャン)
pip install safety

# Basic scan
safety check

# Scan requirements file
safety check -r requirements.txt

# Full JSON output
safety check --json
3. osv-scanner(Google OSV — 最も広範なデータベース)
# Install via Go or download binary
go install github.com/google/osv-scanner/cmd/osv-scanner@latest

# Scan a project directory
osv-scanner --lockfile=requirements.txt .
4. Trivy(コンテナとファイルシステム)
# Scan Python project
trivy fs --scanners vuln .

# Scan a Docker image
trivy image myapp:latest

CI/CDへの統合: すべてのPRでpip-auditとsafetyを実行します。重大度がHIGHまたはCRITICALの検出結果があれば、ビルドを失敗させます。GitHub ActionsとGitLab CIの例については、references/ci-cd-templates.mdを参照してください。


SBOMの生成と管理

SBOM(ソフトウェア部品表)は、コンプライアンス要件(米国大統領令14028)であると同時に、運用上不可欠なものとなっています。

cyclonedx-pyの使用
pip install cyclonedx-bom

# Generate CycloneDX SBOM from current environment
cyclonedx-py environment -o sbom.json --format json

# From a requirements file
cyclonedx-py requirements requirements.txt -o sbom.json --format json

# From poetry
cyclonedx-py poetry -o sbom.json
ライセンスコンプライアンスのためのpip-licensesの使用
pip install pip-licenses
pip-licenses --format=json --output-file=licenses.json

SBOMには以下を含める必要があります:

  • パッケージ名、バージョン、ハッシュ
  • ライセンス識別子
  • 生成時点での既知の脆弱性
  • 推移的依存関係ツリー

ハッシュのピン留めとロックファイル

requirements.txtでのハッシュのピン留め
# BAD — unpinned, vulnerable to substitution attacks
flask==3.0.0

# GOOD — hash-pinned, tamper-evident
flask==3.0.0 \
    --hash=sha256:34a14a9e9ea... \
    --hash=sha256:a9b5cf1a...

ハッシュをピン留めしたrequirementsを生成します:

pip install pip-tools
pip-compile --generate-hashes requirements.in -o requirements.txt
ロックファイル(アプリケーションではこちらを推奨)
ツールロックファイルコマンド
Poetrypoetry.lockpoetry install --no-root
uvuv.lockuv sync
pip-toolsrequirements.txt(コンパイル済み)pip-sync requirements.txt
PipenvPipfile.lockpipenv install --ignore-pipfile

重要な確認事項:

  • ロックファイルがソース管理にコミットされている
  • CIは緩いrequirements.txtではなく、ロックファイルからインストールする
  • ロックファイルが定期的に(最低でも週1回)再生成される
  • Dependabot / Renovate Botが自動PR用に設定されている

推移的依存関係の監査

依存関係ツリー全体を可視化する
pip install pipdeptree
pipdeptree --json-tree > deptree.json

# Find who requires a specific package
pipdeptree --reverse --packages flask
既知の悪意あるパッケージを確認する
# guarddog — detects malicious behavior in packages
pip install guarddog
guarddog pypi scan flask
guarddog pypi verify flask 3.0.0
ソースコード内の危険なインポートパターンを検出する
# Bandit catches these automatically:
import sys
sys.path.insert(0, '/untrusted/path')  # CWE-426: Untrusted Search Path
sys.path.append('/local/unverified')   # Same risk
bandit -r . -t B322,B323,B411  # sys.path manipulation checks

CI/CDパイプラインのセキュリティ強化

セキュリティ強化されていないパイプラインは、サプライチェーン攻撃の主要な侵入経路です(SolarWinds攻撃モデル)。

パイプラインの最低限のセキュリティ要件
制御実装
パイプライン認証での MFA静的シークレットではなく、OIDC トークンを必須にします
ビルドへの署名コンテナイメージに sigstore / cosign を使用します
改ざんを検知できるログ不変の監査ログ(例:Rekor)
依存関係の固定タグではなく SHA でアクションのバージョンを固定します
最小権限各ステージで読み取り/書き込みトークンを分離します
段階的なロールアウト全体に展開する前にカナリアデプロイを実施します
GitHub Actions — コミット SHA で固定
# BAD — tag can be moved by attacker
- uses: actions/checkout@v4

# GOOD — immutable SHA
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
SLSA フレームワークの準拠レベル
  • SLSA レベル 1: ビルドプロセスを文書化し、基本的な来歴情報を記録します
  • SLSA レベル 2: ビルドサービスが署名済みの来歴情報を生成します
  • SLSA レベル 3: 強化されたビルドプラットフォームと、偽造不可能な来歴情報を使用します
# Generate SLSA provenance with slsa-verifier
pip install slsa-verifier
slsa-verifier verify-artifact mypackage.tar.gz \
  --provenance-path provenance.json \
  --source-uri github.com/myorg/myrepo

FastAPI と Flask — 固有のテスト対象

監査対象の依存関係ファイル
フレームワーク直接依存関係監視すべき主な間接依存関係
Flaskflask, flask-login, flask-wtf, sqlalchemyJinja2, Werkzeug, MarkupSafe, itsdangerous
FastAPIfastapi, uvicorn, sqlalchemy, pydanticStarlette, anyio, httpx, h11
Bandit による静的解析
pip install bandit

# Full scan with supply-chain relevant rules
bandit -r . -t B301,B302,B303,B324,B411,B412 --format json -o bandit-report.json

サプライチェーンに関する主な Bandit ルール:

  • B301 — pickle の使用(デシリアライズのリスク)
  • B302 — marshal(同様のリスク)
  • B411 — xmlrpc のインポート
  • B412 — httpoxy の検出
タイポスクワッティングされたパッケージや不審なパッケージを確認する
# Use pip-audit with strict mode
pip-audit --strict -r requirements.txt

# guarddog behavior analysis
guarddog pypi scan <package>

修正優先度マトリクス

検出事項深刻度対応
直接依存関係に CVSS ≥ 9.0 の CVE がある重大直ちにパッチを適用し、デプロイをブロックします
直接依存関係に CVSS 7.0~8.9 の CVE がある高48 時間以内にパッチを適用します
間接依存関係のみに CVE がある中2 週間以内にパッチを適用します
依存関係が固定されていない中次のスプリントでロックファイルに追加します
SBOM がない中CI で生成を自動化します
requirements に --hash がない低ロックファイルツールに移行します
ロックファイルが古い(30 日超)低再生成し、変更内容を確認します
依存関係更新ボットが自動化されていない低Dependabot/Renovate を有効にします

クイックスタートチェックリスト

[ ] pip-audit and safety check passing in CI (no HIGH/CRITICAL)
[ ] All dependencies pinned in lockfile (poetry.lock / uv.lock)
[ ] Lockfile committed to source control and used in CI installs
[ ] SBOM generated (cyclonedx-py) and stored as CI artifact
[ ] Dependabot or Renovate Bot enabled on repository
[ ] GitHub Actions pinned by commit SHA
[ ] No sys.path.insert() / sys.path.append() on unverified paths
[ ] SLSA Level 2+ for published packages
[ ] Weekly lockfile refresh scheduled

参考ファイル

  • references/ci-cd-templates.md — pip-audit、safety、SBOM 生成、SLSA 来歴情報の手順を含む GitHub Actions および GitLab CI のパイプラインテンプレート
  • references/cwe-mapping.md — 監査レポート用の CWE と検出ツールの完全な対応表

コメント