声明
本篇文章仅用于漏洞复现与技术研究,请勿利用文章内的相关技术从事非法测试,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!!
一、YApi介绍
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
github地址:https://github.com/YMFE/yapi/tree/master
二、漏洞描述
YApi 是一个支持本地部署的可视化接口管理平台。YApi 在1.12.0 之前的版本(目前所有版本)中由于 base.js 没有正确对 token 参数进行正确过滤,导致存在远程代码执行漏洞。攻击者可通过MongoDB注入获取用户 token,其中包括用户ID、项目ID等参数。yapi后台的pre-request和pre-response方法存在缺陷点,通过注入调用自动化测试接口runAutoTest(),进而利用沙箱逃逸触发命令执行。
三、漏洞分析
参考链接(漏洞细节):https://paper.seebug.org/2028/
MongoDB特性注入:https://www.anquanke.com/post/id/250101#h3-4
四、漏洞详情
https://github.com/vulhub/vulhub/blob/master/yapi/mongodb-inj/README.zh-cn.md
五、影响版本
- YApi <
1.12.0
六、漏洞复现
docker 搭建 : https://github.com/fjc0k/docker-YApi
git clone
https://github.com/fjc0k/docker-YApi
cd docker-YApi
vim docker-compose.yml
docker-compose up -d
docker-compose.yml 修改为存在漏洞版本,这里使用的是Yapi 版本: 1.10.2
使用 docker ps
查看环境搭建成功
本地访问网站:http://X.X.X.X:40001
默认账密如下:admin@admin.com:ymfe.org / admin@docker.yapi:adm1n
POC:https://github.com/vulhub/vulhub/blob/master/yapi/mongodb-inj/poc.py
测试结果
七、修复建议
一、版本升级
目前官方已有可更新版本,建议受影响用户更新至 1.12.0
及以上版本。
https://github.com/YMFE/yapi/releases/tag/v1.12.0
注:
1、YApi 1.11.0版本已修复Mongo注入获取Token的问题,导致攻击者无法在未授权的情况下利用此漏洞。
2、在YApi 1.12.0的版本更新中,仅默认禁用了Pre-request和Pre-response脚本功能,使得此漏洞在默认配置下无法利用。
二、缓解措施
1、在业务允许的情况下,建议将YApi部署在内网,禁止外网访问。
2、修改默认token加密的盐:
编辑项目根目录中的config.json,添加"passsalt":“任意随机值”,如:
{
…
“passsalt”:“this_is_a_test”
…
}
保存,重启YApi服务即可。