2025年9月,NPM社区爆发大规模供应链攻击,目标为加密货币行业。攻击源于开发者qix收到的钓鱼邮件,攻击者冒充NPM官方,诱导其更新双因素认证信息,从而控制账户并发布包含恶意代码的NPM包。恶意代码主要通过地址替换和交易劫持窃取用户加密货币。
作者: Joker & ccj
编辑: Liz
在2025年9月9日凌晨,NPM 社区爆发了一起大规模的供应链攻击,目标是加密货币行业。该事件影响了 NPM 平台上多个广泛使用的流行软件包,这些包都是由同一位开发者 qix 编写的。SlowMist 自主研发的 Web3 威胁情报和动态安全监控工具 MistEye 立即做出响应,迅速传递相关威胁情报,并为用户提供关键的安全保护。
https://misteye.io/threat-intelligence/details/SM-2025-268464
此次攻击源于开发者 qix 收到的一封钓鱼邮件,他报告说攻击者冒充 NPM 官方人员。 使用的电子邮件地址是 support[@]npmjs[.]help。
https://bsky.app/profile/bad-at-computer.bsky.social/post/3lydje4zqis2y
qix 还提到,电子邮件的主题是 “Update Two-Factor Authentication Info”(更新双因素身份验证信息)。该电子邮件包含一个恶意链接:
https[://]www[.]npmjs[.]help/settings/qix/tfa/manageTfa?action=setup-totp. 受害者点击“Update 2FA Now”(立即更新 2FA)将被重定向到此链接。
邮件内容:
https://gist.github.com/Qix-/c1f0d4f0d359dffaeec48dbfa1d40ee9
https://bsky.app/profile/bad-at-computer.bsky.social/post/3lydioq5swk2y
目前,此 URL (https[://]www[.]npmjs[.]help) 已无法访问,并且在 VirusTotal 上已被标记为恶意。
https://www.virustotal.com/gui/url/c737634c6e62f3fb41d7db47da964d70a32005a6b42b4e7c4b1697eeecd2b58e
其他 NPM 开发者之间的讨论表明,许多人也收到了类似的钓鱼邮件,所有邮件都提示用户“更新双因素身份验证信息”。
https://github.com/orgs/community/discussions/172738
从 qix 和其他开发者的讨论中可以清楚地看出,这次攻击主要涉及冒充 NPM 官方人员的钓鱼邮件。通过诱骗受害者更新其 2FA 信息,攻击者接管了帐户,随后使用被盗帐户发布包含恶意代码的 NPM 包。
在分析被入侵的 NPM 包后,我们在 index.js 中识别出高度混淆的可疑代码。经过解混淆和分析,恶意代码的主要目的是窃取用户的加密货币,主要通过地址替换和交易劫持来实现。
恶意代码的核心逻辑位于 newdlocal() 函数中,该函数使用三个子函数 f()、f2() 和 f4() 执行地址替换。
f() 实现了 Levenshtein distance (莱文斯坦距离)算法来衡量字符串相似度。其目标是从攻击者预设的地址池中选择视觉上最相似的地址,替换原始地址,以确保向用户显示的加密货币地址被替换为攻击者控制的地址。
f2() 迭代地址池,使用 f() 确定哪个预设地址与原始地址最相似,返回相似度最高的攻击者地址。
f4() 执行实际替换。该代码首先使用 Object.entries() 将对象 vO 转换为键值对,然后扫描匹配的地址。对于匹配的地址,f4() 调用 f2() 以选择视觉上最相似的攻击者地址并替换原始地址。因此,用户在UI中看到的是攻击者的地址,如果直接复制进行转账,资金可能会被盗。
**变量解释:**
- **vA, vA2…vA7:** 攻击者的加密货币地址池
- **vO:** 包含多种加密货币地址格式的正则表达式对象
恶意代码的主要逻辑驻留在 runmask() 函数中。此函数使用 f8() 持续监控钱包连接状态。一旦检测到钱包连接,就会触发 f7() 以建立钱包劫持。
f7() 使用 Object.defineProperty() 将 window.ethereum 的核心方法(request
、send
、sendAsync
)替换为 f6() 生成的恶意代理函数,同时在 Map 对象中备份原始方法,以拦截所有钱包交互。
f6() 通过调用 f5() 修改交易参数,具体取决于交易类型:
f5(..., true)
以更改交易参数f5(..., false)
以替换公钥和接收者地址f5() 实现了特定的参数替换逻辑:
对于简单的 ETH 转账,接收者地址将被替换为 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976
对于智能合约交互,它会解析 data 字段并替换常见函数签名(如 approve
和 transfer
)中的地址参数
对于其他调用,非攻击者地址将被替换为攻击者控制的地址
对于 Solana 交易,f5() 将 instructions.accounts
、keys.pubkey
和 recipient
/ destination
中的所有地址替换为 19111111111111111111111111111111
攻击者进行 Solana 地址替换的意图仍不清楚。
此次攻击突显了钓鱼邮件与社会工程相结合所带来的严重风险。 SlowMist 建议开发者对电子邮件的来源和域名保持高度警惕,避免直接点击可疑链接。敏感操作应通过受信任环境中的官方网站进行。
此外,在构建和发布新迭代时,开发人员应使用依赖项版本锁定。 安全或功能更新应通过内部安全审计应用,并相应地更新锁定版本,以防止引入新的风险。
如需了解有关 APT 情报、依赖项供应链攻击和其他安全数据的更多信息,请考虑使用 SlowMist 的 MistEye Web3 威胁情报和动态安全监控工具来快速识别威胁并阻止攻击。
官方网站: https://misteye.io/
联系方式: https://www.slowmist.com/contact-us.html
SlowMist 是一家区块链安全公司,成立于 2018 年 1 月。公司由一个拥有超过十年网络安全经验的团队创立,力求成为全球力量。我们的目标是使区块链生态系统对每个人都尽可能安全。我们现在是一家著名的国际区块链安全公司,曾参与过各种知名项目,如 HashKey Exchange、OSL、MEEX、BGE、BTCBOX、Bitget、BHEX.SG、OKX、Binance、HTX、Amber Group、Crypto.com 等。
SlowMist 提供各种服务,包括但不限于安全审计、威胁信息、防御部署、安全顾问和其他安全相关服务。我们还提供 AML(反洗钱)软件、MistEye(安全监控)、SlowMist Hacked(加密黑客档案)、FireWall.x(智能合约防火墙)和其他 SaaS 产品。我们与国内外公司建立了合作伙伴关系,如 Akamai、BitDefender、RC²、天际伙伴、IPIP 等。我们在加密货币犯罪调查方面的大量工作已被国际组织和政府机构引用,包括联合国安全理事会和联合国毒品和犯罪问题办公室。
通过提供针对单个项目定制的全面安全解决方案,我们可以识别风险并防止它们发生。我们的团队能够发现并发布多个高风险区块链安全漏洞。通过这样做,我们可以提高意识并提高区块链生态系统中的安全标准。
- 原文链接: slowmist.medium.com/thre...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!