使用 cargo-audit 0.9 保护 Rust 项目安全:依赖树、核心安全公告、无人维护的 crate

2019 年 10 月 3 日 · Tony Arcieri 代表 安全代码工作组

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 with dependency tree

在未来版本的 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 语言核心生态系统组件(包括 stdcargorustdoc)中的漏洞编制索引。我们现在已索引了以下漏洞

我们有兴趣通过 cargo-audit 潜在地显示有关这些安全公告的信息,例如,可以选择检测当前活动的 Rust 工具链是否易受攻击。如果您对此感兴趣,我们也希望在此问题上获得帮助!

感谢您的阅读,我们希望您喜欢 cargo-audit 0.9!