
安全研究人员在 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 根本就不是图像文件"。

遭篡改的 path-is-absolute npm 包 index.js 文件被注入恶意代码 | 图片来源:ReversingLabs
攻击链分析:多阶段载荷投放
当 VS Code 启动时,被污染的依赖项 index.js 文件会执行,触发隐藏类从名为 lock 的文件解码 JavaScript 投放器。该投放器随后从伪装的 PNG 文件中提取有效载荷。恶意软件不仅会运行,还通过系统自带工具 cmstp.exe(微软连接管理器配置文件安装程序)执行二进制文件——这种被黑客滥用的"无文件攻击"技术(LOLBIN)能有效绕过安全控制。
多变的攻击变体
虽然多数恶意扩展针对 path-is-absolute 包,但有 4 款扩展采用不同攻击向量:修改 @actions/io 包,并将载荷隐藏在 TypeScript(.ts)和源码映射(.map)文件中。研究报告指出:"开发者通常不会验证 node_modules 中的依赖代码是否与 npm 官方版本一致,这种盲目信任构成了当前开发安全实践中的重大盲区"。
参考来源:
VS Code Supply Chain Attack: 19 Extensions Used Typosquatting & Steganography to Deploy Rust Trojan
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



