NPM 供应链攻击:1 封邮件差点毁了整个加密世界

要点总结
• 黑客通过钓鱼邮件劫持 NPM 维护者账号,注入恶意代码并污染上游依赖
• 受污染库一旦被更新,前端网页即可能自动加载恶意脚本,拦截并篡改用户交易
• 攻击利用了地址相似度算法伪造地址,诱导用户签名错误交易
• 事件虽然损失金额不大,但暴露出供应链攻击的高传播性与隐蔽性
• 硬件钱包能独立解析交易并在屏幕上展示「所见即所签」,是本次事件中的安全护盾
• OneKey 使用锁版本管理依赖,未引入恶意更新版本
• 开发者需通过锁版本、私有源和自动扫描等手段降低依赖被污染的风险
• 安全不是锦上添花,而是 Web3 中最基本的生存工具
• OneKey 的 SignGuard 功能实现对交易内容的本地独立验证,确保交易透明
• 本次逃过一劫只是运气,下一次攻击可能已经在路上
「NPM」、「供应链攻击」、「前端劫持」、「不要进行任何链上操作」.......
昨天一觉醒来,时间线已被相关关键词刷屏。你可能下意识地以为只是又一起黑客闹剧,却没意识到——一场史无前例的「 NPM 供应链攻击」早已在深夜悄然引爆。
先简单总结一下那晚发生了什么:「黑客劫持了 NPM 开源库维护者的账号,并植入恶意代码,更新过相关库的网站将会自动执行恶意程序,该程序会通过前端网站监控并拦截加密钱包发起的交易,并篡改交易信息,将收款人地址篡改为攻击者地址,以此盗取用户资金」。
这就是一次针对 NPM 库的供应链攻击:攻击者不是直接攻击你项目的代码,而是「上游」——你项目依赖的第三方包、这些包的维护者账号、发布流程或仓库。一旦上游被污染,就会顺着依赖链传到无数下游项目,造成大范围中毒。
这场超大规模的黑客事件为何发生的?OneKey 用户又是如何幸免于此?这篇文章从头到尾给你讲个明白👇
「事件的来龙去脉」
北京时间 9 月 8 日晚 10 点左右,网络安全公司 aikido 的成员在社媒平台 bsky 上喊话 NPM 维护员 qix,称其相关账号已经被盗,并恶意更新相关开源库。随后很快被本人证实。
而被盗原因却非常的简单:一封钓鱼邮件。被盗者 qix 称其收到一封来自 NPM 团队的邮件,要求他更新「2FA」信息,否则其账号权限将会被冻结。在乖乖操作之后,黑客已经劫持了这位维护者的账号,获取了篡改代码的权限!
之后,黑客不断更新开源库的代码,并发布新的版本。根据统计,受到影响的库累计下载量超 26 亿次,可见影响范围之广。
直到此时,你在各种 Dapp 前端进行的交易可能已经被恶意程序盯上了,盗窃流程可以简述为:
用户在前端发起一笔交易 -> 恶意程序监控并提前拦截 -> 在发送给钱包签名前替换收款人地址 -> 将篡改过的交易信息提交给钱包并签名 -> 资金发送给黑客控制的钱包。
你可能会觉得当签名发起,核查到发送地址不对时很容易避免这次「低级攻击」,实则你太小瞧黑客了。为了让你「安心」签下这笔交易,黑客会用一种叫做「Levenshtein 距离算法」来选择一个和你地址字段非常相似的地址来替换,以此让你放松警惕。
在维护者账号被盗之后的 8 小时,所有被恶意篡改的 NPM 库已经全部恢复正常,根据 Security Alliance(@_SEAL_Org)的分析报告称,这次事件总共造成了不到 50 美金被盗。但其背后巨额防范成本难以估量。
「运气好就不需要关心?这绝对不是最后一次」
这次极小的损失只得益于运气好,以及各类安全团队、相关开发者的快速响应和配合。这并不意味着我们不需要重视,因为这不是第一次,也绝对不会是最后一次。
实际上,上一次 NPM 库供应链攻击仅仅发生不到一年......
在2024 年 12 月 2 日,Solana 的 web3.js 就已经发生了非常类似的事件,同样是开源库维护者账号被盗,同样是植入恶意程序,只不过上次黑客的目标是直接窃取你的私钥,最终黑客在短短5小时内盗取了 16 万美金。
当时我们也进行了详细的分析。(https://x.com/OneKeyCN/status/1864655720303739303)
「这一次,我们又学到了什么?」
硬件钱包又一次上大分,再次完美躲过一劫
本次攻击主要是基于浏览器的环境进行作恶。用户在应用前端提交交易申请时,黑客的恶意程序趁虚而入篡改交易信息,让用户对错误信息进行签名而不自知。
而对于硬件钱包来说,就算你在网页端提交交易,所有交易信息都会独立传输到硬件钱包,并由硬件钱包的芯片进行独立模拟解析,并且将所有交易内容解析为「人话」,告诉用户目前交易调用的合约函数、授权金额、授权地址、以及合约名称等信息,实现「所见即所签」,清楚地查看每一个关键信息,确保交易的安全。
供应链攻击防不胜防,开发者防卫习惯是关键
开发者也是人,总有疏忽大意的时候,这次是上游代码投毒,下次可能就是窃取开发日志敏感信息。不管怎样,如果开发者能顺着所有供应链环节,层层做好日常防范措施,还是可以很大程度上避免黑客攻击的发生。
比如这次的权限失控导致的上游代码库被污染,下游开发者可以通过以下几个要点进行防范,避免影响到终端用户:
- 锁定包版本:使用锁文件冻结依赖版本,防止自动更新,也不会引入未审核代码。
- 私有注册表:搭建内部镜像仓库,审核并缓存公共依赖库,避免直接暴露外部源。
- 自动化安全扫描:集成如 Dependabot 这样的安全扫描工具,在快速响应依赖缺陷的同时进行人工复核。
想要了解完整的防范措施,可以查看 Onekey的开源硬核防范指南👇
(https://x.com/OneKeyCN/status/1900443506159870078)
「如果你是 OneKey 的硬件钱包用户」
如果你是 OneKey 的硬件钱包用户,同时搭配着 OneKey 的 App 使用,那么恭喜你,你在这次黑客攻击事件中不会有任何影响,因为:
- OneKey 的硬件钱包自带「SignGuard」签名解析系统。交易信息在本地独立验证解析后会清晰地呈现给用户,所有交易内容可以确保真实,如果存在任何可疑 / 错误信息,用户在硬件设备上确认时可以马上察觉。
- OneKey 的依赖代码管理采用了锁版本的方式,不会更新未被审核的版本。所以此次恶意更新版本未被 OneKey 团队使用。
「End」
这次 NPM 供应链攻击再次提醒我们:安全不是可选项,而是唯一选项。
无数血淋淋的案例已经证明了硬件钱包是加密游乐场的必备单品,选择具有签名解析的硬件钱包更是让你的加密之旅安全感拉满。