背景概述
Spring的生態很優秀,而使用Spring Boot的開發者也比較多。
Actuator是Spring Boot提供的對應用系統的監控和管理的集成功能,可以查看應用配置的詳細信息,例如自動化配置信息、創建的Spring beans信息、系統環境變量的配置信以及Web請求的詳細信息等。在 Actuator 啟用的情況下,如果沒有做好相關權限控制,非法用戶可通過訪問默認的執行器端點(endpoints)來獲取應用系統中的監控信息。常常使用不當或者一些不經意的疏忽,可能造成信息泄露等嚴重的安全隱患。
實際挖掘 actuator 配置不當的漏洞分如下兩步:
- 判斷和識別測試項目的web 應用采用的框架為 springboot 框架;
- 嘗試進行執行器端點路徑的枚舉(本文后面會有寫到),並根據實際情況加以利用
一、如何識別Spring Boot
通常有兩個方法:
- 1.訪問WEB頁面,觀察地址欄或者標簽頁前面的icon圖標,是否為綠色小樹葉(開發者沒有修改的情況下,spring 框架默認為該圖標)
- 2.構造錯誤的目錄或者文件名等,讓 Springboot 框架產生默認的報錯頁面(如開發人員沒有修改Springboot框架的默認400系列、500系列的報錯頁面,會報錯如下(也被稱為白標簽報錯頁),到這里基本可以確定Spring Boot框架。
綜合利用:
在實際中可以綜合兩個方法一起進行判斷,比如先觀察有無綠色樹葉圖標。
嘗試訪問不同的目錄,嘗試在不同目錄下400系列或500系列的報錯,觀察是否出現 Whitelabel Error Page 提示信息。當確定使用了springboot 框架后,就可以嘗試進行第二步的端點路徑的枚舉了
二、端點路徑的枚舉
通過手動或者腳本來枚舉測試網站的所有父目錄和子目錄,然后用腳本對前一步的每個目錄進行探測,確定是否存在 actuator 執行端點的路徑。
Actuator 提供的執行器端點分為兩類:原生端點和用戶自定義擴展端點
原生端點主要包括:
路徑 | 描述 |
---|---|
/autoconfig | 提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過 |
/beans | 描述應用程序上下文里全部的Bean,以及它們的關系 |
/env | 獲取全部環境屬性 |
/env/ | 根據名稱獲取特定的環境屬性值 |
/dump | 獲取線程活動的快照 |
/health | 報告應用程序的健康指標,這些值由HealthIndicator的實現類提供 |
/info | 獲取應用程序的定制信息,這些信息由info打頭的屬性提供 |
/metrics | 報告各種應用程序度量信息,比如內存用量和HTTP請求計數 |
/shutdown | 關閉應用程序,要求endpoints.shutdown.enabled設置為true |
/trace | 提供基本的HTTP請求跟蹤信息(時間戳、HTTP頭等) |
/heapdump | 返回一個GZip壓縮的JVM堆dump |
需要注意
有些程序員會自定義/manage、/management 、項目App相關名稱為 spring 根路徑
Spring Boot Actuator 1.x 版本默認內置路由的起始路徑為 / ,2.x 版本則統一以 /actuator 為起始路徑
Spring Boot Actuator 默認的內置路由名字,如 /env 有時候也會被程序員修改,比如修改成 /appenv
對於尋找漏洞比較重要接口的有:
-
/env
、/actuator/env
GET 請求
/env
會直接泄露環境變量、內網地址、配置中的用戶名等信息;當程序員的屬性名命名不規范,例如 password 寫成 psasword、pwd 時,會泄露密碼明文;同時有一定概率可以通過 POST 請求
/env
接口設置一些屬性,間接觸發相關 RCE 漏洞;同時有概率獲得星號遮掩的密碼、密鑰等重要隱私信息的明文。 -
/trace
、/actuator/httptrace
一些 http 請求包訪問跟蹤信息,有可能在其中發現內網應用系統的一些請求信息詳情;以及有效用戶或管理員的 cookie、jwt token 等信息。
-
/refresh
、/actuator/refresh
POST 請求
/env
接口設置屬性后,可同時配合 POST 請求/refresh
接口刷新屬性變量來觸發相關 RCE 漏洞。 -
/restart
、/actuator/restart
暴露出此接口的情況較少;可以配合 POST請求
/env
接口設置屬性后,再 POST 請求/restart
接口重啟應用來觸發相關 RCE 漏洞。 -
/jolokia
、/actuator/jolokia
可以通過
/jolokia/list
接口尋找可以利用的 MBean,間接觸發相關 RCE 漏洞、獲得星號遮掩的重要隱私信息的明文等。
三、漏洞的利用
在上一步,如果確定發現了 actuator 的配置漏洞,如需要證明或繼續利用該漏洞挖掘其他漏洞,進而組合利用等等,就需要進行其他操作,總結幾個常見利用場景
以下幾個漏洞屬於配置不當引起路由暴露。
1.讀取用戶的認證字段獲取敏感信息
可以直接嘗試訪問網站目錄下的/trace 路徑,讀取用戶認證字段信息,比如在 trace 路徑下,會有用戶的敏感信息,可能包括 authorization(token、JWT、cookie)等字段,那么就可以利用泄露的認證信息,登陸自己的賬戶后,替換 JWT,token 字段繼續獲取其他用戶的信息,這些信息足以影響其他用戶,
2.數據庫賬戶密碼泄露
Actuator作為Spring Boot提供的對應用系統的監控和管理的集成,會監控 mysql之類的數據庫服務,那么通過監控信息有可能拿下 數據庫;直接通過訪問其/env 路徑獲取數據庫配置信息,比如數據庫的用戶名及密碼
3.外帶明文
直接訪問/actuator/,/actuator/env這些執行器端點路徑,可能會看到大量接口和敏感信息,如mysql安裝路徑等等,脫敏之后的password等待。
4.heapdump后台賬號密碼
嘗試訪問網站的/actuator/heapdump接口,下載返回的GZip 壓縮 堆轉儲文件,使用通過VisualVM/Android studio 加載,通過泄露站點的內存信息,查看到后台賬號信息和數據庫賬號
5.git 項目地址的泄露
一般在在/health 路徑,比如直接去訪問項目的 health 路徑,可探測到站點 git 項目地址,查看源碼:
安全修復措施建議
引入 security 依賴,打開安全限制並進行身份驗證;同時設置單獨的 Actuator 管理端口並配置不對外網開放。
比如,Spring Boot提供了安全限制功能。比如要禁用/env接口,則可設置如下:
endpoints.env.enabled= false
最后,推薦一個Spring Boot相關漏洞學習,利用方法合集,作為黑盒安全評估指南,非常詳細