依赖扫描Skill dependency-scan

依赖扫描技能用于检测和管理项目依赖中的安全漏洞、过时包、许可证合规问题,支持跨多种编程语言的自动化扫描、SBOM生成和供应链安全分析。关键词:依赖扫描、安全漏洞、CVE检测、SBOM、许可证合规、供应链安全、DevOps、自动化审计。

安全审计 0 次安装 0 次浏览 更新于 3/24/2026

名称: 依赖扫描 描述: 扫描项目依赖以查找已知漏洞、过时包和许可证合规问题。支持漏洞扫描(CVE检测)、SBOM生成、许可证合规检查以及跨多个生态系统(npm、pip、cargo、go、maven等)的供应链安全分析。触发关键词:依赖扫描、漏洞、CVE、Snyk、Dependabot、Renovate、npm audit、cargo audit、pip-audit、safety、过时包、SBOM、软件物料清单、许可证合规、供应链、安全公告、传递依赖、锁定文件。 允许工具: Read, Grep, Glob, Bash

依赖扫描

概述

此技能专注于识别项目依赖中的安全漏洞、过时包和许可证合规问题。涵盖多种包生态系统(JavaScript/Node.js、Python、Rust、Go、Ruby、Java、.NET、PHP),并提供修复指导、SBOM生成和供应链安全分析。

何时使用

  • 扫描依赖以查找CVE和安全公告
  • 检查过时或未维护的包
  • 生成软件物料清单(SBOM)
  • 验证许可证合规性和兼容性
  • 分析供应链风险和传递依赖
  • 设置自动化依赖更新(Dependabot、Renovate、Snyk)
  • 调查来自GitHub/GitLab的安全警报
  • 在生产部署前审计依赖

说明

1. 识别依赖

  • 解析清单文件(package.json、requirements.txt等)
  • 构建完整的依赖树
  • 识别直接与传递依赖
  • 检查幻影依赖

2. 漏洞扫描

  • 检查CVE数据库
  • 识别严重级别
  • 查找受影响版本
  • 检查可用补丁

3. 评估风险

  • 评估可利用性
  • 检查活跃利用
  • 评估对应用的影响
  • 优先修复

4. 报告和修复

  • 记录所有发现
  • 提供升级路径
  • 建议替代方案
  • 创建修复计划

5. 语言特定扫描

JavaScript/Node.js:

  • 使用 npm audityarn audit 进行漏洞扫描
  • 检查 package-lock.jsonyarn.lock 以确保可重复性
  • 考虑 npm-check-updates 进行升级分析
  • 使用 license-checker 进行许可证合规

Python:

  • 使用 pip-auditsafety 进行CVE扫描
  • 检查 requirements.txtPipfile.lock
  • 使用 pip-compile 配合 --generate-hashes 以确保完整性
  • 考虑 pipdeptree 进行依赖可视化

Rust:

  • 使用 cargo audit 进行RustSec公告检查
  • 检查 Cargo.lock 以确保可重复构建
  • 使用 cargo outdated 进行版本分析
  • 考虑 cargo deny 进行策略执行

Go:

  • 使用 govulncheck 进行漏洞扫描
  • 检查 go.sum 以确保模块完整性
  • 使用 go list -m all 枚举依赖
  • 考虑 nancy 进行OSS Index检查

6. SBOM生成

生成软件物料清单以实现供应链透明:

CycloneDX:

  • npm install -g @cyclonedx/cyclonedx-npm && cyclonedx-npm --output-file sbom.json
  • cargo install cargo-cyclonedx && cargo cyclonedx
  • pip install cyclonedx-bom && cyclonedx-py

SPDX:

  • 使用 syft(通用工具):syft . -o spdx-json > sbom.spdx.json
  • 使用 trivy 用于容器镜像:trivy image --format spdx-json myimage:tag

目的: 跟踪所有组件以进行漏洞管理、许可证合规和事件响应。

7. 许可证合规检查

确保所有依赖具有兼容的许可证:

自动化工具:

  • Node.js:npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC'
  • Rust:cargo deny check licenses
  • Python:pip-licenses
  • 通用:fossologyscancode-toolkit

许可证类别:

  • 宽松许可证:MIT、Apache-2.0、BSD(通常安全)
  • 弱Copyleft:MPL、LGPL(检查链接要求)
  • 强Copyleft:GPL、AGPL(可能需要源代码披露)
  • 未知/缺失:使用前调查

最佳实践

  1. 定期扫描: 自动化每日/每周扫描
  2. 锁定文件: 使用锁定文件以确保可重复性
  3. 最小依赖: 仅包含所需内容
  4. 验证来源: 使用受信任的注册表
  5. 审查更新: 不要盲目更新
  6. 许可证合规: 确保兼容许可证
  7. SBOM: 维护软件物料清单

示例

示例1:按生态系统的扫描命令

# JavaScript/Node.js
npm audit
npm audit --json > audit-report.json
npm outdated
npx npm-check-updates

# Python
pip-audit
safety check
pip list --outdated
pip-compile --generate-hashes

# Rust
cargo audit
cargo outdated
cargo deny check

# Go
go list -m all | nancy sleuth
govulncheck ./...

# Ruby
bundle audit
bundle outdated

# Java/Maven
mvn dependency-check:check
mvn versions:display-dependency-updates

# .NET
dotnet list package --vulnerable
dotnet list package --outdated

# PHP
composer audit
composer outdated

示例2:GitHub Actions依赖扫描

name: 依赖扫描

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: "0 6 * * *" # 每天凌晨6点

jobs:
  dependency-scan:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: 运行Trivy漏洞扫描器
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: "fs"
          scan-ref: "."
          format: "sarif"
          output: "trivy-results.sarif"
          severity: "CRITICAL,HIGH"

      - name: 上传Trivy扫描结果
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: "trivy-results.sarif"

      - name: 设置Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: 运行npm audit
        run: |
          npm ci
          npm audit --audit-level=high

      - name: 检查过时包
        run: npm outdated || true

      - name: 许可证检查
        run: npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC'

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

      - name: 运行Snyk检查漏洞
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high

示例3:依赖分析报告模板

# 依赖安全报告

**生成日期:** 2024-01-15
**项目:** my-application
**总依赖:** 245(42直接,203传递)

## 摘要

| 严重级别 | 数量 | 状态             |
| -------- | ---- | ---------------- |
| 关键     | 2    | 需要行动         |
| 高       | 5    | 需要行动         |
| 中       | 12   | 建议审查         |
| 低       | 8    | 监控             |

## 关键漏洞

### CVE-2024-1234 - lodash中的远程代码执行

- **包:** lodash@4.17.20
- **严重级别:** 关键(CVSS 9.8)
- **受影响版本:** < 4.17.21
- **修复版本:** 4.17.21
- **路径:** my-app > express > lodash
- **描述:** 原型污染漏洞允许RCE
- **修复:** `npm update lodash`

### CVE-2024-5678 - sequelize中的SQL注入

- **包:** sequelize@6.28.0
- **严重级别:** 关键(CVSS 9.1)
- **受影响版本:** < 6.29.0
- **修复版本:** 6.29.0
- **路径:** my-app > sequelize
- **描述:** 通过原始查询方法导致的SQL注入
- **修复:** `npm update sequelize`

## 许可证合规

| 许可证       | 数量 | 合规性           |
| ------------ | ---- | ---------------- |
| MIT          | 180  | 已批准           |
| Apache-2.0   | 45   | 已批准           |
| BSD-3-Clause | 15   | 已批准           |
| GPL-3.0      | 3    | 需要审查         |
| 未知         | 2    | 需要调查         |

## 建议

1. **立即行动:** 更新lodash和sequelize以修复关键漏洞
2. **短期:** 审查GPL许可依赖的兼容性
3. **长期:** 启用Dependabot/Renovate进行自动化更新

示例4:Renovate配置

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges"],
  "schedule": ["before 6am on Monday"],
  "vulnerabilityAlerts": {
    "enabled": true,
    "labels": ["security"]
  },
  "packageRules": [
    {
      "matchUpdateTypes": ["major"],
      "labels": ["major-update"],
      "automerge": false
    },
    {
      "matchUpdateTypes": ["minor", "patch"],
      "matchCurrentVersion": "!/^0/",
      "automerge": true,
      "automergeType": "pr",
      "platformAutomerge": true
    },
    {
      "matchPackagePatterns": ["^@types/"],
      "automerge": true,
      "groupName": "类型定义"
    },
    {
      "matchDepTypes": ["devDependencies"],
      "automerge": true,
      "groupName": "开发依赖"
    }
  ],
  "prConcurrentLimit": 5,
  "prHourlyLimit": 2
}