18个流行代码包遭劫持,被植入窃取加密货币的恶意代码

9月8日,至少18个每周下载量超20亿次的流行JavaScript代码包被短暂植入恶意软件。攻击者通过钓鱼邮件获取开发者凭证后,在NPM代码库中注入可窃取加密货币的恶意代码。安全专家警告此类供应链攻击的潜在危害,并呼吁加强代码仓库的安全认证机制。

18个流行代码包遭劫持,被植入窃取加密货币的恶意代码

2025年9月8日

至少18个每周合计下载量超过20亿次的流行JavaScript代码包今日被短暂植入恶意软件,事件起因是一名参与项目维护的开发者遭遇钓鱼攻击。此次攻击似乎已迅速得到控制,且目标明确指向窃取加密货币。但专家警告,若类似攻击携带更具破坏性的恶意负载,可能导致更难以检测和遏制的恶意软件大爆发。

这封钓鱼邮件诱骗开发者在虚假NPM网站登录并提交双因素认证(2FA)的一次性令牌。攻击者随后利用该开发者的NPM账户向至少18个流行JavaScript代码包添加了恶意代码。

比利时安全公司Aikido负责监控主流开源代码仓库的新代码更新,并扫描所有代码更新以发现可疑和恶意代码。在今日发布的博客中,Aikido表示其系统发现NPM(Node Package Manager的缩写)上至少18个广泛使用的代码库被添加了恶意代码。NPM是JavaScript开发及常用组件最新更新的中心枢纽。

JavaScript是一种强大的基于网络的脚本语言,被无数网站用于构建更交互式的用户体验,例如向表单中输入数据。但网站开发者无需从头开始构建表单输入程序,他们可以直接重用NPM上专门为此目的设计的现有代码包。

不幸的是,如果网络犯罪分子成功通过钓鱼获取开发者的NPM凭证,他们可以引入恶意代码,使攻击者能够从根本上控制用户访问使用受影响代码库的网站时在浏览器中看到的内容。

据Aikido称,攻击者注入了一段代码,可静默拦截浏览器中的加密货币活动,“操纵钱包交互并重写支付目的地,使得资金和授权在用户毫无察觉的情况下被重定向到攻击者控制的账户。”

“这种恶意软件本质上是一个基于浏览器的拦截器,可劫持网络流量和应用程序API,”Aikido研究员Charlie Eriksen写道。“其危险之处在于它在多个层面操作:更改网站上显示的内容、篡改API调用、操纵用户应用认为它们正在签署的内容。即使界面看起来正确,底层交易也可能在后台被重定向。”

Aikido表示,其通过社交网络Bsky通知了受影响的开发者Josh Junon,后者迅速回复称意识到自己刚遭遇钓鱼攻击。Junon上当的钓鱼邮件是一场更大规模活动的一部分,该活动冒充NPM并告知收件人需要更新其双因素认证(2FA)凭证。钓鱼网站模仿了NPM的登录页面,并截获了Junon的凭证和2FA令牌。登录后,攻击者随即更改了Junon NPM账户中存档的电子邮件地址,暂时将其锁定。

Aikido在Bluesky上通知了维护者,后者于UTC时间15:15回复称意识到账户被盗,并开始清理受感染的包。

Junon也在HackerNews上发表了道歉,告诉该社区以程序员为主的读者:“嗨,是的,我被黑了。”

“这看起来有点像针对性攻击,”Junon写道。“对不起大家,非常尴尬。”

安全咨询公司Seralys的“首席黑客官”Philippe Caturegli指出,攻击者似乎是在发送钓鱼邮件前两天注册了其欺骗网站——npmjs[.]help。该欺骗网站使用了dnsexit[.]com的服务,这是一家“动态DNS”公司,也提供“100%免费”的域名,可立即指向用户控制的任何IP地址。

Junon今日在Hackernews上的道歉列出了受影响的包。

Caturegli表示,令人惊讶的是,此案中的攻击者对其代码修改并未表现出更大的野心或恶意。

“疯狂的是,他们入侵了数十亿的网站和应用,却只针对几个加密货币相关的东西,”他说。“这是一次供应链攻击,本可以轻易变成比收割加密货币更严重的事件。”

Aikido的Eriksen对此表示同意,称无数网站侥幸躲过一劫,因为此事在几小时内就得到了处理。作为供应链攻击如何迅速升级的例子,Eriksen指出了8月下旬另一起NPM开发者账户被盗事件,该事件向“nx”(一个每周下载量高达600万次的开源代码开发工具包)添加了恶意软件。

在nx事件中,攻击者引入了代码,可搜索用户设备上来自GitHub、NPM等程序员目的地以及SSH和API密钥的认证令牌。但恶意代码并未将这些被盗凭证发送到攻击者控制的中央服务器,而是在受害者的GitHub账户中创建了一个新的公共仓库,并将被盗数据发布在那里供全世界查看和下载。

Eriksen表示,像GitHub和NPM这样的编码平台应采取措施,确保对广泛使用的包的任何新代码提交都需要更高级别的认证,以确认所讨论的代码确实是由账户所有者提交的,而不仅仅是经由该账户提交。

“更流行的包应该要求证明其来自可信来源,而不仅仅是随机来自互联网上的某个地方,”Eriksen说。“包是从哪里上传的,是由GitHub响应主分支的新拉取请求,还是其他地方?在这个案例中,他们并未入侵目标的GitHub账户。他们没有碰那个。他们只是上传了一个修改版本,而这个版本并非来自预期来源。”

Eriksen表示,代码仓库被盗对开发者来说可能是毁灭性的,许多人在此类事件后最终完全放弃了他们的项目。

“这很不幸,因为我们看到的一种情况是,人们的项目被盗后,他们说,‘你知道吗,我没有精力处理这个,我打算弃用整个包,’”Eriksen说。

经常被引用的安全专家Kevin Beaumont在其博客doublepulsar.com上撰写安全事件文章,今日他通过频繁更新Mastodon账户密切关注此事。Beaumont表示,此事提醒人们,世界上大部分地区仍然依赖于最终由极少数人维护的代码,而这些人大都负担过重且资源不足。

“大约过去15年里,每个企业都在通过引入178个相互连接的库来开发应用,这些库是由Skegness棚屋里的24个人编写的,”Beaumont在Mastodon上写道。“大约过去2年里,组织一直在购买AI氛围编码工具,某个高管对着电脑大喊‘做个网店’,然后就添加了389个库,并放出一个应用。结果是:如果你想掌控世界上的公司,只需钓鱼Skegness的一个人。”

Aikido最近推出了一款产品,旨在帮助开发团队确保每个使用的代码库在使用或安装前都经过恶意软件检查。位于加州伯克利的非营利组织国际计算机科学研究所的研究员Nicholas Weaver表示,Aikido的新产品之所以存在,是因为许多组织距离供应链噩梦仍仅一次成功的钓鱼攻击之遥。

Weaver表示,只要负责维护广泛使用代码的人员继续依赖可被钓鱼的2FA形式,此类供应链泄露事件就会持续发生。

“NPM应该只支持防钓鱼认证,”Weaver说,他指的是物理安全密钥是防钓鱼的——这意味着即使攻击者窃取了你的用户名和密码,在没有同时拥有该物理密钥的情况下,他们仍然无法登录你的账户。

“所有关键基础设施都需要使用防钓鱼的2FA,考虑到现代软件中的依赖关系,像NPM这样的档案库绝对是关键基础设施,”Weaver说。“NPM不要求所有贡献者账户使用安全密钥或类似的2FA方法,应被视为疏忽。”

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计