mcpField
P
performing-sca-dependency-scanning-with-snyk

performing-sca-dependency-scanning-with-snyk

github.com/mukul975安全35.2k207 次安装8 周前更新
代码仓库

关于 performing-sca-dependency-scanning-with-snyk

这是一份使用 Snyk 检查开源依赖项已知漏洞和许可证风险的工作流指南,涵盖命令行与 CI/CD 扫描、策略配置、持续监控和自动修复拉取请求。

主要功能

  1. 01扫描多种语言生态的依赖项
  2. 02使用 Snyk CLI 执行扫描
  3. 03配置漏洞策略
  4. 04监控项目中新披露的漏洞
  5. 05生成自动修复拉取请求
  6. 06检查开源许可证风险

适用场景

  1. 01在 CI/CD 构建期间检查依赖项
  2. 02排查有漏洞的传递依赖
  3. 03监控已部署项目的新漏洞披露
  4. 04审查依赖项的许可证合规性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-sca-dependency-scanning-with-snyk

安装后在 Claude Code 中输入/performing-sca-dependency-scanning-with-snyk确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

使用 Snyk 执行 SCA 依赖扫描

何时使用

  • 当应用程序使用可能包含已知漏洞的开源软件包时
  • 当合规要求跟踪并修复存在漏洞的依赖项时(PCI DSS、SOC 2)
  • 当需要为 CI/CD 中存在漏洞的依赖项自动生成修复 PR 时
  • 当许可证合规要求了解开源许可证义务的可见性时
  • 当需要对已部署依赖项中新披露的漏洞进行持续监控时

不要使用 于扫描专有应用程序代码中的逻辑漏洞(请使用 SAST)、运行时漏洞检测(请使用 DAST),或仅扫描容器操作系统软件包(请使用 Trivy 作为免费替代方案)。

前置条件

  • Snyk 账户(免费套餐每月涵盖最多 200 次开源测试)
  • 已安装 Snyk CLI 或已配置 Snyk GitHub/GitLab 集成
  • 已设置 SNYK_TOKEN 环境变量,包含 API 身份验证令牌
  • 项目具有受支持的软件包清单:package.json、requirements.txt、pom.xml、go.mod、Gemfile 等

工作流

步骤 1:安装并验证 Snyk CLI
# Install Snyk CLI
npm install -g snyk

# Authenticate with Snyk
snyk auth $SNYK_TOKEN

# Test the connection
snyk test --json | jq '.summary'
步骤 2:在 CI/CD 流水线中扫描依赖项
# .github/workflows/dependency-scan.yml
name: Dependency Security Scan

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 8 * * 1'  # Weekly Monday 8am

jobs:
  snyk-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: >
            --severity-threshold=high
            --fail-on=upgradable
            --json-file-output=snyk-results.json

      - name: Upload results to Snyk
        if: always()
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: monitor
          args: --project-name=${{ github.repository }}

      - name: Upload SARIF
        if: always()
        run: |
          npx snyk-to-html -i snyk-results.json -o snyk-report.html
步骤 3:为多种语言配置 Snyk
# Python project scanning
snyk test --file=requirements.txt --severity-threshold=high --json > snyk-python.json

# Java/Maven project
snyk test --file=pom.xml --severity-threshold=medium --json > snyk-java.json

# Go module scanning
snyk test --file=go.mod --severity-threshold=high --json > snyk-go.json

# Docker image dependency scanning
snyk container test myapp:latest --severity-threshold=high --json > snyk-container.json

# Monorepo: scan all projects
snyk test --all-projects --severity-threshold=high --json > snyk-all.json

# IaC scanning (bonus)
snyk iac test terraform/ --severity-threshold=medium --json > snyk-iac.json
步骤 4:为组织配置 Snyk 策略
# .snyk policy file
version: v1.25.0
ignore:
  SNYK-JS-LODASH-1018905:
    - '*':
        reason: "Prototype pollution in lodash. Not exploitable in our usage - no user input reaches affected function."
        expires: 2026-06-01T00:00:00.000Z
        created: 2026-02-23T00:00:00.000Z

  SNYK-PYTHON-REQUESTS-6241864:
    - '*':
        reason: "SSRF in requests redirect handling. Mitigated by allowlist at proxy layer."
        expires: 2026-04-01T00:00:00.000Z

patch: {}

# Severity threshold for CI failures
failOnSeverity: high
步骤 5:启用自动修复拉取请求
# Snyk fix: generate fix PRs for vulnerable dependencies
snyk fix --dry-run  # Preview changes

# Apply fixes locally
snyk fix

# Enable auto-fix PRs via Snyk dashboard:
# 1. Navigate to Organization Settings > Integrations > GitHub
# 2. Enable "Automatic fix pull requests"
# 3. Set "Fix only direct dependencies" or "Fix direct and transitive"
# 4. Configure branch target (main or develop)
步骤 6:许可证合规扫描
# Check license compliance
snyk test --json | jq '.licensesPolicy'

# Snyk license policy configuration via organization settings:
# - Approved licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC
# - Restricted licenses: GPL-3.0, AGPL-3.0 (copyleft risk)
# - Unknown licenses: Flag for manual review

关键概念

术语定义
SCA软件组成分析 — 识别开源依赖项中的漏洞和许可证风险
传递依赖直接依赖的依赖,通常对开发者不可见,但仍是漏洞载体
修复 PR由 Snyk 生成的自动拉取请求,将有漏洞的依赖项升级到已修补版本
Snyk Monitor持续监控模式,监视已部署项目中新披露的漏洞
利用成熟度Snyk 对漏洞是否具有已知利用、概念验证或无已知利用的评估
可达漏洞应用程序代码实际调用的函数中的漏洞,而不仅仅是依赖项中存在
许可证策略组织级规则,定义哪些开源许可证被批准、限制或需要审查

工具与系统

  • Snyk Open Source:用于扫描 10 多种语言生态系统中依赖项的 SCA 工具
  • Snyk CLI:用于本地和 CI/CD 依赖项扫描的命令行界面
  • Snyk Advisor:评估维护、流行度和安全信号的软件包健康评分工具
  • OWASP Dependency-Check:使用 NVD 数据进行漏洞匹配的免费替代 SCA 工具
  • npm audit / pip-audit:特定语言的内置审计工具,用于基本漏洞检查

常见场景

场景:对关键传递依赖漏洞进行分级处置

背景:Snyk 报告某个传递依赖(Java 应用中的 log4j)存在一个严重的 RCE 漏洞。直接依赖尚未发布补丁。

方法:

  1. 使用 snyk test --json 并检查依赖路径,确定哪个直接依赖引入了存在漏洞的传递依赖
  2. 检查利用成熟度:如果为 "Mature" 或 "Proof of Concept",立即优先处理
  3. 如果不存在直接修复,使用 Snyk 的补丁机制,或在构建配置中覆盖传递依赖版本
  4. 对于 Maven:添加 <dependencyManagement> 部分,强制使用安全的传递依赖版本
  5. 对于 npm:在 package.json 中添加 overrides 部分,将版本固定为安全版本
  6. 如果尚无可用补丁,添加带到期日期的 Snyk ignore
  7. 监控直接依赖,等待其发布更新传递依赖的版本

陷阱:因为 "我们并不直接使用那个函数" 而忽略传递依赖漏洞是有风险的。攻击者可以跨依赖边界串联漏洞。版本覆盖可能会破坏直接依赖与传递依赖之间的 API 兼容性。

输出格式

Snyk Dependency Scan Report
=============================
Project: org/web-application
Manifest: package.json
Dependencies: 342 (47 direct, 295 transitive)
Scan Date: 2026-02-23

VULNERABILITY SUMMARY:
  Critical: 1  (1 fixable)
  High: 4      (3 fixable)
  Medium: 12   (8 fixable)
  Low: 23      (15 fixable)

CRITICAL:
  SNYK-JS-EXPRESS-1234567
    Package: [email protected] (direct)
    Severity: Critical (CVSS 9.8)
    Exploit: Mature
    Fix: Upgrade to [email protected]
    Path: [email protected]

HIGH:
  SNYK-JS-JSONWEBTOKEN-5678901
    Package: [email protected] (transitive)
    Severity: High (CVSS 7.6)
    Exploit: Proof of Concept
    Fix: Upgrade [email protected] (which upgrades jsonwebtoken)
    Path: [email protected] > [email protected]

LICENSE ISSUES:
  [RESTRICTED] GPL-3.0: [email protected] (transitive via other-pkg)

QUALITY GATE: FAILED (1 Critical with fix available)

评论

支持 Markdown