-
-
恶意 Pull Request 侵入 ETHcode VS Code 扩展
-
发表于: 2025-7-10 13:28 322
-
网络安全警报!在最近的研究中,ReversingLabs 的安全分析师对 ETHcode 这一用于以太坊智能合约开发的 VS Code 扩展进行了详尽的调查,发现它在一次 GitHub Pull Request 的干扰下遭到了 恶意感染。随着时间的推移,网络攻击方式日趋复杂,像这种针对开发工具的攻击不仅影响开发者的工作效率,更可能造成 极大的财产损失。
在过去的几个月中,ReversingLabs 研究团队发现了多个针对加密货币用户和开发者的恶意软件包。早在去年五月,ReversingLabs 研究员 Karlo Zanki 曾撰写博客,警告针对 Solana 生态开发者的恶意 PyPI 包。另有研究员 Lucija Valentić 也揭示了恶意 npm 包,它们通过向本地合法软件包中注入代码来窃取钱包中的 加密货币。这些都是 显著的安全事件。
开发者和用户更容易陷入这些针对开源库的风险,攻击者通常会利用品牌相似、名字类似的包(即著名的“打字错误攻击”)来欺骗用户下载。然而,除了模仿合法软件包,网络攻击者还运用更加复杂的供应链攻击手段来进行破坏。例如,Solardwinds Orion 事件和 3CX 的 DesktopApp 文件间接感染,以及流行的开源压缩工具 XZ Utils 的恶意篡改,都是这类更复杂的供应链攻击的例子。虽然这种攻击并不常见,但其带来的危害比简单的打字错误攻击更大。一旦成功,这类攻击可以对成百上千的最终用户组织造成 严重后果。
我们通过检测到 ETHcode 扩展的 GitHub Pull Request,确定了 攻击者成功入侵的过程。当用户Airez299在 GitHub 上发起的请求声称要“现代化代码库与 viem 集成及测试框架”时,尚无法想象这个PR后隐藏的恶意目标。
ETHcode 扩展由小型的 GitHub 组织 7finney 开发,最早发布于 2022 年,其用户安装量接近 6000次。VS Code 扩展与 npm 包有相似的结构,在其内部实际上是一个可公开访问的 ZIP 压缩文件。通常情况下,用户从 VS Code 市场直接安装扩展,而从未检查其代码。尽管 Visual Studio Marketplace 实施了若干保护用户免受恶意扩展影响的机制,但这些措施并不完美。
ETHcode 的 Pull Request 乍一看似乎为项目带来了某种春天,但实际情况却暗藏风险。其代码通过 GitHub 的 Copilot AI 审核和组织成员的逐行检查,未被发现任何可疑之处。实际上,Airez299 提出的PR 添加的新功能和能力都看上去相对正当且合理——它在改善原有代码的基础上,并没有明显的恶意代码。但是,在其43次提交的 4000多行改动中,却潜藏着两行代码,这两行代码足以使整个项目 面临危机。
我们深入分析了这两行可疑代码,发现这是一次 复杂的供应链攻击。这两行代码中,第一行引入了一个名为 “keythereum-utils” 的新文件依赖。这种命名极具隐蔽性,因为之前就有一个叫 keythereum 的依赖包,攻击者在命名时仅添加了 -utils 后缀,看似只是在添加一个助手库,但却隐藏了真正的恶意意图。
引入新依赖并不等于执行恶意代码。如果该依赖在安装过程中没有被调用,那它就会静静等待被调用。而第二行代码则负责具体执行,调用 Node.js 的“require”函数,从而加载该模块并执行初始化代码。此时,恶意脚本如潘多拉魔盒般被打开。
我们在分析 keythereum-utils 代码时,发现它经过高度混淆,几乎无法阅读,但借助免费工具进行去混淆后,我们能够看到它的真正作用:生成一个隐藏的 Powershell,下载并运行一个来自公共文件托管服务的批处理脚本。ReversingLabs 研究团队仍在调查这个 第二阶段有效载荷 的具体作用,但考虑到这一供应链攻击目标所针对的加密社区以及攻击扩展本身的特性,第二阶段恶意软件很可能旨在窃取受害者机器中的 加密资产,或者入侵用户正在开发的以太坊合约。
随着我们与微软 Visual Studio Marketplace 管理员的沟通,这一恶意扩展自6月26日起被全面移除。而在此期间,7finney 的扩展作者已发布更新,以清除代码库中的恶意代码。ETHcode版本 0.5.1 的更新于7月1日发布,不再包含恶意依赖,能够在 VS Code 市场上安全使用。
至此,关于这一恶意攻击活动的分析仍在继续,而众多教育意义和后续问题已经初见端倪。开发者在使用 VS Code 时,必须密切关注其 package.json 文件,该文件承载着扩展的重要信息,比如扩展展示名、版本及发布者名称。此外,开发者还应当认真检视新引入的依赖,无论这些依赖看上去多么可靠。
Airez299 这一 GitHub 账户显然是为了该次攻击而创建,所有活动的起始时间与 PR 请求的时间完美吻合,这表明这个账户可能是一个 一次性账户。此时,开发者需通过网络安全工具如 Spectra Assure 等,定期跟踪软件版本中的更新与漏洞,从而积极应对不断演变的网络安全威胁。
通过对 ETHcode 事件的剖析,它不仅说明了 身份验证不当可能导致的供应链攻击风险,更进一步强调了在当今 复杂多变 的网络环境中,开发者应该保持谨慎与重视,不断完善对软件依赖的审查流程。只有在增强安全防备的前提下,未来的开发工作才能更为安全、顺利。