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

ohmycodeape 2026-08-19 21:16 1

背景


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


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


问题现象


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


现象原因


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


[email protected]


该包看起来像是 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 等特定情况,防止自动扫描被扫到.


[email protected]


该包看起来像是处理 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 软件包分发的方式加载这类恶意代码,进而还逃避了一般用户对开源项目的源代码检查,是否已经越界了,各位对此怎么看?

最新回复 (56)
  • loading 08-19 21:31
    1
    感谢提醒,我一直用一个几年前的版本,自己深入改了一个完全没外部链接的。

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

    他这个目的估计就是为了检测是否授权
  • ohmycodeape 楼主 08-20 09:28
    18
    @bunai 是的,功能就是做一些授权检查之类的,但是方式感觉有待商榷,毕竟故意做了代码混淆,和项目源代码仓库隔离,通过公共 npm 去分发,感觉是不妥的。
  • MHPSY 08-20 09:42
    19
    naive-ui-admin 可以用 我一直在用这个 感觉还可以 没什么问题
  • ohmycodeape 楼主 08-20 09:43
    20
    @MHPSY 好嘞,我看看。感谢推荐。
  • Sundayz 08-20 09:48
    21
    一直不明白这种 admin 项目为啥能有这么多 star
  • bunai 08-20 09:50
    22
    @ohmycodeape #20 有 ai ,选择一个 ui 库,就直接造,我个人喜欢 naive-ui 这个 UI
  • hosea3000 08-20 09:51
    23
    前 AI 时代用过,早就不用了,代码乱
  • ohmycodeape 楼主 08-20 10:12
    24
    @Sundayz 图省心吧 比如我之前这种想法
  • Wanex 08-20 10:12
    25
    本来就是垃圾项目,这种模板这么多人用吗
  • ohmycodeape 楼主 08-20 10:12
    26
    @bunai 正在这么干了,反正造轮子的过程也是在尝试 ai 编程
  • ohmycodeape 楼主 08-20 10:12
    27
    @hosea3000 看起来这项目是维护挺久了
  • ohmycodeape 楼主 08-20 10:13
    28
    @Wanex 之前搜索的时候感觉推荐的人还不少。
  • pliex 08-20 10:39
    29
    ### 关于 GVA 授权机制及帖子中版本问题的说明



    看到帖子后,作为 GVA 维护者简单回应一下。



    首先,**GVA 的授权检测并非隐藏行为**,项目文档中已经明确说明存在授权检测机制。相关 npm 包本身也是 GVA 项目能力的一部分,同时携带 GVA 授权体系,并非与 GVA 无关的普通 npm 包被偷偷植入所谓“恶意代码”。



    按照 GVA 的授权规则,**正常的个人、非商业使用,且未进行特殊改造的情况下,不会触发未授权通知**。如果确实存在这种情况下仍然弹出未授权提示,欢迎提供具体版本和复现方式,我们会按技术问题进行核查。



    另外需要特别指出一个事实问题:



    **帖子声称自己使用的是 GVA 2.9.0 老版本,但其后面提到的 `vite-vue-path-map` 等依赖,并不存在于其所声称使用的 2.9.0 分支。**



    也就是说,帖子前面以“我使用的是 2.9.0”为前提,后面却将 **main 分支中的依赖和代码分析结果与 2.9.0 混在一起进行描述**。



    不同版本的依赖、构建逻辑和代码本身就可能不同。安全分析最基本的前提就是明确分析对象、版本和 commit ,否则把不同版本的代码混在一起得出结论,本身就不严谨。



    至于帖子提到的授权网络请求,授权服务需要进行授权状态检测,HTTP 服务端能够获得 IP 、User-Agent 等基础请求信息属于正常的网络请求行为,这并不等同于“恶意遥测”或“窃取用户隐私”。相关机制的目的就是授权检测和保护 GVA 自身的知识产权及合法商业权益,**不具备删除用户文件、破坏数据库、破坏项目代码或控制用户服务器等破坏性能力**。



    关于为什么部分授权代码存在混淆,也没有什么需要回避的。现在通过代码搜索、自动化分析甚至 AI ,都可以非常快速地定位授权逻辑并将其删除。如果授权代码完全明文且毫无保护,授权机制很容易被直接绕过。**混淆的目的只是提高授权机制被定位、删除和绕过的成本,并不是为了隐藏恶意行为。**



    同时,帖子已经不只是进行安全分析,而是进一步定位授权机制并公开能够帮助移除授权保护的思路。这种行为客观上会**降低未授权用户绕过授权机制的门槛,并可能实际协助未授权使用**。




    GVA 尊重正常的个人使用、技术研究和公开讨论,也接受对代码的正常审查。



    但对于未经授权的商业使用、恶意绕过授权机制、篡改授权保护,以及通过公开方式实质性协助他人绕过授权保护的行为,我们将依法维护自身合法权益。



    **对于明确的侵权行为,GVA 将依法处理,侵权必究。**
  • qW7bo2FbzbC0 08-20 10:42
    30
    看了作者回复后,更支持 po 主了
  • ohmycodeape 楼主 08-20 10:58
    31
    @pliex
    已在主贴补充回应,另外

    您说: 不具备删除用户文件、破坏数据库、破坏项目代码或控制用户服务器等破坏性能力

    但是弹框内提示: 此项目未授权不得用于公司系统 我方已对本次授权状态异常完成记录,包括当前公开访问域名、授权检测结果及相关部署环境截图

    不知道按您的意思直接截图用户运行部署环境是否属于控制用户服务器的破坏性能力,当然我已补充说明,经我和 ai 一起分析,暂未真的发现真的截图上传的行为,只是您这边的提示语是这样写的.
  • pliex 08-20 11:00
    32
    @ohmycodeape 检测不会泄露您任何隐私,截图是由我们发现疑似商用行为后人工截图。
  • darksword21 08-20 11:02
    33
    在 AI 没来之前我就不知道这种 xxx admin 项目有什么存在的意义
  • ohmycodeape 楼主 08-20 11:03
    34
    @pliex 相关部署环境截图
  • ohmycodeape 楼主 08-20 11:03
    35
    @darksword21 想着省事,结果也没省下事.
  • pliex 08-20 11:04
    36
    @ohmycodeape 相关部署环境不就是您的域名下的项目截图么
  • darksword21 08-20 11:04
    37
    @ohmycodeape #35 我会自己有一些碎片化的 snippet ,如果是新项目会有之前积累的一点点模板
  • ohmycodeape 楼主 08-20 11:05
    38
    @darksword21 嗯 脚手架还是自己搭的顺手
  • ohmycodeape 楼主 08-20 11:07
    39
    @pliex 这个措辞就交给各位评判了.我只是原样发出相关文本.让大家读一读感受一下.
  • hguangzhen 08-20 11:49
    40
    项目作者不太讲道德。npm 分发这种代码、这包名,建议大家以后谨慎使用了
  • Felldeadbird 08-20 11:50
    41
    我有点看的懵,如果 npm 安装没有隐瞒,在程序运行过程加载非公开的加载包,那剩下的问题的是不是项目对于某些包(加载的包会读取敏感信息)的披露不够详尽。所以这才是楼主发的帖子的出发点?
  • ohmycodeape 楼主 08-20 11:52
    42
    @hguangzhen 是的。要小心了。
  • ohmycodeape 楼主 08-20 11:57
    43
    @Felldeadbird 是说作者把搭配自己框架使用的,包含明确混淆注入和授权检测的代码上传到 npm 这种公共的中心上,使其脱离自己框架的源代码库。潜藏起来。并且还占用了这样很迷惑的功能性的包名称。
    npm 态度上不支持此类在包中隐含混淆和代码注入的行为。
    我认为其行为和弹窗的措辞已经会造成用户的不安,所以发出来提醒下和让大家评价下。
  • superrichman 08-20 12:01
    44
    各打 50 大板

    @ohmycodeape github 上面写了要收费的项目有在线验证挺正常的吧。项目协议也不是常见的 GPL MIT 之类的。

    @pliex 你会上传隐私信息进行授权校验应该添加隐私声明文档。你的项目文档里没看到有隐私相关的声明内容。
  • ohmycodeape 楼主 08-20 12:06
    45
    @superrichman 现在的开源协议是最新版改的。之前是 Apache2.0 。我特意找的旧版来使用的。

    另外,如果是跟随源代码项目内的授权检查我没有什么疑问。不管是否混淆之类的。我不安的是它通过一个迷惑性包名将代码通过 npm 这种公共中心去分发。

    近期 npm 供应链投毒事件有好几次了。如果这种仅供自己项目使用的包都占用这种迷惑性包名去分发我认为是不妥当的。npm 也不支持此类行为。
  • ganbuliao 08-20 12:53
    46
    @pliex #29 这不是纯纯 AI 回复
  • msg7086 08-20 13:08
    47
    「开源软件」许可证定义禁止项目限制用户不可在商业环境中使用。
    当项目对非商用和商用规定不同行为时,这个软件就不再是开源软件了。
    比较准确的说法是源代码公开的软件,本质上属于专有的商业软件。
    (比如,如果一个项目用 CC NC-BY 许可证,这个项目就不属于开源软件)
  • ohmycodeape 楼主 08-20 13:36
    48
    @msg7086 专业了。
  • zh3256 08-20 13:37
    49
    对这个项目的印象是: 后端构建生成代码会通过 go env -w 改写用户的 proxy
    https://github.com/flipped-aurora/gin-vue-admin/blob/main/server/main.go#L11-L14
    issue 有人提出,但是作者好像不觉得有啥问题
    https://github.com/flipped-aurora/gin-vue-admin/issues/1026
  • zh3256 08-20 13:38
    50
    不好意思,回复的应该不是作者
  • ohmycodeape 楼主 08-20 13:40
    51
    @zh3256 还真是。
  • NoobPhper 08-20 14:29
    52
    看了下代码 能用这个的 是这个 👍
  • ohmycodeape 楼主 08-20 14:33
    53
    @NoobPhper O(∩_∩)O
  • hihanley 08-20 15:21
    54
    @pliex AI 回复未截图发出 @Livid
  • xXAi 08-20 15:52
    55
    这项目代码看过,没有任何设计、架构。 一堆全局变量,跟玩具似的
  • ohmycodeape 楼主 08-20 15:58
    56
    @xXAi (●ˇ∀ˇ●)好吧。我没认真看。
* 帖子来源V2EX
返回