Performs SCA dependency scanning with Snyk in CI/CD pipelines to detect OSS vulnerabilities, scan manifests/locks across languages, generate auto-fix PRs, check licenses, and monitor deployed apps via GitHub/GitLab/Jenkins.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 当应用程序使用可能包含已知漏洞的开源包时
Implements SCA with Snyk to scan open-source dependencies for vulnerabilities in CI/CD pipelines. Generates fix PRs, checks licenses, monitors apps, integrates with GitHub, GitLab, Jenkins.
Implements Snyk SCA to scan dependencies for vulnerabilities in CI/CD, generate fix PRs, check licenses, and monitor apps. For GitHub, GitLab, Jenkins pipelines.
Scans open source dependencies for vulnerabilities (CVE), license compliance risks, and supply chain threats using Synopsys Black Duck with CWE/OWASP mapping. Use for SCA in CI/CD pipelines and remediation.
Share bugs, ideas, or general feedback.
不适用于扫描专有应用程序代码中的逻辑漏洞(使用 SAST),运行时漏洞检测(使用 DAST),或单独进行容器操作系统包扫描(使用 Trivy 作为免费替代方案)。
# 安装 Snyk CLI
npm install -g snyk
# 通过 Snyk 认证
snyk auth $SNYK_TOKEN
# 测试连接
snyk test --json | jq '.summary'
# .github/workflows/dependency-scan.yml
name: Dependency Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 8 * * 1' # 每周一上午 8 点
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
# Python 项目扫描
snyk test --file=requirements.txt --severity-threshold=high --json > snyk-python.json
# Java/Maven 项目
snyk test --file=pom.xml --severity-threshold=medium --json > snyk-java.json
# Go 模块扫描
snyk test --file=go.mod --severity-threshold=high --json > snyk-go.json
# Docker 镜像依赖扫描
snyk container test myapp:latest --severity-threshold=high --json > snyk-container.json
# 单体仓库:扫描所有项目
snyk test --all-projects --severity-threshold=high --json > snyk-all.json
# IaC 扫描(附加功能)
snyk iac test terraform/ --severity-threshold=medium --json > snyk-iac.json
# .snyk 策略文件
version: v1.25.0
ignore:
SNYK-JS-LODASH-1018905:
- '*':
reason: "lodash 中的原型污染。在我们的使用场景中无法利用——用户输入不会到达受影响的函数。"
expires: 2026-06-01T00:00:00.000Z
created: 2026-02-23T00:00:00.000Z
SNYK-PYTHON-REQUESTS-6241864:
- '*':
reason: "requests 重定向处理中的 SSRF。已通过代理层的允许列表缓解。"
expires: 2026-04-01T00:00:00.000Z
patch: {}
# CI 失败的严重性阈值
failOnSeverity: high
# Snyk fix:为存在漏洞的依赖项生成修复 PR
snyk fix --dry-run # 预览更改
# 本地应用修复
snyk fix
# 通过 Snyk 控制台启用自动修复 PR:
# 1. 导航到组织设置 > 集成 > GitHub
# 2. 启用"自动修复拉取请求"
# 3. 设置"仅修复直接依赖"或"修复直接和传递依赖"
# 4. 配置目标分支(main 或 develop)
# 检查许可证合规性
snyk test --json | jq '.licensesPolicy'
# 通过组织设置配置 Snyk 许可证策略:
# - 批准的许可证:MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC
# - 限制的许可证:GPL-3.0, AGPL-3.0(著作权风险)
# - 未知许可证:标记为需人工审查
| 术语 | 定义 |
|---|---|
| SCA | 软件成分分析(Software Composition Analysis)——识别开源依赖项中的漏洞和许可证风险 |
| 传递依赖(Transitive Dependency) | 直接依赖项的依赖项,开发者通常看不到,但仍是漏洞攻击面 |
| 修复 PR(Fix PR) | Snyk 自动生成的拉取请求,将存在漏洞的依赖项升级到已修复版本 |
| Snyk Monitor | 持续监控模式,监视已部署项目中的新披露漏洞 |
| 漏洞利用成熟度(Exploit Maturity) | Snyk 对漏洞是否存在已知利用程序、概念验证或无已知利用的评估 |
| 可达漏洞(Reachable Vulnerability) | 应用程序代码实际调用到的函数中存在的漏洞,而非仅存在于依赖项中 |
| 许可证策略(License Policy) | 组织级规则,定义哪些开源许可证被批准、限制或需要审查 |
场景背景:Snyk 报告传递依赖项中存在严重 RCE 漏洞(Java 应用程序中的 log4j)。直接依赖项尚未发布补丁。
方法:
snyk test --json 并检查依赖路径,识别哪个直接依赖项引入了存在漏洞的传递依赖<dependencyManagement> 部分以强制使用传递依赖的安全版本overrides 部分以固定安全版本常见陷阱:以"我们不直接使用该函数"为由忽略传递漏洞是有风险的。攻击者可以跨依赖边界链接漏洞。版本覆盖可能会破坏直接依赖项和传递依赖项之间的 API 兼容性。
Snyk 依赖扫描报告
=============================
项目: org/web-application
清单: package.json
依赖项: 342(47 直接,295 传递)
扫描日期: 2026-02-23
漏洞摘要:
严重: 1 (1 可修复)
高危: 4 (3 可修复)
中危: 12 (8 可修复)
低危: 23 (15 可修复)
严重:
SNYK-JS-EXPRESS-1234567
包: express@4.17.1(直接)
严重性: Critical (CVSS 9.8)
利用: Mature
修复: 升级至 express@4.21.0
路径: express@4.17.1
高危:
SNYK-JS-JSONWEBTOKEN-5678901
包: jsonwebtoken@8.5.1(传递)
严重性: High (CVSS 7.6)
利用: Proof of Concept
修复: 升级 passport@0.7.0(会同步升级 jsonwebtoken)
路径: passport@0.6.0 > jsonwebtoken@8.5.1
许可证问题:
[RESTRICTED] GPL-3.0: some-package@1.2.3(通过 other-pkg 传递)
质量门控: 失败(1 个严重漏洞有可用修复)