mcpField
R
rust-dependency-audit

rust-dependency-audit

github.com/terrylica安全179 次安装今天更新
代码仓库

关于 rust-dependency-audit

面向 Rust 维护者的依赖审计工作流,涵盖安全性、版本新旧、许可证与供应链状态。它组合四种审计工具,并要求升级建议先核实 crates.io 信息。

主要功能

  1. 01检查依赖版本新旧
  2. 02扫描已知漏洞
  3. 03审查许可证与公告
  4. 04核验供应链审计
  5. 05统计不安全代码用量

适用场景

  1. 01发布前审计依赖
  2. 02检查 cargo update 后的变化
  3. 03在 CI 中设置依赖检查
  4. 04审查许可证与供应链状态

安装

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

$npx skills add https://github.com/terrylica/cc-skills --skill rust-dependency-audit

安装后在 Claude Code 中输入/rust-dependency-audit确认已加载。

包含的文件

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

references/
cargo-audit-guide.md
cargo-deny-guide.md
cargo-geiger-guide.md
cargo-outdated-guide.md
cargo-vet-guide.md
evolution-log.md

详细介绍

Rust 依赖项审计

使用四种互补工具的全面依赖项审计工作流:检查新鲜度、扫描漏洞、检查许可证与公告合规性,以及验证供应链。

自我演进技能:此技能会在使用过程中不断改进。如果说明有误、参数发生变化,或需要采用变通方法,请立即修复此文件,不要拖延。仅针对真实且可复现的问题进行更新。

重要:做出升级决策前先在线核实

建议升级前,务必检查 crates.io 上的最新版本。 静态文档会过时;crates.io API 才是权威信息来源。

  1. 升级 crate 前:检查当前版本及其依赖项

    WebFetch: https://crates.io/api/v1/crates/{crate_name}
    Prompt: "What is the latest version? List recent versions and their dependencies."
    
  2. 忽略漏洞前:确认是否已有修复版本

    WebSearch: "{advisory_id} {crate_name} fix patch"
    
  3. 检查兼容性链:当 crate A 依赖 crate B 时,确认两者的最新版本兼容

    WebFetch: https://crates.io/api/v1/crates/{crate_name}/{version}/dependencies
    Prompt: "What version of {dependency} does this require?"
    
  4. 备用方案:Firecrawl 抓取(如果 WebFetch 失败,例如页面大量依赖 JS、受到速率限制或数据不完整):

    curl -s -X POST https://api.firecrawl.dev/v2/scrape \
      -H "Content-Type: application/json" \
      -d '{"url": "https://crates.io/crates/{crate_name}", "formats": ["markdown"], "waitFor": 0}' \
      | jq -r '.data.markdown'
    

    公共 API——无需密钥,也无需 tailnet。完整 API 参考请参阅 /devops-tools:firecrawl-research-patterns。

适用场景

  • 发布前(完整审计流程)
  • 执行 cargo update 后(确认没有新增漏洞)
  • 设置 CI 流水线(自动依赖项检查)
  • 许可证合规性审查(开源项目)
  • 供应链安全评估

四工具审计工作流

按此顺序运行——每种工具都能发现不同的问题:

# 1. Freshness — what's outdated?
cargo outdated

# 2. Vulnerabilities — any known CVEs?
cargo audit

# 3. Licenses + Advisories — compliance check
cargo deny check

# 4. Supply Chain — who audited these crates?
cargo vet
快速评估
# One-liner: run all four (stop on first failure)
cargo outdated && cargo audit && cargo deny check && cargo vet

新鲜度:查找过时的依赖项

针对不同需求的三种工具:

工具安装用途最适合的场景
cargo-outdatedcargo install cargo-outdated提供完整的过时依赖项报告,包含兼容版本和最新版本全面审计
cargo-upgradescargo install cargo-upgrades轻量级——仅显示不兼容(有破坏性)的更新快速检查
cargo upgrade (cargo-edit)cargo install cargo-edit实际更新 Cargo.toml 中的版本执行更新
# Show all outdated deps (compatible + incompatible)
cargo outdated --root-deps-only

# Show only breaking updates needed
cargo upgrades

# Actually update Cargo.toml (dry run first)
cargo upgrade --dry-run
cargo upgrade --incompatible

# Nightly: native cargo support (experimental)
cargo +nightly update --breaking

建议:快速检查时使用 cargo-upgrades,全面审计时使用 cargo-outdated,准备好实际更新时使用 cargo upgrade (cargo-edit)。

请参阅 cargo-outdated 参考指南。

安全:漏洞扫描

cargo-audit(RUSTSEC 数据库)
# Scan for known vulnerabilities
cargo audit

# Auto-fix where possible (updates Cargo.lock)
cargo audit fix

# Binary scanning (audit compiled binaries)
cargo audit bin ./target/release/my-binary

# Custom config (ignore specific advisories)
# Create audit.toml:
# audit.toml
[advisories]
ignore = [
    "RUSTSEC-YYYY-NNNN",  # Reason for ignoring
]

请参阅 cargo-audit 参考指南。

cargo-deny(公告及更多)

cargo-deny 的公告检查通过额外来源补充 cargo-audit:

# Check advisories only
cargo deny check advisories

# All checks (advisories + licenses + bans + sources)
cargo deny check

完整的 cargo-deny 配置请参阅下方的许可证部分。

许可证:合规性检查

cargo-deny 许可证检查
# deny.toml
[licenses]
allow = [
    "MIT",
    "Apache-2.0",
    "BSD-2-Clause",
    "BSD-3-Clause",
    "ISC",
    "Unicode-3.0",
]
confidence-threshold = 0.8

[[licenses.clarify]]
name = "ring"
expression = "MIT AND ISC AND OpenSSL"
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]
# Check licenses
cargo deny check licenses

# Generate deny.toml template
cargo deny init

请参阅 cargo-deny 参考指南。

供应链:审计验证

cargo-vet(Mozilla)

cargo-vet 会跟踪哪些 crate 已经过审计,以及审计者是谁:

# Check supply chain status
cargo vet

# Audit a specific crate (certify you've reviewed it)
cargo vet certify <crate> <version>

# Import audits from trusted organizations
cargo vet trust --all mozilla
cargo vet trust --all google

# See what needs auditing
cargo vet suggest

关键文件:

  • supply-chain/audits.toml — 你的审计记录
  • supply-chain/imports.lock — 导入的审计记录
  • supply-chain/config.toml — 受信任来源

请参阅 cargo-vet 参考指南。

不安全代码:依赖项安全审计

cargo-geiger

cargo-geiger 会量化整个依赖项树中的不安全代码用量:

# Quick check: which deps forbid unsafe? (fast, no compilation)
cargo geiger --forbid-only

# Full audit: count unsafe blocks per crate
cargo geiger

# Output as ratio (for CI/scripting)
cargo geiger --forbid-only --output-format ratio

# Markdown report
cargo geiger --output-format markdown > unsafe-report.md

关键标志:

  • --forbid-only:快速模式——仅检查 #![forbid(unsafe_code)](不编译)
  • --output-format:ratio、markdown、ascii、json
  • --all-features:启用所有功能进行检查

请参阅 cargo-geiger 参考指南。

综合 CI 工作流(GitHub Actions)

name: Dependency Audit
on:
  pull_request:
  schedule:
    - cron: "0 6 * * 1" # Weekly Monday 6am

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

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: cargo-audit
        run: |
          cargo install cargo-audit
          cargo audit

      - name: cargo-deny
        uses: EmbarkStudios/cargo-deny-action@v2

      - name: cargo-vet
        run: |
          cargo install cargo-vet
          cargo vet

      - name: cargo-geiger
        run: |
          cargo install cargo-geiger
          cargo geiger --forbid-only

      - name: cargo-outdated
        run: |
          cargo install cargo-outdated
          cargo outdated --root-deps-only --exit-code 1

参考文档

故障排除

问题解决方案
cargo audit 数据库过期运行 cargo audit fetch 更新 RUSTSEC DB
cargo deny 许可证误报在 deny.toml 中添加 [[licenses.clarify]] 条目
cargo vet 未审计项过多导入可信组织的审计记录:cargo vet trust --all mozilla
cargo outdated 显示已撤回的版本先运行 cargo update 刷新 Cargo.lock
私有注册表中的 crate在 deny.toml 中为私有注册表配置 [sources]
工作区与单个 crate大多数工具都支持 --workspace 标志

执行后复盘

此技能完成后,关闭前请检查:

  1. 命令是否成功? — 如果没有,请修复导致失败的指令或错误表。
  2. 参数或输出是否发生变化? — 如果底层工具的接口发生变更,请更新用法示例和参数表,使其与之匹配。
  3. 是否需要变通处理? — 如果你不得不临时调整(使用不同的标志、增加额外步骤),请更新此 SKILL.md,确保下次调用时无需重复采用相同的变通方法。

只有在问题真实且可复现时才更新,不要更新推测性问题。

评论

支持 Markdown