一款技术成熟的恶意软件攻击行动在Visual Studio Code(VS Code)应用市场中被曝光,这一事件为开发者群体揭示了供应链风险的全新层面。逆向实验室(ReversingLabs,简称 RL)的研究人员已确认,有19 款恶意扩展程序通过将载荷深藏于依赖文件夹中的方式,成功绕过了标准检测机制。
该攻击行动自 2025 年 2 月起处于活跃状态,并于 12 月 2 日被正式发现。攻击者巧妙结合 **“类拼写欺骗” 策略与隐写术 **,以此感染开发者的终端设备。研究人员指出:“恶意文件盗用一款合法的 npm 软件包来规避检测,并构造了一个包含恶意二进制文件的压缩包,将其伪装成图片文件 —— 也就是一个后缀为 PNG 的文件”。
此次攻击的高明之处,在于利用了 VS Code 扩展程序的组件运行机制。与标准 npm 项目需要实时获取依赖包不同,VS Code 扩展程序会预先打包一个
node_modules文件夹,内含运行所需的全部类库。这种架构虽然能让扩展程序实现 “开箱即用”,却也为攻击者提供了绝佳的藏匿空间。在本次攻击行动中,威胁攻击者盯上了下载量超 90 亿次的高人气软件包 **
path-is-absolute**—— 他们并未篡改 npm 官方仓库中的这款软件包,而是对植入恶意扩展程序内的捆绑版本进行了本地修改。报告指出:“通过这种方式,威胁攻击者将一款广受欢迎且原本安全的软件包,变成了一颗定时炸弹。只要用户启用任意一款恶意扩展程序,这颗炸弹就会立即引爆”。由于开发者与安全工具通常会默认信任
node_modules文件夹的内容,认为其与公开的安全版本完全一致,因此其中的恶意代码得以长时间隐匿。为进一步掩盖踪迹,攻击者还植入了一个名为
banner.png的欺骗性文件。该文件看似是用于扩展程序应用市场展示的标准图片,实则是一个经过武器化改造的压缩包。研究人员证实:“事实证明,这个名为
banner.png的文件根本不是图片。它本质上是一个压缩包,内含两个恶意二进制文件”。完整的攻击链路如下:
- 受感染的依赖包中,
index.js文件会在 VS Code 启动时自动运行; - 该文件触发一个隐藏类,从一个名为
lock的文件中解码出一段 JavaScript 下载器; - 随后,这个下载器会从伪造的 PNG 文件中提取恶意载荷。
恶意软件被释放后,并非直接运行,而是会利用系统自身的工具来实施攻击。解码后的下载器会调用 **
cmstp.exe执行恶意二进制文件 —— 这是微软官方的 “连接管理器配置文件安装程序”,属于黑客常用的“就地取材二进制文件(LOLBIN)”**,可被用于绕过安全防护机制。其中一个二进制文件负责通过模拟按键操作管理执行流程,而另一个则是 **“功能更为复杂的 Rust 木马”**,其完整功能目前仍在研究人员的分析中。
研究人员还指出,尽管大部分恶意扩展程序都利用了
path-is-absolute软件包,但有 4 款扩展程序采用了不同的攻击载体:它们篡改了@actions/io软件包,并将恶意载荷隐藏在 TypeScript 文件(.ts)与源码映射文件(.map)中,而非伪造的图片文件。报告最后总结道:“大多数情况下,用户会想当然地认为这个文件夹中的依赖包代码,与 npm 官方托管的代码完全一致,因此会盲目信任,不会进行任何验证”。这也暴露出当前开发者安全实践中存在的一大关键盲区。








发表评论
您还未登录,请先登录。
登录