至少有18个流行的JavaScript代码包(每周下载量超过20亿次)今日短暂受到恶意软件攻击,原因是一名参与维护这些项目的开发人员遭到网络钓鱼攻击。此次攻击似乎已得到迅速控制,其主要目标是窃取加密货币。但专家警告称,类似攻击如果载荷稍微凶悍一些,可能会迅速导致破坏性恶意软件爆发,而这种爆发将更加难以检测和控制。

这封钓鱼邮件诱骗一名开发者登录一个虚假的 NPM 网站,并提供一次性令牌进行双因素身份验证。随后,钓鱼者使用该开发者的 NPM 帐户向至少 18 个流行的 JavaScript 代码包中添加恶意代码。
Akido是一家位于比利时的安全公司,负责监控主要开源代码库的新代码更新,并扫描所有代码更新,以查找可疑和恶意代码。Akido 在今天发布的一篇博客文章中表示,其系统发现至少 18 个广泛使用的代码库中存在恶意代码。NPM (Node 包管理器的缩写)是 JavaScript 开发和广泛使用的 JavaScript 组件最新更新的中心枢纽。
JavaScript 是一种功能强大的 Web 脚本语言,无数网站使用它来打造更具交互性的用户体验,例如在表单中输入数据。但是,每个网站开发者无需从头构建一个用于表单输入数据的程序,因为他们可以复用 NPM 中现有的专门为此目的设计的代码包。
不幸的是,如果网络犯罪分子设法从开发人员那里窃取 NPM 凭证,他们就可以引入恶意代码,让攻击者从根本上控制人们在访问使用受影响代码库之一的网站时在其 Web 浏览器中看到的内容。
据 Akido 称,攻击者注入了一段代码,可以在浏览器中悄悄拦截加密货币活动,“操纵钱包交互,并重写支付目的地,以便资金和批准重定向到攻击者控制的账户,而用户不会发现任何明显的迹象。”
Akido 研究员Charlie Eriksen写道:“这种恶意软件本质上是一个基于浏览器的拦截器,可以劫持网络流量和应用程序 API。它的危险之处在于它在多个层面运作:更改网站上显示的内容、篡改 API 调用,以及操纵用户应用程序认为它们正在签名的内容。即使界面看起来正确,底层事务也可以在后台重定向。”
Akido 表示,它通过社交网络 Bsky 通知了受影响的开发者Josh Junon ,后者很快回复称他知道自己刚刚遭遇了网络钓鱼。Junon 收到的钓鱼邮件是一场更大规模攻击活动的一部分,该活动伪造了 NPM,并要求收件人更新其双因素身份验证 (2FA) 凭证。该钓鱼网站模仿了 NPM 的登录页面,并拦截了 Junon 的凭证和 2FA 令牌。登录后,钓鱼者更改了 Junon NPM 帐户存档的电子邮件地址,导致其暂时无法登录。

Aikido 通知了 Bluesky 的维护人员,后者于 UTC 时间 15:15 回复称他已经意识到了问题,并开始清理受损的软件包。
Junon 还在HackerNews 上发表了道歉声明,告诉社区的程序员读者们,“嗨,是的,我被攻击了。”
“这看起来和感觉起来有点像一次有针对性的攻击,”朱农写道。“抱歉各位,非常尴尬。”
安全咨询公司Seralys的“首席黑客官” Philippe Caturegli观察到,攻击者似乎在发送钓鱼邮件的两天前就注册了他们的伪造网站 npmjs[.]help。该伪造网站使用了 dnsexit[.]com 的服务,这是一家“动态 DNS”公司,还提供“100% 免费”的域名,可立即指向用户控制的任何 IP 地址。

Junon 今天在 Hackernews 上发布了 mea cupla,列出了受影响的软件包。
Caturegli 表示,值得注意的是,这起案件中的攻击者在代码修改方面并没有变得更加野心勃勃或恶意。
“疯狂的是,他们入侵了数十亿个网站和应用程序,只是为了攻击几个加密货币,”他说。“这是一次供应链攻击,其后果可能比加密货币收集更严重。”
Akito 的 Eriksen 对此表示赞同,他表示,由于这起事件在几个小时内就得到了处理,无数网站得以幸免。为了说明这些供应链攻击如何迅速升级,Eriksen 举了一个例子,说明8 月底 NPM 开发人员的另一起攻击事件,该事件将恶意软件添加到“ nx ”中。“nx”是一个开源代码开发工具包,每周下载量高达 600 万次。
在 nx 入侵事件中,攻击者植入了代码,用于从 GitHub 和 NPM 等开发者平台搜索用户设备,获取身份验证令牌以及 SSH 和 API 密钥。然而,恶意代码并没有将这些窃取的凭证发送到攻击者控制的中央服务器,而是在受害者的 GitHub 帐户中创建了一个新的公共存储库,并将窃取的数据发布到那里,供所有人查看和下载。
Eriksen 表示,GitHub 和 NPM 等编码平台应该采取更多措施,确保任何针对广泛使用的软件包的新代码提交都需要更高级别的证明,以确认相关代码确实是由账户所有者提交的,而不仅仅是由该人的账户提交的。
“更受欢迎的软件包应该需要证明其来源可靠,而不是随机地从互联网上的某个地方获取,”埃里克森说。“软件包是从哪里上传的?是 GitHub 响应主分支的新拉取请求,还是其他地方?在本例中,他们并没有入侵目标的 GitHub 帐户。他们根本没动过这个账户。他们只是上传了一个修改后的版本,而这个版本并非来自预期的来源。”
埃里克森表示,代码库泄露对开发人员来说可能是毁灭性的,许多开发人员在遭遇此类事件后最终会完全放弃他们的项目。
“这很不幸,因为我们看到的一件事是,人们的项目受到了损害,他们说,‘你知道吗,我没有精力做这件事,我只会放弃整个方案,’”埃里克森说。
凯文·博蒙特 (Kevin Beaumont ) 是一位经常被引用的安全专家,他在博客 doublepulsar.com 上撰写有关安全事件的文章。他今天一直在密切关注此事,并在 Mastodon 上频繁更新他的账户。博蒙特表示,这起事件提醒我们,地球上很大一部分代码仍然依赖于极少数人维护,而这些人大多负担过重,资源不足。
Beaumont 在 Mastodon 上写道:“过去 15 年左右,每家企业都在开发应用程序,他们把 24 个人在斯凯格内斯的一间棚屋里编写的 178 个互连库都搬了进来。过去 2 年左右,各大机构一直在购买 AI 风格的编程工具,某位高管喊着‘开个网店’,电脑里就塞进了 389 个库,然后一个应用程序就出来了。结果就是:如果你想掌控全世界的公司,只需在斯凯格内斯钓到一个人就行了。”

图片:https://infosec.exchange/@[email protected]。
Akido 最近推出了一款产品,旨在帮助开发团队确保每个代码库在使用或安装之前都经过恶意软件检查。加州伯克利非营利组织国际计算机科学研究所的研究员尼古拉斯·韦弗 (Nicholas Weaver)表示,Akido 之所以推出新产品,是因为许多组织距离一次成功的网络钓鱼攻击仍然只有一步之遥,最终会陷入供应链噩梦。
韦弗表示,只要负责维护广泛使用的代码的人员继续依赖可钓鱼形式的 2FA,这种类型的供应链妥协就会继续存在。
“NPM 应该只支持防网络钓鱼身份验证,”Weaver 表示,他指的是防网络钓鱼的 物理安全密钥——这意味着即使网络钓鱼者设法窃取您的用户名和密码,他们仍然无法在没有该物理密钥的情况下登录您的帐户。
“所有关键基础设施都需要使用防网络钓鱼的双因素身份验证 (2FA),考虑到现代软件的依赖性,像 NPM 这样的档案库绝对是关键基础设施,”韦弗说道。“NPM 并未要求所有贡献者账户都使用安全密钥或类似的双因素身份验证方法,这应该被视为疏忽。”
原文: https://krebsonsecurity.com/2025/09/18-popular-code-packages-hacked-rigged-to-steal-crypto/