关于 performing-sca-dependency-scanning-with-snyk
这是一份使用 Snyk 检查开源依赖项已知漏洞和许可证风险的工作流指南,涵盖命令行与 CI/CD 扫描、策略配置、持续监控和自动修复拉取请求。
主要功能
- 01扫描多种语言生态的依赖项
- 02使用 Snyk CLI 执行扫描
- 03配置漏洞策略
- 04监控项目中新披露的漏洞
- 05生成自动修复拉取请求
- 06检查开源许可证风险
适用场景
- 01在 CI/CD 构建期间检查依赖项
- 02排查有漏洞的传递依赖
- 03监控已部署项目的新漏洞披露
- 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 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.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 漏洞。直接依赖尚未发布补丁。
方法:
- 使用
snyk test --json并检查依赖路径,确定哪个直接依赖引入了存在漏洞的传递依赖 - 检查利用成熟度:如果为 "Mature" 或 "Proof of Concept",立即优先处理
- 如果不存在直接修复,使用 Snyk 的补丁机制,或在构建配置中覆盖传递依赖版本
- 对于 Maven:添加
<dependencyManagement>部分,强制使用安全的传递依赖版本 - 对于 npm:在 package.json 中添加
overrides部分,将版本固定为安全版本 - 如果尚无可用补丁,添加带到期日期的 Snyk ignore
- 监控直接依赖,等待其发布更新传递依赖的版本
陷阱:因为 "我们并不直接使用那个函数" 而忽略传递依赖漏洞是有风险的。攻击者可以跨依赖边界串联漏洞。版本覆盖可能会破坏直接依赖与传递依赖之间的 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