简述
近日我们监测到 Vue.js 生态中的 vue-cli 包遭遇供应链投毒,而被投毒的 node-ipc 包在 npm 上每周下载量超百万,影响非常广泛。
被投毒的情况如下:
- vue-cli是Vue.js 开发的标准工具,该工具被广泛应用于vue的快速开发
- 其依赖的node-ipc是用于本地和远程进程间通信的一个js模块,也用于支持linux,windows,mac等系统中的socket通信。
- node-ipc包的作者近期在node-ipc的10.1.1-10.1.2版本添加了恶意JS,该JS会修改俄罗斯和白俄罗斯用户的所有文件为❤️,但不到24小时后又删除该恶意JS,添加会在用户桌面创建反战宣传标语的peacenotwar模块。vuejs的团队在发现node-ipc添加了peacenotwar模块后锁定了vue-cli依赖的node-ipc版本为9.2.1,研究人员随后又发现node-ipc的作者此前添加的恶意JS存在于node-ipc旧版本中。
(问题组件每周下载量截图)
事件时间线
3月7号
开发者RIAEvangelist在node-ipc包中添加名为ssl-geospec.js的恶意JS文件,将node-ipc的版本号更新为10.1.1
3月8号
删除ssl-geospec.js该文件,版本号更新为10.1.3
3月9号
开发者RIAEvangelist在node-ipc包中添加peacenotwar模块,该模块会在桌面静默添加反战宣传文件
3月15号
有开发者在论坛中反馈构建过程中发现被创建反战标语文件
3月15号
Vue-cli发布5.0.3版本,在新版本中锁定vue-cli依赖的node-ipc版本为9.2.1
研究人员分析发现node-ipc的作者不只添加了反战标语,还在旧版本10.1.1-10.1.2中添加了恶意JS文件删除俄罗斯和白俄罗斯用户文件
3月16号
vue的开发者sodatea针对此事件的回应如下:
node-ipc
9.2.2 增加peacenotwar
模块,该模块会在未经用户同意的情况下写入WITH-LOVE-FROM-AMERICA.txt
用户的Desktop和OneDrive文件夹。- vue-cli已经发布了 4.5.16 和 5.0.3 来锁定依赖版本。
- 受影响的用户:在
2022-03-15T05:40:26.758Z
和2022-03-15T13:17:57.076Z
;期间创建的新项目或者更新了项目依赖的人。 - 从俄罗斯和白俄罗斯 IP 删除文件的恶意代码不包含在 9.2.2 版本中
恶意代码分析
我们针对node-ipc包中使用的恶意js文件(node-ipc/ssl-geospec.js at 847047cf7f81ab08352038b2204f0e7633449580 · RIAEvangelist/node-ipc · GitHub)进行分析。
可以看到多处使用base64编码对行为意图进行隐藏
远程API地址解码为
https://api.ipgeolocation.io/ipgeo?apiKey=ae511e1627824a968aaaa758a5309154
使用https加载远程API
解密后的字符串,可以看出c为国家,e为俄罗斯,i为白俄罗斯,其他为文件路径
判断是否为俄罗斯或白俄罗斯,将结果注册为a
如果是则执行h函数
h函数递归爬取指定目录,将所传入的路径中的文件替换为base64编码的4p2k77iP,而其解码后为❤️
针对企业的一点建议
- 开源不等于可信,企业需要针对软件供应链建立动态管理机制,及时发现并响应其中可能的风险。
漏洞检测及修复
关于该漏洞的检测策略已在墨菲安全的所有工具产品中上线,您可以免费安装使用墨菲安全的JetBrains IDE插件、CLI客户端等对你的项目进行检测,并一键修复。
- 产品邀请注册: https://www.murphysec.com/register?invite_code=onkXXo
- 开源仓库: https://github.com/murphysecurity
如果你觉得这个工具对你有用,可以star、提issues或者参与贡献,我们会挑选一个参与贡献的用户送出机械键盘一份。
参考链接
https://github.com/vuejs/vue-cli/issues/7054
https://github.com/RIAEvangelist/node-ipc/issues/233
作者:wochicheng 日期:2022年3月16日