yapi token注入漏洞

一、背景

YApi 是一个可本地部署的可视化的接口管理平台。

YApi 在 1.11.0 之前的版本中存在远程代码执行漏洞,因为 base.js 没有正确对 token 参数进行正确过滤,攻击者可通过 MongoDB 注入获取用户 token(包括用户 ID、项目 ID 等),进而使用自动化测试 API 接口写入待命命令,利用沙箱逃逸触发命令执行。

二、补丁分析

https://github.com/YMFE/yapi/commit/59bade3a8a43e7db077d38a4b0c7c584f30ddf8c

yapi token注入漏洞_第1张图片

可以发现,官方仅对token参数的类型做了强制判断进行修复,要求token参数必须为string类型。那么漏洞POC内token参数就应该为json对象来触发。

要进入此函数体内同时需要请求路径含有/api/open/或在openApiRouter列表内。经过排查发现:

‘/api/open/run_auto_test’,

‘/api/open/import_data’,

两条路径由于存在额外的参数校验,token必须为string,所以除这两条路径外的其他openApiRouter均可触发。

let openApiRouter = [
      '/api/open/run_auto_test',
      '/api/open/import_data',
      '/api/interface/add',
      '/api/interface/save',
      '/api/interface/up',
      '/api/interface/get',
      '/api/interface/list',
      '/api/interface/list_menu',
      '/api/interface/add_cat',
      '/api/interface/getCatMenu',
      '/api/interface/list_cat',
      '/api/project/get',
      '/api/plugin/export',
      '/api/project/up',
      '/api/plugin/exportSwagger'
    ];

继续跟踪token的使用

yapi token注入漏洞_第2张图片 

 

可以发现,token参数完整的进入了mogodb的查询。mogo注入与mysql等稍微有所不同,以下文章有所介绍:

从零学习 NoSQL 注入之 Mongodb - 腾讯云开发者社区-腾讯云

三、测试漏洞

 token参数可以进行盲注,当匹配到token时,返回数据。

yapi token注入漏洞_第3张图片

未匹配到时,返回请登录。 

 

你可能感兴趣的:(漏洞分析,yapi)