周下载超过700万的NPM包’ua-parser-js’遭投毒攻击

1. 攻击事件概览

  • 北京时间2021-10-22周五晚20:15,一个周下载量超过700万的npm包ua-parser-js 遭到投毒攻击,疑似维护者账号由于密码泄露或者被爆破而发生劫持。
  • 攻击者同时发布了三个新版本0.7.290.8.01.0.0,每个版本都包含了在安装时会触发下载远程恶意脚本的代码。在恶意版本发布的四个小时后,该包作者进行了迅速响应,将原先恶意的版本移除,并发布了相对应的三个新的修补版本。

  • 从攻击发生到应急响应过去了4个小时,恶意版本迅速的移除避免了更多的恶性影响发生,但在这四个小时中安装过该包的用户都有可能受到影响。
  • 此次受到攻击的UAParser.js库是一个从 User-Agent中检测浏览器、引擎、操作系统、CPU以及设备的类型的javascript库。在Node.js生态中这个包被将近1000个其他第三方包依赖,造成的影响极为广泛。

2. 恶意分析

  • 攻击事件发生后,奇安信星图实验室即对该恶意攻击进行了分析。我们发现在攻击者发布的恶意版本中,首先修改了package.json 中的scripts字段,使得该包在安装前即可触发恶意脚本的运行。

  • 在恶意版本中更新了三个新文件,分别是preinstall.jspreinstall.batprenstall.sh,其中第一个文件即上一步中需要在安装前执行的js文件,其具体内容是: 判断系统平台为linux还是windows,如果是Windows平台即执行bat脚本,Linux平台执行shell脚本。此处值得注意的是,在windows平台下,该脚本还会下载一个木马组件,虽然脚本中下载的挖矿程序难以被windows defender发现,但是这个木马组件会被检测并阻止。

  • shell脚本和bat脚本的内容一致,都是从http://159.148.186.228/download/jsextension下载一个名为jsextension的可执行文件,然后使用该程序在机器上运行挖矿服务。


3. 依赖分析

  • 基于天问软件空间测绘系统的监测数据,我们构建了包间依赖关系的知识图谱。在该图谱中,我们针对ua-parser-js的上一个正常版本0.7.28 进行了具体的依赖分析: (下图仅展示部分直接关系,最中心为ua-parser-js@0.7.28,最外围绿色为直接依赖的包,中间诸多橘黄色点为详细依赖的版本情况)

- 在nodejs生态中,共有780包中的17087个版本直接依赖于`ua-parser-js@0.7.28`。
- 如果将依赖扩展到一度的间接依赖,受到影响的版本数量将上升至110750,影响范围扩大了将近650%。(下图仅展示部分间接依赖的情况)
    

  • 如果这些包中有一些恰好在恶意版本未修补的那4小时中更新了自己的依赖或重新安装了依赖,那都有可能会受到这次投毒事件的影响。

4. 安全建议

此次投毒事件涉及到的包’ua-parser-js’影响范围极为广泛,虽然修复响应很快,但在投毒到响应前的四个小时内,仍有被攻击的风险。基于以上信息,我们给出以下几点建议:

对于开发者:

  • 如果是nodejs生态中的包维护者,请开启2FA认证
  • 请注意账号密码强度,以及切勿多个网站重复使用相同密码

对于用户:

  • 检查在2021年10月22日晚20:15 至10月23日0:26 期间,是否安装或更新过ua-parser-js包。
  • 检查是否有组件依赖于该包。
  • 检查是否有主机运行异常进程。

相关文章

https://www.bleepingcomputer.com/news/security/popular-npm-library-hijacked-to-install-password-stealers-miners/