cargo-audit 是一个命令行实用程序,用于检查 Cargo.lock
文件,并将其与 RustSec 安全公告数据库进行比较。该数据库是由 Rust 安全代码工作组维护的社区安全漏洞数据库。
您可以使用以下命令安装 cargo-audit
并针对您的项目运行它
$ cargo install cargo-audit
$ cargo audit
cargo-audit
的 0.9 版本包含许多我们希望使其更有用的新功能,包括:
- 改进了 UI,以便了解漏洞如何应用到您的项目
- 针对无人维护的 crate 依赖项的警告(可以选择硬性失败)
- 跟踪 Rust 语言本身中的漏洞
UI 改进:依赖树
以前,当 cargo-audit
在项目中发现漏洞时,它会显示安全公告信息,但没有任何关于特定漏洞依赖项如何包含在您的项目中的上下文,这使得难以确定需要采取什么措施来解决该漏洞。
最新版本为每个安全公告打印一个反向依赖树(类似于优秀的 cargo-tree crate),显示一个有漏洞的依赖项如何包含在您的项目中
在未来版本的 cargo-audit
中,我们希望添加一个 cargo audit fix
命令,类似于 npm audit fix
,它可以自动更新必要的依赖项或提供如何执行此操作的说明。如果您对该功能感兴趣并且想做出贡献,我们正在寻找帮助!
新功能:无人维护的 crate 警告
此版本添加了信息性安全公告的概念 - 这些安全公告并不直接代表安全漏洞,但可能包含潜在的安全相关信息。此功能的主要用途是为无人维护的 crate 提供警告。
最近的一项研究,风险高的小世界:npm 生态系统中的安全威胁研究,表明无人维护的 npm 包对该生态系统构成高风险
我们的结果证明,npm 存在单点故障,并且无人维护的软件包威胁着大型代码库
Rust 的情况类似,一些高知名度的 crate,例如 term
crate(每天下载 8,000 次),无人维护。通过在 RustSec 安全公告数据库中跟踪有关无人维护 crate 的信息,我们希望提高这些 crate 的可见性,帮助人们发现他们应该切换到的“后续”crate,或者让潜在的志愿者维护者与有兴趣移交 crate 的作者联系。当这些移交发生时,我们可以将无人维护的 crate 安全公告标记为过时(同时仍然为感兴趣的安全研究人员提供一个需要密切关注的 crate 列表,以防出现潜在的软件供应链攻击)。
如果您有希望我们为其创建安全公告的无人维护的 crate,或者知道第三方无人维护的 crate 并希望提供有关潜在替代方案的信息,请在 RustSec/advisory-db#173 GitHub 问题中发表评论,我们可以为其提交安全公告。
目前,无人维护的 crate 会以警告的形式出现,其中包含有关每个 crate 的一些简要信息以及一个可单击的链接以阅读更多内容。如果您希望将无人维护的 crate 安全公告视为错误(因此 cargo-audit
会因例如 CI 目的而退出并返回非零状态),请运行
$ cargo audit -D
或者,如果您希望更明确
$ cargo audit --deny-warnings
跟踪 Rust 语言漏洞
以前,RustSec 安全公告数据库仅跟踪通过 crates.io 发布的存在漏洞的 crate 的信息。然而,从这个版本开始,我们还为 Rust 语言核心生态系统组件(包括 std
、cargo
和 rustdoc
)中的漏洞编制索引。我们现在已索引了以下漏洞
- CVE-2018-1000622:rustdoc:rustdoc 插件中不受控制的搜索路径元素漏洞
- CVE-2018-1000657:std:
VecDeque::reserve()
中的缓冲区溢出漏洞 - CVE-2018-1000810:std:
str::repeat()
中的缓冲区溢出漏洞 - CVE-2019-12083:std:
Error::type_id
引起的内存安全漏洞 - CVE-2019-16760:cargo:Rust 1.26.0 之前的 Cargo 可能会下载错误的依赖项
我们有兴趣通过 cargo-audit 潜在地显示有关这些安全公告的信息,例如,可以选择检测当前活动的 Rust 工具链是否易受攻击。如果您对此感兴趣,我们也希望在此问题上获得帮助!
感谢您的阅读,我们希望您喜欢 cargo-audit
0.9!