2026年7月28日,一起新的npm供应链攻击在开发者社区引爆警报。安全公司StepSecurity通过自动化扫描发现,两个广受使用的Joyfill开源包——@joyfill/components和@joyfill/layouts——的预发布版本被悄悄注入了恶意代码。任何人只要在项目中导入这些beta构建,无需执行常见的安装后脚本,隐藏的远程访问木马(RAT)就会在后台激活。
StepSecurity在发给Cyber Security News(CSN)的报告中指出,混淆后的植入物同时出现在两个包内,并且只存在于发布到npm注册表的tarball压缩包中,而非对应的干净源码仓库。这一特征意味着攻击者在软件包构建环节做了手脚,绕过了常规的代码审查。报告写道:“同样的混淆植入物出现在两个包中,且仅存在于已发布的tarball,不在干净的项目源码里。”StepSecurity通过沙箱运行和对比早期安全版本确认了这一发现。
![]()
攻击链分为五个阶段,从包被导入的那一刻就开始运转。首先,一个隐藏的加载器会设置活动标签,并将Node.js的底层能力暴露在一组短小的全局变量名下。然后,它读取公共区块链上的数据来获取真正的命令与控制(C2)服务器地址,而不是将地址硬编码在包内。由于区块链数据是公开的,无论后续包体如何修改,攻击者都可以随时更换控制服务器,而开发者无从知晓。
获得C2地址后,木马通过Socket.IO与远程服务器建立连接。操作者随后可以下发指令,收集主机信息、窃取剪贴板内容、移动文件,或者直接在受害者机器上运行任意脚本。这一阶段的设计很像一个功能完备的后门程序,常规的杀毒软件可能因为被篡改的开发工具白名单而放松警惕。
更危险的是它的自我复制能力。恶意代码会向VS Code模块、Cursor编辑器、Discord、GitHub Desktop以及全局的npm命令行工具注入自身副本。这样即使开发者重启计算机或重新打开编辑器,威胁也会随之“复活”。尤其是污染全局npm CLI后,每一条后续的npm命令都有可能重新触发加载器,就像一台被改造过的发动机,每次点火都喷出有毒气体。这种设计让植入物呈现出蠕虫特性:一台被感染的机器极有可能将恶意逻辑扩散到开发者新建或修改的其他包中,进而波及更多不知情的同事与下游用户。
研究团队注意到,活动标签将受害者导向不同的控制主机。针对npm分发的标签A9-0135-3,其通信流量会被路由到一个专用的服务器,用于维持Socket.IO双向通道和上传窃取的文件。此外,一个分阶段的Python辅助脚本会收集浏览器数据、加密钱包扩展以及密码管理器里的敏感信息。这意味着攻击目标不仅仅是代码或系统权限,直接瞄准了开发者的数字资产和身份凭证。
这场攻击的波及范围远远超出单个项目。一旦机器被植入了木马,开发者日常依赖的所有工具——从代码编辑器到Git客户端——都会变成攻击的载体。那些拉取了包含2773预发布版本标识的团队,应当立即将相关机器标记为已受感染,并全面清除威胁。因为攻击者可能已经获取了密钥和令牌,进而渗透到云平台和代码托管账户,复制、篡改甚至删除仓库里的内容。
值得注意的是,通过npm install —ignore-scripts 无视安装脚本的传统防御方法对这次攻击完全无效。恶意代码藏在包体JavaScript文件内部,而不是通过package.json里的脚本来触发。只要包被导入,对应的模块就会执行,整个攻击链顺势启动。这暴露了一个长久以来的盲点:单纯关闭依赖包的声明期脚本,并不能阻止嵌入代码级的供应链污染。
这起事件是开源软件供应链被滥用的又一个典型样本。攻击者越来越倾向于劫持已有一定用户基础的真实项目,而不是创建全新的、名字看起来友好的假包。因为真实项目的信任基础更高,包名容易让开发者放松警惕,同时下游依赖链条也更长,一枚植入物可能沿着依赖树一路蔓延。类似的npm包劫持浪潮已经多次发生,一旦开发者令牌或云服务密钥被盗,攻击者常常能在几分钟内横向移动到CI/CD环境、制品仓库乃至生产环境。
StepSecurity的报告提醒人们,仅靠代码仓库的可视性和简单的安全检查,已经不足以识别这类高级投毒手法。攻击者利用区块链保存动态配置信息、通过修改构建成品绕过源码审计、再借由开发工具的自动更新机制建立持久驻留,整套流程几乎环环相扣。任何引入未经完整分析的外部依赖的组织,都需要重新评估自己的软件供应链防护策略,包括对预发布版本的拉取策略、构建产物的完整性校验,以及对开发人员工作站的行为监控。
对于已经受到影响的项目来说,修复远比清理单个恶意文件复杂。因为木马有能力篡改开发者本地的全局工具链,即便从项目中删除了被污染的包,机器上被改写的VS Code扩展或npm CLI副本仍可能在后续操作中再次植入载荷。最稳妥的做法是将受感染的开发环境视为无法信任,彻底重建系统,并轮换所有曾在同一时间段暴露过的令牌和密钥。
这场以Joyfill包为载体的入侵还未完全扩散,但公开的npm注册表数据已经让安全社区有机会追溯恶意版本的推送时间、受影响的范围,以及它们与过往供应链攻击在手法上的关联。就像一枚投入池塘的石子,涟漪不会立刻平息,被波及的链式影响可能需要数周甚至数月才能完全显现。而它留下的最大教训或许是:在开源的世界里,信任不能只凭包名和下载量,得从构建源头一层一层地核实。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.