如何使用 cargo audit 检查 Rust 项目依赖漏洞安全

文章导读
cargo audit 是 Rust 生态中检查依赖安全的基准工具,用于扫描项目依赖树中是否存在已知安全漏洞,适合在本地开发环境和 CI/CD 流水线中定期运行。
📋 目录
  1. 安装与基础扫描
  2. 漏洞报告解读
  3. CI/CD 集成实战
  4. 常见坑与排查
  5. 参考来源
A A

cargo audit 是 Rust 生态中检查依赖安全的基准工具,用于扫描项目依赖树中是否存在已知安全漏洞,适合在本地开发环境和 CI/CD 流水线中定期运行。

先说结论:它是 Rust 生态中检查依赖安全的基准工具,建议纳入每次发布前的必检环节。

  • 先判断:确认项目是否引入了第三方 crate,纯标准库项目无需检查。
  • 优先做:在本地安装工具并运行扫描,修复高危漏洞后再提交代码。
  • 再验证:将检查命令集成到 CI 流程,确保合并请求不会引入新漏洞。

安装与基础扫描

确保本地环境已安装 Rust 工具链(包含 cargo 命令)。通过 cargo install 安装审计工具:

cargo install cargo-audit

安装完成后,在项目根目录(包含 Cargo.toml 的目录)直接运行扫描:

cargo audit

工具会自动同步最新的 RustSec 漏洞咨询数据库,并比对项目 Cargo.lock 文件中锁定的版本。这意味着它检查的是你实际编译使用的版本,而不是 Cargo.toml 中声明的版本范围,结果更准确。

漏洞报告解读

如果依赖树安全,命令将退出码 0 并显示 Success。若发现漏洞,输出会包含关键信息,示例如下:

Fetching advisory database from: https://github.com/RustSec/advisory-db.git
Loaded 123 security advisories
Vulnerabilities found!

ID: RUSTSEC-2023-0071
Package: serde_yaml
Version: 0.8.26
Title: Panic on malformed input
Solution: Upgrade to >=0.9.0

关键字段说明:

  • ID:漏洞唯一标识(如 RUSTSEC-YYYY-XXXX),可用于查询详情或配置忽略。
  • Package/Version:受影响的 crate 名称及当前版本。
  • Solution:官方建议的修复版本或方案。

大多数情况下,运行以下命令升级到安全版本即可修复:

cargo update -p <crate_name>

如果没有可用修复版本,可以考虑在 Cargo.toml 中使用 [patch] 段落指向修复分支,或者评估是否必须使用该依赖。

如何使用 cargo audit 检查 Rust 项目依赖漏洞安全

CI/CD 集成实战

为防止新漏洞随代码合并引入,建议在 GitHub Actions 等流水线中集成自动审计。以下是 GitHub Actions 配置示例:

name: Security Audit
on: [push, pull_request]
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: rustsec/audit-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

该 Action 会自动安装 cargo-audit 并运行扫描。如果检测到漏洞,构建状态将变为失败(Exit Code 1),阻止合并。

常见坑与排查

1. 忽略 Cargo.lock

审计基于锁文件,如果项目未提交 Cargo.lock 或本地锁文件过期,结果可能不准确。确保审计前执行 cargo generate-lockfile 或提交锁文件。

2. 误报与忽略配置

某些漏洞可能不适用于你的使用场景(例如未启用特定功能)。可以在项目根目录创建 audit.toml 配置忽略特定 ID,但需记录理由:

[advisories]
ignore = [
    "RUSTSEC-2023-0071" # 理由:该功能未启用
]

3. 数据库更新机制

cargo audit 默认会在运行时自动检查并更新本地漏洞数据库缓存。无需手动强制更新命令,保持联网即可获取最新漏洞信息。

参考来源