Rust生态刚刚经历了一场规模罕见的供应链攻击。两个被广泛使用的开源包——arrayref和append-only-vec——在开发者编译项目的瞬间,悄悄植入了恶意软件。
这两个包合计下载量高达2.44亿次,按下载量计算,这是Rust crate生态有史以来最严重的妥协事件之一。
![]()
一个拼写相似的陷阱包
安全研究机构Aikido Security最先发现了一个可疑的新包,名叫proc-macro1。这个包在构建过程中会静默下载并执行远程文件。
名字本身就是一个精心设计的陷阱——它故意拼写为proc-macro2的仿冒版本。proc-macro2是Rust生态中依赖度最高的crate之一,而这个仿冒包直接复制了正版包的描述和文档,让开发者很难一眼识破。
更关键的是,在同一个小时内,arrayref和append-only-vec这两个由同一位开发者维护的包,突然把proc-macro1添加为依赖项。一个孤立的仿冒包事件,瞬间升级为完整的供应链攻击。
源码没动,恶意藏在构建脚本里
攻击最隐蔽的地方在于:两个被劫持包的可见源码完全没有被修改,看起来完全正常。如果开发者做人工代码审查,根本不会发现异常。
真正的危险藏在proc-macro1的build.rs脚本里。这是Cargo在每次构建时自动编译并运行的文件——意味着开发者甚至不需要调用被劫持包的任何函数,只要项目依赖了它们,就会中招。
这种手法利用的是构建配置的信任机制,和开源生态中开发者工具被攻破的风险如出一辙。
恶意载荷:偷浏览器密码的窃密木马
一旦触发,这个构建脚本会从远程服务器下载一个针对Linux、Windows或macOS平台的二进制文件。远程服务器只用一个裸IP地址标识,目标地址还用base64编码片段做了混淆,专门用来绕过基于字符串的安全扫描。
在Unix和macOS系统上,恶意软件会把载荷写入磁盘、标记为可执行,然后作为后台进程启动——即使构建结束,它也会继续运行。
对回收的二进制文件分析显示,这是一个信息窃取木马,能够从Chromium内核的浏览器(包括Chrome、Brave和Edge)中窃取已保存的凭据,还能读取浏览器扩展存储中的数据——这个位置经常被加密货币钱包扩展使用。
此外,恶意软件还在macOS上通过LaunchAgent建立了持久化机制,每次登录都会自动重启,并保持与命令控制服务器的连接,可以执行远程shell命令。
Rust安全响应团队在收到研究人员的报告后,已确认了恶意构建脚本的存在。
这次攻击再次提醒开发者:开源依赖的安全审查,不能只看源码本身。构建脚本、依赖关系变更、包名仿冒,都是攻击者可以利用的入口。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.