CVE-2022-32177 Gin-Vue-Admin 跨站点脚本漏洞
项目介绍
Gin-Vue-Admin是一个使用gin+vue进行极速开发的全栈开发基础平台,集成jwt鉴权,权限管理,动态路由,显隐可控组件,分页封装,多点登录拦截,资源权限,上传下载,代码生成器,表单生成器,chatGPT自动查表等开发必备功能。
项目地址
https://github.com/flipped-aurora/gin-vue-admin
https://www.gin-vue-admin.com/
漏洞概述
gin-vue-admin后台文件上传的fileUploadAndDownload/upload方法存在跨站点脚本漏洞,该漏洞源于文件上传时前台common.vue中的checkFile 函数仅判断了file.type的值是否为image/jpeg或 image/png,并未对文件后缀进行安全效验,当管理员用户查看上传的文件时,低权限攻击者将可以访问管理员的 cookie,从而导致管理员帐户被接管。
影响版本
有待进一步核实
CVE和 whitesource 提供:v2.5.1 至 v2.5.3beta(仅供参考)
环境搭建
本次漏洞分析采用windwos环境,如果想使用linux环境复现的读者请参考官网文档:https://www.gin-vue-admin.com/guide/deployment/docker_develop.html
①:下载受影响版本(v2.5.1)的项目代码到本地
②:前端环境搭建
# 进入web文件夹
cd web
# 安装依赖
npm install
# 启动web项目
npm run serve
③:后端环境搭建
# 进入server文件夹
cd server
# 使用 go mod 并安装go依赖包
go mod tidy
# 运行
go run main.go
④:访问web页面进行数据库初始化
http://localhost:8080/#/login
漏洞分析
①:定位受影响的文件和函数信息
首先来看CVE漏洞库中的描述信息:
两个有价值的参考链接
链接1:https://github.com/flipped-aurora/gin-vue-admin/blob/v2.5.3beta/web/src/components/upload/common.vue#L29-L37
common.vue文件中的checkFile 函数仅判断了file.type的值是否为image/jpeg或 image/png,并未对文件后缀进行安全效验。
链接2:https://www.mend.io/vulnerability-database/CVE-2022-32177
mend漏洞库提供了完整的漏洞详情。
②:浏览器登录系统,找到相对应的接口并获取数据包
web页面如下:
数据包如下:
漏洞复现
直接按照whitesource提供的步骤进行。
①:从 Web 浏览器访问应用程序并以管理员用户身份登录。
②:打开私人窗口并以普通(低权限)用户身份登录。(注意,③至均为普通低权限用户操作)
③:转到个人信息,单击个人资料图片,然后单击“正常上传”按钮。
④:使用 PoC 代码部分中的代码创建一个 takeover.png 文件。
⑤:使用 python 创建 HTTP 服务器 (python3 -m http.server 3333)
⑥:选择takeover .png 进行头像上传并拦截请求。
⑦:将takeover.png 的名称更改为takeover.html 并转发请求。
⑧:从管理员帐户转到媒体库(上传和下载)并打开 takeover.html(“在新选项卡中打开图像”)。
这将触发 takeover.html 中的 XSS 负载,并将管理 cookie 发送到攻击者的服务器,从而导致管理员帐户被接管。