攻击者利用 npm 注册表及其镜像托管伪装成 Cloudflare 安全验证页面的恶意 HTML 页面,然后将访客重定向到其控制的域名,或重定向到能够远程更改的目标。这一行动不同于常见的 npm 供应链攻击;研究人员检查的软件包在安装时不会用恶意软件感染开发者的设备,而是被用作免费托管钓鱼页面的平台。
安全研究人员 inf0stache 在 7 月发现了这一技术,当时他发现了一个名为 china_airlines 的软件包,其中包含伪造的 Cloudflare 验证页面。IntelFusions 也报告了同样的手法,随后 OX Security 进一步披露了 24 个包含相同恶意页面的 npm 软件包,这些软件包分布在 npm 及多个镜像中。
镜像如何变成钓鱼平台?
BleepingComputer 发现,检查过的软件包之一仅包含 index.html 和 package.json 两个文件,并将 HTML 文件定义为主文件。当 UNPKG 服务复制该软件包后,可以通过 unpkg.com 域名直接在浏览器中打开该文件,而不必使用攻击者控制的域名。
这种做法让恶意页面看起来更加可信,并可能帮助其绕过拦截已知攻击者域名的安全工具。OX Security 还警告称,即使软件包已从官方 npm 注册表中删除,它们仍可能继续在镜像中可用。
伪造验证与可变重定向
恶意页面模拟 Cloudflare 安全界面,并包含合法的 Turnstile 服务,但无论验证成功还是失败,混淆后的 JavaScript 都会继续执行重定向操作。据研究人员称,7 月的早期版本会引导至 microcloud[.]homes,随后在 8 月出现了指向 login[.]microsofte[.]live 的跳转。报告指出,一些早期跳转最终进入了合法的 Microsoft Outlook 登录页面,但这些相同目标之后也可能被用于托管伪造的登录页面。
其他软件包采用了不同的方法,依赖 api.keyval.org,这是一个用于存储键值对的合法平台。代码从该服务提取加密值,在浏览器中将其解密,然后把访客重定向到生成的链接。这样,攻击者无需修改 npm 软件包或重新发布软件包,就能更改目标。OX 表示,其研究期间发现的目标是合法的 ChatGPT 网站,但之后也可以将其更改为钓鱼页面或恶意软件的下载页面;不过,BleepingComputer 检查的页面并未执行 ClickFix 攻击。
为什么这一消息很重要?
这里真正发生的变化并不是开发者仅仅通过安装软件包就会受到感染,而是对常见开发基础设施中的信任进行滥用,以加载会直接在浏览器中显示的内容。这使风险范围扩大到直接访问 npm 文件和镜像链接的用户,而不再只是开发团队。因此,OX Security 建议将来自 npm 镜像域名的直接 HTML 请求视为可疑活动,同时注意到最终目标可能在不更新所托管文件的情况下发生变化。