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] 段落指向修复分支,或者评估是否必须使用该依赖。
CI/CD 集成实战
为防止新漏洞随代码合并引入,建议在 GitHub Actions 等流水线中集成自动审计。以下是 GitHub Actions 配置示例:
name: Security Audit
on: [push, pull_request]
jobs:audit:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: rustsec/audit-check@v1with: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 默认会在运行时自动检查并更新本地漏洞数据库缓存。无需手动强制更新命令,保持联网即可获取最新漏洞信息。
参考来源
- RustSec Organization: https://rustsec.org/
- cargo-audit GitHub Repository: https://github.com/rustsec/rustsec
- RustSec Advisory Database: https://github.com/rustsec/advisory-db
原文链接:https://www.zjcp.cc/ask/11660.html
