845 字约 3 分钟
开源组件漏洞扫描插件检查依赖组件中的漏洞,提供修复版本和升级建议,并支持按严重等级设置门禁。 默认检查 PR 新增漏洞,设置 scanMode: full 可检查当前 Commit 的全部依赖漏洞。
在 CNB 中使用
在业务仓库根目录的 .cnb.yml 中添加以下配置,在 push 时执行全量扫描并上传报告附件:
main:
push:
- stages:
- name: 开源组件漏洞全量扫描
image: cnbcool/sca-vulnerability:latest
timeout: 15m
settings:
scanMode: full
failOnSeverity: high
publish: true以上配置检查当前 Commit 的全部依赖漏洞,发现 High 或 Critical 漏洞时判定检查失败。 failOnSeverity 为可选参数,未配置时只执行扫描,不执行门禁。
以下为 PR 增量扫描示例,只做门禁,不上传报告附件:
main:
pull_request.target:
- stages:
- name: 开源组件漏洞扫描
image: cnbcool/sca-vulnerability:latest
timeout: 15m
settings:
failOnSeverity: high以上配置会在 PR 新增 High 或 Critical 漏洞时判定检查失败。
pull_request 与 pull_request.target 的区别
详细区别请参考 代码版本选择。
参数说明
插件参数通过 settings 传递:
| 参数 | 说明 | 默认 |
|---|---|---|
scanMode | 扫描模式:diff 为 PR 增量,full 为当前 CNB_COMMIT 全量 | diff |
failOnSeverity | 触发门禁的最低漏洞等级:low、medium、high、critical;未配置时不执行门禁 | 无 |
publish | 是否生成并上传报告附件;上传需要在可信事件中执行 | false |
不需要因漏洞阻断流水线时,省略 failOnSeverity,插件会在日志中列出扫描范围内的全部漏洞。 通用行为见扫描模式和门禁说明。
增量规则
- 已存在的同一组件、同一 CVE 不会重复阻断;
- 新组件或新的 CVE 会形成新增漏洞;
- 删除文件不会产生新增漏洞;
- 内容未变化的文件重命名不会重复产生漏洞。
输出说明
以下为 failOnSeverity: high 的增量扫描日志示例,只输出 High 和 Critical 漏洞:
go.mod: HIGH CVE-2025-10002
component: github.com/example/library@v1.2.0
fixed-version: v1.3.0
message: example vulnerability
action: upgrade github.com/example/library to v1.3.0 or later
SCA gate failed: 1 new risk findings, 1 matched gatepublish: true 时还会生成 XLSX 报告并作为 Commit 附件上传,文件名为 security-vulnerability-<scanMode>-<commit>.xlsx。 报告包含漏洞名称、风险等级、组件名称与版本、影响/修复版本、Path、CVE/CNNVD/CNVD/CWE、CVSS、 解决方案与补丁链接等信息。 文件名规则和下载位置见报告附件。
Commit 元数据
插件把漏洞数量和门禁结果写入本次扫描的目标 Commit 的 Annotation:
sca.vulnerability.full.reporter=https://...
sca.vulnerability.full.gate=gate
sca.vulnerability.full.critical.count=0
sca.vulnerability.full.high.count=3
sca.vulnerability.full.medium.count=8
sca.vulnerability.full.low.count=5字段含义见Commit 元数据。
退出码
| 退出码 | 说明 |
|---|---|
0 | 扫描成功,且未命中门禁或未配置门禁 |
1 | 漏洞命中门禁 |
2 | 配置错误、扫描失败;publish: true 时附件或元数据发布失败 |
下一步
- License 扫描 —— License 风险门禁
- SBOM 生成 —— 组件清单与标准格式