摘要
8 月 16 日,crates.io 团队收到来自 Phylum 的 Louis Lang 的通知,称有一名新用户上传了九个对流行 crate1 进行域名抢注(typosquatted)的恶意 crate。这些 crate 立即被撤下(yanked),用户账户被锁定,随后于 8 月 18 日将这些 crate 从 crates.io 文件存储中完全删除。
Phylum 也针对此事件撰写了他们的博客文章。
内容
这些 crate 包含恶意的 build.rs
文件,试图将用户计算机的元数据发送到 Telegram2 频道,包括其操作系统、IP 地址以及基于 IP 地址的地理位置信息。3 frustratingly not including it *after* sending the IP address
其中一个 crate 的某个版本还包含 PuTTY4 安装程序的副本,其 build.rs
启动 PuTTY 而非将元数据发送到 Telegram。我们推测这可能是在尝试 build.rs
文件能做什么的早期实验阶段。
已采取的措施
crates.io 团队收到报告后,立即撤下了这些 crate 并锁定了关联的用户账户。虽然这无法阻止有人直接从 static.crates.io 下载 crate 文件,但它将这些 crate 从 crate 索引中移除,使其无法通过常规的 cargo
命令安装。
在分析了这些 crate 以及该用户从注册、搜索要抢注的 crate 到最终发布 crate 的所有操作日志后,我们决定将这些 crate 完全从 static.crates.io 中删除,以防止进一步攻击的可能性。5 删除操作于 2023 年 8 月 18 日协调世界时 17:22 执行。
分析
在这种情况下,这些 crate 是专门且非常明显地为恶意目的而制作的。
我们没有证据表明这些 crate 被任何实际用户下载过——对我们日志中与这些 crate 下载请求相关的用户代理进行分析表明,唯一的下载行为是自动化扫描器和镜像操作。
与这些 crate 关联的用户在 8 月 18 日之前的 30 天6内没有采取任何其他行动——无论是恶意的还是其他的。
未来行动
Rust 基金会的安全倡议计划未来对所有上传的 crate 进行扫描,包括域名抢注和 crate 文件实际内容的扫描。这两个项目的原型都将能够检测到这些 crate 文件,crates.io 团队打算在准备就绪后与基金会合作实施这些扫描器。
致谢
感谢 Phylum 的 Louis Lang 报告了这些 crate,Josh Stone 协助了报告的提交,以及 Rust 基金会的 Walter Pearce 协助了分析工作。