2.45亿次下载的Rust包arrayref被投毒"

admin 2026-10-17 04:03:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

2.45亿次下载的Rust包arrayref被投毒

微步情报局
微步情报局

微步在线研究响应中心

2026年8月21日 18:57
北京

在小说阅读器读本章

去阅读

一、事件摘要

微步情报局检测到在北京时间8月20日15:11到17:25之间,知名rust基础包arrayref被供应链攻击,该包历史累计下载量为2.45亿次,是很多rust底层库的间接依赖包。攻击者疑似控制了arrayref包的维护者账号droundy的权限,利用该账号权限在rust的源码包社区crate.io投毒了arrayref,internment和append-only-vec。下游开发者项目只要引用了该投毒版本的基础包源码,就会在编译阶段导致开发者主机失陷。

被投毒的恶意版本在crates.io的总体公开暴露时间约为 2026 年 8 月 20 日 07:11—09:25 UTC(北京时间 15:11—17:25)。但已进入本地 Cargo 缓存、CI 缓存或 vendor 目录的恶意包仍可能在窗口结束后被构建并触发。主要风险包括构建主机受控、持久化、远程命令执行,以及构建环境可访问的代码仓库令牌、包发布凭据、云平台凭据、签名材料和 CI/CD Secrets 泄露。

二、事件详情

2026 年 8 月 20 日,攻击者首先通过仿冒账号发布proc-macro1。该包名称和内容刻意模仿合法且广泛使用的 proc-macro2,但二者不存在正常继承或替代关系。经过分析发现,攻击者于 01:55 UTC 发布不含恶意构建脚本的 [email protected] 作为前期伪装,随后于 07:11:15 UTC 发布携带恶意 build.rs 的 [email protected]。

约四分钟后,即07:15:00UTC,维护者droundy名下的[email protected]被发布。该版本在原有功能代码之外新增了对proc-macro1 ^1.0.107 的依赖。随后,同一维护者账号又于07:34:07 UTC和07:37:49 UTC分别发布``[email protected]、[email protected],并采用相同方式将恶意依赖引入下游构建链。(截至目前,恶意版本的包被移除。)

在发布 [email protected] 后,攻击者还连续撤回了多个近期正常版本。Cargo 不会主动替换已由 Cargo.lock 固定的正常版本,但会对被撤回的依赖发出更新提示;如果开发人员或自动化流程执行 cargo update、重新生成锁文件,或者在没有锁文件的环境中进行全新构建,依赖解析可能转向当时仍可用的恶意版本。该行为利用了维护人员对依赖更新告警的正常响应,提高了恶意版本进入下游项目的概率。

本次攻击的核心执行入口位于 [email protected] 的 build.rs。Cargo 在编译包含构建脚本的依赖时会自动编译并运行该脚本,因此下游应用无须导入或调用 proc-macro1 中的任何功能。恶意脚本会识别构建主机的操作系统和处理器架构,解码经过 Base64 拆分的下载地址,关闭 TLS 证书校验,并从 23.254.165.112:9089 下载平台对应的二阶段程序。

在 Linux 和 macOS 环境中,下载内容被写入 /tmp/rust-setup,赋予执行权限后以独立进程启动;在 Windows 环境中,脚本会在用户临时目录创建 rust-setup.ps1 和 rust-setup-launch.vbs,再通过 wscript.exe 隐藏启动 PowerShell。恶意进程在启动后脱离 Cargo 构建任务,使构建脚本能够正常退出,项目编译仍可能显示成功,从而降低攻击被开发人员或流水线直接发现的概率。载荷启动时会接收 23.254.165.112:443 作为 C2 地址。根据样本分析,相关载荷具备收集主机信息、枚举 Chromium 浏览器登录来源和扩展、建立用户级持久化,以及接收下载执行脚本或系统命令等能力。

Rust 官方随后删除了 [email protected]、[email protected] 和 [email protected],并恢复此前被恶意撤回的正常版本。其中,三个恶意版本分别在线约 86、90 和 107 分钟,最晚于 09:25:24 UTC 被删除。官方还删除了 proc-macro1、proc-macro-en、aovine、arone、aronenao 和 tinymember,并建议对这些攻击者控制或关联包的所有版本进行排查。

需要注意,07:11—09:25 UTC(北京时间 15:11—17:25)是恶意包可从 crates.io 获取的主要暴露窗口,并不等同于恶意代码只能在该时间段执行。已经进入本地 Cargo 缓存、CI 缓存、基础镜像或 vendor 目录的恶意包,仍可能在后续构建中触发。因此,Cargo.lock 命中只能证明恶意版本曾进入依赖解析结果,Cargo 缓存命中表明相关包曾被下载;只有结合构建日志、进程遥测、恶意网络连接、落地文件或持久化痕迹,才能进一步判断二阶段载荷是否实际执行。

三、IOC

IP:23.254.165.112

Hash:

25ad700976873c76af785cb99b33c48db7df8b81f21d1e9e06b3676b9a9373ae
61198155da51b838772eecf5bfaac6cbc4dcc388dccc56658fc28a8e831b34d4
408ef22050ffc5a67e005802809026b29f297a8019f8fda91a2afa8e877ba434
492f2ab86f8d8911adc79c10ec1541704f5311d207d9d799b0d2a57fcc6a4391
c9561a3b00a0fa38b7772675d987f84bd429c55cd024fc08a98245c2d1632848
74d3447e7cf99c99ea01a16332ec27432dfb0f491e10e67cd118065a60483306

四、影响范围

本次事件影响范围覆盖所有直接或间接依赖受影响 crate,并在开发机、CI/CD Runner、发布服务器或其他构建环境中执行 Cargo 构建的项目。已确认被投毒的版本包括:

上述版本均会引入恶意依赖 [email protected]。此外,[email protected] 被公开研究认为包含相同的恶意 build.rs。Rust 官方还要求排查 proc-macro1、proc-macro-en、aovine、arone、aronenao 和 tinymember 的所有版本。

恶意包在 crates.io 的主要公开暴露窗口为 2026 年 8 月 20 日 07:11—09:25 UTC,即北京时间 15:11—17:25。该时间只代表恶意包可从公开注册表获取的主要窗口,不代表攻击只能在此期间发生。若恶意包已进入开发机 Cargo 缓存、CI 缓存、vendor 目录、基础镜像或内部制品仓库,后续构建仍可能执行其中的恶意 build.rs。

五、排查方法

1. 排查锁文件和依赖清单

在代码仓库、构建工作目录、SBOM 和历史构建归档中检查恶意版本:

rg -n -U --glob 'Cargo.lock' \\   'name = \"arrayref\"\\r?\
version = \"0\\.3\\.10\"|name = \"internment\"\\r?\
version = \"0\\.8\\.7\"|name = \"append-only-vec\"\\r?\
version = \"0\\.1\\.9\"|name = \"(proc-macro1|proc-macro-en|aovine|arone|aronenao|tinymember)\"' \\ /path/to/repos

重点检查:

2. 排查 Cargo 缓存和 vendor

按照 Rust 官方建议检查本地缓存:

find ~/.cargo/registry/cache -type f \\( \\ -name 'arrayref-0.3.10.crate' -o \\ -name 'internment-0.8.7.crate' -o \\ -name 'append-only-vec-0.1.9.crate' -o \\ -name 'proc-macro1-*.crate' -o \\ -name 'proc-macro-en-*.crate' -o \\ -name 'aovine-*.crate' -o \\ -name 'arone-*.crate' -o \\ -name 'aronenao-*.crate' -o \\ -name 'tinymember-*.crate' \\ \\) -print

同样检查:

  • CI/CD 缓存;
  • 自托管 Runner 用户目录;
  • vendor/ 目录;
  • 容器镜像和构建基础镜像;
  • 内部 Cargo 镜像或制品仓库。

3. 排查构建执行记录

检查北京时间 2026 年 8 月 20 日 15:11 之后的开发机和 CI/CD 构建记录。

重点检索:

Compiling proc-macro1 v1.0.107 Compiling arrayref v0.3.10 Compiling internment v0.8.7 Compiling append-only-vec v0.1.9 cargo update cargo build cargo check cargo test

同时检查是否存在:

target/*/build/proc-macro1-*/ build-script-build

如果构建日志显示 [email protected] 已进入编译流程,应进一步检查对应时间段的进程和网络日志。

4. 排查网络连接

在代理、防火墙、DNS、NetFlow、EDR 和 CI Runner 出网日志中检查:

23.254.165.112:9089 23.254.165.112:443

其中:

  • 23.254.165.112:9089 为高置信度载荷下载地址;
  • 23.254.165.112:443 为高置信度 C2 地址;

5. 排查主机文件和进程

Linux/macOS:

/tmp/rust-setup

Windows:

%TEMP%\\rust-setup.ps1 %TEMP%\\rust-setup-launch.vbs

六、处置建议

  1. 对命中受影响版本的开发机、CI/CD Runner、发布服务器和构建容器,应首先停止相关构建和发布任务,并根据证据等级采取隔离措施。若已发现连接 23.254.165.112:9089、恶意落地文件或持久化痕迹,应立即按主机失陷事件处置。在清理缓存、临时文件或重建主机前,应先保全构建日志、网络日志、进程遥测、Cargo 缓存及相关文件样本。
  2. 在内部 Cargo 代理、制品仓库、缓存服务和依赖准入策略中,阻断以下恶意版本:

[email protected] [email protected] [email protected]

同时,将 proc-macro1、proc-macro-en、aovine、arone、aronenao 和 tinymember 的所有版本列为不可信包并进行人工核查。
3. 将受影响项目固定到已知安全版本:

arrayref = 0.3.9 internment = 0.8.6 append-only-vec = 0.1.8
4. 取证完成后,清理开发机、CI/CD Runner、容器镜像、内部制品仓库、Cargo 缓存和 vendor 目录中残留的恶意包。重点检查并清除与以下 Hash 对应的文件:

25ad700976873c76af785cb99b33c48db7df8b81f21d1e9e06b3676b9a9373ae 61198155da51b838772eecf5bfaac6cbc4dcc388dccc56658fc28a8e831b34d4 cb7778eb6dda91028abf087eb7c3553f981a67e756769507d348e8c201805568

七、参考链接

https://socket.dev/blog/popular-rust-crates-compromised

https://www.stepsecurity.io/blog/arrayref-rust-crate-supply-chain-attack

https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/


2.45亿次下载的Rust包arrayref被投毒" 网络安全文章

2.45亿次下载的Rust包arrayref被投毒"

微步情报局披露Rust基础包arrayref等遭供应链攻击,攻击者控制维护者账号在crates.io投毒恶意版本,通过build.rs下载执行二阶段载荷,导致构建主机失陷。影响[email protected]等版本,暴露窗口约2小时。建议立即排查Cargo.lock、缓存及网络连接,隔离受影响主机并回滚至安全版本。
AI安全典型案例|绿盟科技AI-PTS——新一代智能渗透系统" 网络安全文章

AI安全典型案例|绿盟科技AI-PTS——新一代智能渗透系统"

绿盟科技AI-PTS2.0智能渗透系统,以双大模型底座与多智能体协同架构,实现全流程自主化渗透测试。其核心能力包括自动化挖掘业务逻辑漏洞、长链路跨接口攻击链验证及实时自主编程突破高防护场景。该系统已在金融、运营商等头部客户落地,显著提升测试效率5-10倍,降低综合成本70%以上,将渗透测试从人力密集型服务重塑为可持续演进的能力基础设施。
ZimbraSNMP未认证RCE漏洞已遭利用" 网络安全文章

ZimbraSNMP未认证RCE漏洞已遭利用"

Zimbra协作套件存在一个已遭利用的未认证RCE漏洞CVE-2026-73570,CVSS评分8.9。该漏洞影响10.1.20之前版本,当安装zimbra-snmp包并启用SNMP通知时,未认证攻击者可通过构造SMTP请求执行任意命令。建议立即升级至10.1.20版本,并检查/var/log/zimbra.log及webapps和/tmp目录中最近30天的异常文件。
代码审计视角下的CVE-2026-40369:12字节内核写与沙箱逃逸的底层触发点剖析" 网络安全文章

代码审计视角下的CVE-2026-40369:12字节内核写与沙箱逃逸的底层触发点剖析"

本文从代码审计视角深入剖析CVE-2026-40369漏洞,一个允许从浏览器沙箱逃逸至SYSTEM权限的12字节内核写入原语。核心缺陷在于NtQuerySystemInformation系统调用中,当信息类为253且用户传入长度为0时,ProbeForWrite检查形同虚设,导致底层函数ExpGetProcessInformation直接对用户可控指针进行硬编码的12字节写入。攻击者可利用此原语破除KASLR并调用NtCreateToken创建特权令牌,实现完全接管。
评论:0   参与:  0