开源项目 gin-vue-admin 借用 npm 分发恶意遥测代码

10 小时 17 分钟前
 ohmycodeape

背景

最近想开发一些个人的小项目,试试 AI 编程.不想在基础的用户注册和权限管理之类的地方浪费时间所以就想找一个合适的 admin 项目来开箱即用.最后找到了 gin-vue-admin 这个项目,下面简称 gva,由于检查其 github 仓库后发现最新版本已经更改了开源协议,新的协议我不太熟悉没有看懂.所以特意找了仍是 Apache2.0 协议的 2.9 版本来使用.

项目地址: https://github.com/flipped-aurora/gin-vue-admin 该项目作者应该也在论坛内,之前检索此类项目时看见过作者发文推荐.

问题现象

实际使用的过程中,明明是个人使用,却遇见了好几次偶尔弹出一个全屏幕的大框提示我未获得授权,需要购买授权的情况.导致使用体验很不好.所以就借助 AI 一起进行了一下分析.

现象原因

省略排查过程,直接说结论,该项目依赖中包含以下两个包,包内存在恶意遥测代码,具体如下:

vite-auto-import-svg@2.9.8

该包看起来像是 SVG 自动导入与图标处理,实际上包含一大段混淆过的注入代码,构建过程中会读取 global["gva-project-name"] global["gva-secret"] 变量,生成一个名为 svg-transform 的插件,还会向整个页面注入不可见的一个图片延迟远程加载 https://plugin.gin-vue-admin.com/api/shopImage/view?name=lock.svg 这个图片地址.如果因为什么原因导致加载失败,则会呈现出大范围的一个弹框提示购买授权,而对方服务器就可以截获我的出口 ip,ua 甚至 reffer 等信息.该段注入逻辑还会主动跳过 localhost,HeadlessChrome,PhantomJS 等特定情况,防止自动扫描被扫到.

vite-check-multiple-dom@0.2.2

该包看起来像是处理 Vue Transition 多根节点校验的,但是实际上该包也包含混淆过的代码,检测上方生成的插件 svg-transform 是否存在,在代码构建阶段遍历插件列表,如果有人发现了上方那个包的不对劲之处移除了上方的包,则该包会加载恶意代码直接让输出的 index.html 文件变成空字符串导致构建完后不能用.

其他包

其他我没有深入分析但是也不太对劲的包还有 vite-vue-path-map vite-utils-svg-icon 等,不确定是否有问题.

奇怪之处

以上两个包搭配默契,构成对于代码开发和运行环境的检测和运行干扰,但是以上两个包并非同一个作者维护.第一个包的作者是 flipped-aurora,是 gva 项目的开发作者.第二个包的作者是 azir-arc,无法确认二者是否为同一个人但是这两个包存在很明显的搭配使用的情况.

三方检测

https://socket.dev/npm/package/vite-auto-import-svg

https://socket.dev/npm/package/vite-check-multiple-dom

这个检测网站对两个包分别给出了橙色和红色的提醒

结论

该项目存在通过 npm 加载恶意软件包的方式来遥测用户信息,判定是否存在商业侵权行为.从该项目近期新的大版本变更了开源协议的现象也可以发现作者在积极寻求商业化,但是通过公开的 npm 软件包分发的方式加载这类恶意代码,进而还逃避了一般用户对开源项目的源代码检查,是否已经越界了,各位对此怎么看?

1032 次点击
所在节点    信息安全
16 条回复
loading
10 小时 2 分钟前
感谢提醒,我一直用一个几年前的版本,自己深入改了一个完全没外部链接的。

脚手架还是要自己费点心的。
YEX1024
9 小时 51 分钟前
这个项目我记得字段大小写混用,说什么系统字段大写开头,强迫症很难受
ohmycodeape
9 小时 49 分钟前
@loading 是的 我是前几天发现的不太对劲 借助 ai 研究了几天 想试试 ai 开发 变成了 ai 分析了
ohmycodeape
9 小时 48 分钟前
@YEX1024 那倒确实没注意 其实本来不想读代码的 就是想找个项目框架省点心基础的东西自己不弄了 没想到这个情况
YEX1024
9 小时 47 分钟前
@ohmycodeape 我开始学 go 的时候准备参考这个项目的,后面自己用 chi+sqlc 搭了个简单的
ohmycodeape
9 小时 46 分钟前
@YEX1024 最后发现还是自己搭出来的顺手是吧
YEX1024
9 小时 42 分钟前
@ohmycodeape 学习嘛,就是自己造轮子
ohmycodeape
9 小时 40 分钟前
@YEX1024 确实。我也参考你的再看看。成品的还有点不太敢用了。
YEX1024
9 小时 31 分钟前
@ohmycodeape 我感觉我这个不太适合参考,,自己用都有点偏门 你可以看看 https://git.ua42.com/beggin/blog-server
ohmycodeape
9 小时 27 分钟前
@YEX1024 哈哈,get 。先瞄瞄。
nrtEBH
9 小时 23 分钟前
公司 IT 已经禁止使用 npm 公共源了
ohmycodeape
9 小时 21 分钟前
@nrtEBH 最近 npm 出事好像不少。凭证泄露导致供应链新版本恶意投毒那种。
uxff
9 小时 20 分钟前
👍
GeruzoniAnsasu
9 小时 6 分钟前
有 LLM 之后这种脚手架已经完全没有使用的必要了。而且用别人写的代码总归有很多闹心的问题,何况 gva 的开发团队自己水平也就一般,你遇到问题还要给上游修 bug 更心力交瘁
ohmycodeape
9 小时 3 分钟前
@GeruzoniAnsasu 本来觉得用户 菜单 权限这些基础的东西连开发加测试验证,是不是也比较消耗时间。
sholmesian
7 小时 2 分钟前
刚把项目里的这些组件清理了一遍,感谢🙏

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

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

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

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

© 2021 V2EX