首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

恶意 Rust Crate Arrayref 运行构建时有效负载

2026-08-21 1 阅读 约9分钟阅读 abhisek
分享:
字号:
摘要 2026 年 8 月 20 日,流行的 Rust crate arrayref 的受损版本出现在 crates.io 上。版本 0.3.10 添加了对名为 proc-macro1 的误植包的依赖项,该包的构建脚本会在项目编译时下载并运行远程二进制文件。该代码在构建时运行,因此只需编译一个拉取错误版本的项目就足以触发它。 crates.io 团队现已删除了恶意版本。涉及的软件包真正的 arrayref 和append-only-vec 包由 droundy 维护,其帐户似乎已被泄露。相应的 GitHub 存储库不再可用。 github.com/droundy/arrayref 、 github.com/droundy/append-only-vec 以及整个 github.com/droundy 帐户均返回 404,因此上游代码不再可供检查。一个单独的帐户 dtolney 发布了 proc-macro1 。该用户名与 David Tolnay 的真实 dtolnay 帐户非常相似。其元数据伪造authors = ["David Tolnay < [email protected] >"] 并将存储库指向返回 404 的 dtolnay/proc-macro1 路径。 Crate Version Publisher Status arrayref 0.3.10 droundy (compromied) 恶意,删除了 proc-macro1 所有版本 dtolney (impersonation) 恶意typosquat,整个 crate 删除了append-only-vec 0.1.9 droundy(受损)由记者标记,相同的参与者 arrayref 0.3.9 和更早的 droundy Clean 请注意 proc-macro1 不是 proc-macro2 。宏作者所依赖的真正的板条箱是 proc-macro2 。恶意 proc-macro1 的 src/ 是 proc-macro2 的真实副本,因此在构建脚本运行时构建继续工作。构建脚本的作用有效负载位于 proc-macro1 1.0.107 的构建脚本中。它将其服务器地址存储为 base64 片段,并在构建时重新组装它们,在公告中引用: // proc-macro1-1.0.107/build.rs (在 rustsec/advisory-db#3161 中引用) const SRC_URL_PARTS : & [ & str ] = & [ "aHR0cHM6Ly8=" , "MjMuMjU0Lg==" , “MTY1Lg==”,“MTEyOg==”,“OTA4OS8=”]; const END_URL_PARTS : & [ & str ] = & [ "MjMuMjU0Lg==" , "MTY1Lg==" , "MTEyOg==" , "NDQz" ];解码后,这些片段会生成有效负载主机 hxxps://23[.]254[.]165[.]112:9089/ 以及命令和控制地址 23[.]254[.]165[.]112:443 。该脚本通过 TLS 连接获取特定于体系结构的二进制文件,该连接接受任何证书而不进行验证,然后从构建中分离出来运行它。在 Unix 上,它会删除并运行 /tmp/rust-setup 。在 Windows 上,它会在 %TEMP% 下编写 PowerShell 脚本和 VBScript 启动器并隐藏启动它们,然后放弃子进程,以便编译器不会等待它。它是如何传播的 所有者帐户撤回了旧版 arrayref 版本 0.3.5 到 0.3.9。拉动一个箱子会让 Cargo 打印一条“考虑更新到未拉动的版本”警告,这会促使开发人员转向唯一未拉动的版本,即恶意的 0.3.10。提交 RustSec 咨询的记者指出,他们就是这样做的。 arrayref 被广泛用作传递依赖。它通过tiny-skia、sctk-adwaita和winit位于常见Rust图表的深处,这将其置于大多数基于egui、eframe和iced构建的GUI工作之下。该包的历史下载量约为 2.45 亿次(撰写本文时为 244,989,384 次),其中干净的 0.3.9 版本约占 1.52 亿次。这些数字衡量的是 crate 的使用范围,而不是受影响的构建数量。危害指标 类型 指标详细信息 网络 23.254.165.112:9089 有效负载主机 (HTTPS) 网络 23.254.165.112:443 C2,作为 argv[1] 传递给有效负载 文件 (Unix) /tmp/rust-setup 下载的可执行文件 (Windows) %TEMP%\rust-setup.ps1 下载的 PowerShell 脚本文件 (Windows) %TEMP%\rust-setup-launch.vbs VBScript 启动器 第二阶段名称 rust-crate_0.1.0 、 _0.2.0 、 _0.3.0 、 _0.4.0 由操作系统和架构选择 已删除 crate 工件的 SHA256:Artifact SHA256 arrayref 0.3.10 25ad700976873c76af785cb99b33c48db7df8b81f21d1e9e06b3676b9a9373ae proc-macro1 1.0.107 61198155da51b838772eecf5bfaac6cbc4dcc388dccc56658fc28a8e831b34d4 proc-macro1 1.0.106 b5c1b5b0763a8809a644a8f92224653f0aca623a98eecc714d27f74b80fbe436 第 2 部分:技术分析 我们的技术分析涵盖了此事件背后的两个 crate,arrayref 0.3.10 和 proc-macro1 1.0.107。 arrayref 0.3.10 引入了一个名为 proc-macro1 的依赖项。恶意代码位于 proc-macro1 的构建脚本中,而不是 arrayref 本身。 arrayref arrayref 中的注入点是一个包含四个宏的小板条箱。到 0.3.9 为止,它没有构建脚本,也没有运行时依赖项。版本 0.3.10 保留了该宏源代码并在清单中添加了一行: [ dependency 。 proc-macro1 ] 这个 [dependency.proc-macro1] 条目足以引入恶意包。要求 1.0.107 是一个插入符号范围,并且仅发布了 1.0.106 和 1.0.107,它解析为恶意 1.0.107。 crate自己的src/lib.rs是普通的宏代码,例如array_ref!宏: ( $ arr : expr, $ offset : expr, $ len
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱