开源无国界? vue-cli、node-ipc 被投毒事件分析

2022-03-16 20:39:21 +08:00
 ssltest

简述

近日我们监测到 Vue.js 生态中的 vue-cli 包遭遇供应链投毒,而被投毒的 node-ipc 包在 npm 上每周下载量超百万,影响非常广泛。

被投毒的情况如下:

(问题组件每周下载量截图)

事件时间线

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 号

当前 npm 已禁止下载包含 peacenotwar 模块的版本,并提示:npm ERR! 451 Unavailable For Legal Reasons

vue 的开发者 sodatea 针对此事件的回应如下:

  1. node-ipc 9.2.2 增加 peacenotwar 模块,该模块会在未经用户同意的情况下写入 WITH-LOVE-FROM-AMERICA.txt 用户的 Desktop 和 OneDrive 文件夹。

  2. vue-cli 已经发布了 4.5.16 和 5.0.3 来锁定依赖版本。

  3. 受影响的用户:在 2022-03-15T05:40:26.758Z 和 2022-03-15T13:17:57.076Z ;期间创建的新项目或者更新了项目依赖的人。

  4. 从俄罗斯和白俄罗斯 IP 删除文件的恶意代码不包含在 9.2.2 版本中

恶意代码分析

我们针对 node-ipc 包中使用的恶意 js 文件进行分析,可以看到多处使用 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 或者参与贡献,我们会挑选一个参与贡献的用户送出机械键盘一份。

参考链接

2284 次点击
所在节点    推广
6 条回复
Vitta
2022-03-16 20:44:03 +08:00
好家伙
villivateur
2022-03-16 20:56:12 +08:00
好家伙,发推广吧 @Livid
Livid
2022-03-16 20:58:09 +08:00
@villivateur 谢谢。这个主题已经被移动。
ssltest
2022-03-16 21:07:59 +08:00
不好意思 发错节点了 下次注意
@Livid
MiketsuSmasher
2022-03-18 09:44:49 +08:00
@ssltest 请问可以转载你的这篇帖子吗?
ssltest
2022-03-21 13:27:52 +08:00
@MiketsuSmasher 可以啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX