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. 02生成和管理 SBOM
  3. 03指导哈希固定与锁文件管理
  4. 04审计传递依赖和可疑软件包
  5. 05提供 CI/CD 加固检查

适用场景

  1. 01审计 Python 项目的依赖
  2. 02在 CI 中加入漏洞扫描
  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 是社区投票选出的首要关注项,也是整个 OWASP Top 10:2025 中按漏洞利用评分计算风险最高的类别,尽管它仅包含 6 个 CWE,且测试数据有限:

指标值
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。发现严重或危急级别的问题时,让构建失败。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...

生成哈希固定的依赖项文件:

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
  • 按计划重新生成锁文件(至少每周一次)
  • 已配置 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 Level 1: 记录构建流程,提供基本来源证明
  • SLSA Level 2: 构建服务生成带签名的来源证明
  • SLSA Level 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中生成 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 — GitHub Actions + GitLab CI 流水线模板,包含 pip-audit、safety、SBOM 生成和 SLSA 来源证明步骤
  • references/cwe-mapping.md — 用于审计报告的完整 CWE 到检测工具映射

评论

支持 Markdown