最近两个月,蠕虫程序开始出现在NPM包仓库、Open VSX以及Visual Studio Code(VS Code)扩展市场中,如今又出现相关攻击事件,引发多家安全厂商的高度关注。
安全厂商SourceCodeRED、Endor Labs和Sonatype本周发出警告,他们在NPM仓库中发现了一个名为IndonesianFoods的蠕虫程序,该恶意软件已通过数万个包进行传播,且相关包的数量正在呈指数级增长,目前可能已突破十万大关。
但与此前出现在NPM仓库中的蠕虫不同,IndonesianFoods似乎并不会对下载安装的开发者发动攻击,没有植入后门,也没有窃取开发环境中的凭证或密码,这一特点令人费解。然而,如此大规模的恶意包出现在仓库中,且攻击行为高度自动化,这种状况可能导致广泛的供应链破坏。
较早发出警告的SourceCodeRED指出,该蠕虫至少在NPM仓库上架了7.8万个包,影响了11个NPM包开发者账号,相关攻击已持续超过两年。目前该公司已公开受感染包的清单,供开发者核对,并陆续发现55个NPM账号被用于此次蠕虫攻击。
SourceCodeRED提到,该活动有几个特殊之处:首先,这是一场长期持续的行动,采用一致的命名模式,并使用非典型的内部术语和命令,而非简单的随机攻击。其次,攻击者使用了至少7个账号分散活动,使得检测和清除变得更加困难。
更令人震惊的是,攻击者平均每7秒就上架一个恶意包。他们通过随机组合印尼语人名与食品术语来生成包名,修改package.json文件强制将包设为公开,分配随机版本号,然后使用命令上传至NPM,并不断重复这一流程。
另一家安全厂商Endor Labs的调查指出,这批恶意包最早可追溯至去年4月曝光的攻击事件。攻击者大量上传无用包,疑似是为了获取开源项目贡献者的Tea加密货币奖励。实际上,这些包中的恶意代码并不会运行。根据Endor Labs的分析,这些包都具备标准的Next.js项目结构,包含正确的配置文件和正常的依赖包,恶意代码隐藏在未被引用的脚本中,且该脚本在包安装过程中不会自动执行,也不会在部署完成后启动。换言之,这些包中的恶意成分实际上并未生效。
然而,这些包的危险之处在于,它们不仅通过SourceCodeRED所描述的手法自我复制和上传,还会相互引用,成为彼此的依赖包,形成一个自我复制的包网络。只要用户安装其中一个包,NPM就会自动拉取整个依赖树。如果每个包都包含8到10个依赖包,那么在安装过程中就可能一次性下载超过100个垃圾包,这将大幅增加NPM的带宽负担,后续清理恶意包的难度也会显著上升。
Sonatype也对此次事件展开追踪,该公司检测到上架的恶意NPM包已超过10万个,并指出他们在两个月前曾发现一个几乎相同的包——fajar-donat9-breki,具有相同的自我传播逻辑、结构和行为,唯一的区别在于它并未像IndonesianFoods那样大规模扩散。虽然该包未展开攻击活动的原因尚不明确,但极有可能是攻击者的事前演练,表明相关活动早有预兆。
值得注意的是,尽管三家安全厂商均指出,此次攻击的首要目标是NPM包仓库和开源生态,开发者安装这些垃圾包并不会直接导致开发环境受损,但他们认为,攻击者未来仍可能通过版本更新的方式,对开发者发起进一步攻击。