一次针对加密钱包的重大 JavaScript 供应链攻击,通过受感染的 npm 包进行,大部分得到了控制,仅导致 1,043 美元的加密货币被盗。

执行摘要

最近一次广泛的 JavaScript 供应链攻击,被认为是历史上最大的 npm 泄露事件,通过对流行的 GitHub 包进行恶意更新,瞄准了加密货币钱包。尽管其潜在影响范围广泛,影响了 99% 的云环境使用的包,并且恶意代码存在于其中 10% 的环境中,但此次攻击造成的经济损失极小,总计仅窃取了 1,043 美元的加密货币。这有限的影响归因于在两小时内快速检测、精心设计的载荷以及开发人员安全意识的提高以及现有保护措施。

事件详情

该事件于 2025 年 9 月 8 日发生,威胁行为者通过一场复杂的网络钓鱼活动控制了开发人员 Qix(Josh Junon)的 npm 账户。攻击者利用一封来自假冒域的、具有说服力的双因素认证 (2FA) 重置电子邮件来获取维护者的凭据。这种未经授权的访问允许发布 18 个流行 npm 包的恶意版本,包括 debugchalksupports-hyperlinksstrip-ansi,这些包每周总计有数十亿次下载。恶意版本在 npm 注册表上存活了大约两小时,从世界标准时间 13:16 直到大约 15:20,此时社区发现了可疑代码,维护者也恢复了干净的版本。

财务机制和攻击向量

注入的恶意代码不针对服务器端环境,而是专注于拦截浏览器环境中的加密交易和 Web3 API 调用。攻击采用了两种主要机制:钱包劫持网络响应操纵钱包劫持涉及钩入 window.ethereum 以拦截对 MetaMask 等钱包的调用,从而悄悄地将传出交易重定向到攻击者控制的地址。网络响应操纵则覆盖了 fetchXMLHttpRequest,以扫描 API 响应中的区块链地址,然后使用 Levenshtein “最近匹配”算法将其替换为视觉上相似的攻击者地址。该攻击支持多链目标,包括 EthereumBitcoinLitecoinTronBCHSolana。1,043 美元的最小财务影响部分归因于注入代码中的一个关键错误,该错误导致 CI/CD 管道崩溃,从而比预期更早地被检测到。

更广泛的影响和安全态势

此事件强调了开源软件供应链固有的漏洞,特别是在传递依赖和维护者账户安全方面。Wiz 遥测数据显示,99% 的云环境包含至少一个被此次攻击瞄准的包实例,并且在泄露窗口期间,恶意代码到达了其中 10% 的环境。此次攻击凸显了加密生态系统中复杂软件供应链攻击日益增长的趋势。长期影响包括对 Web3 开发社区中软件供应链安全的警惕性和审查的增加。预计此次事件将加速采用更强大的安全实践,例如 软件物料清单 (SBOM) 生成、SLSA 框架实施、定期依赖项审计、使用包锁定文件以及为关键应用程序考虑私有 npm 注册表。这些措施对于减轻与受信任开发依赖项成为金融恶意软件分发载体相关的风险,并增强去中心化金融的整体安全态势至关重要。