漏洞攻擊
揭露 Atlassian Confluence 的 CVE-2023-22527 漏洞 了解及防範其遠端程式碼執行風險
本文探討 CVE-2023-22527 漏洞,這是存在於 Atlassian Confluence 當中的一個重大漏洞,CVSS 評分高達滿分 10 分,可讓駭客從遠端執行程式碼。
Object-Graph Navigation Language (物件圖瀏覽語言,簡稱 OGNL) 是許多網站應用程式都會用到的一個開放原始碼元件,曾在 Equifax 對 Apache Struts 框架的知名攻擊中扮演重要角色,因而受到關注。但最近,一個新的 Atlassian Confluence 重大漏洞:CVE-2023-22527 又再次讓 OGNL 成為惡意活動的利用對象。依據 Common Vulnerability Scoring System (CVSS) 評分系統,該漏洞為最嚴重等級的 10 分,屬於一種遠端程式碼執行 (RCE) 漏洞。
CVSS 對此漏洞的評分如下:CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
駭客可經由此漏洞攻擊另一個存在於舊版 Confluence Data Center 與 Server 中的範本注入漏洞,就能在受影響的執行個體上執行遠端程式碼。根據非營利資安機構 Shadowserver 在一則 Twitter 貼文中指出,有 600 個 IP 位址被發現嘗試了數千次 CVE-2023-22527 漏洞攻擊。
Confluence Data Center 與 Server 最新的官方支援版本 (也就是 8.5.4 版) 已經透過版本定期更新有效解決了這個漏洞。此外,新推出的 8.5.5 版也針對此漏洞提供了完整的防範。強烈建議使用者應更新到最新版本來獲得最大防護。
受影響的版本
根據廠商的公告,CVE-2023-22527 漏洞影響了以下 Confluence Data Center 與 Server 版本:
產品 | 受影響的版本 |
Confluence Data Center 與 Server |
|
此漏洞目前已知並無替代解決方式,要矯正這個漏洞,請將每個受影響的已安裝產品更新到以下修正後版本:
- Confluence Data Center 與 Server – 8.5.4 (LTS)
- Confluence Data Center – 8.6.0 或更新版本 (僅 Data Center) 與 8.7.1 或更新版本 (僅 Data Center)
技術細節
OGNL 是一種表達式語言,用於建立伺服器端範本,網站應用程式經常使用這類範本在網頁和電子郵件當中嵌入動態內容。各種不同的範本引擎 (如 FreeMarker、Velocity 或 Thymeleaf) 都可以用來產生這類範本。
範本注入攻擊的發生情況是,使用者輸入內容的淨化 (sanitization) 做得不確實,進而導致後續處理不當。不過,目前已發現 Confluence 當中的某些範本檔案將其接受的參數未經淨化就直接傳給可能有危險的對象 (sink)。例如,其中一個這樣的檔案是 confluence/template/xhtml/pagelist.vm,它接受 #set ($pageList = $stack.findValue(“$parameters.pages”)) 作為參數 (參見圖 1)。
CVE-2023-22527 漏洞是在 /confluence/template/aui/text-inline.vm 端點內被發現 (圖 2)。該檔案會接受 #set ($pageList = $stack.findValue("$parameters.pages")) 這個請求,此檔案目前已經從 Confluence 最新版本當中移除。在 Confluence 當中,「.vm」檔案是使用 Velocity 範本語言所產生的範本。負責管理 .vm 檔案的主要是 ConfluenceVelocityServlet 類別,此 servlet 的工作是接收和處理來自瀏覽器發送的請求。

根據其他研究人員的報告與我們自己的分析,我們發現 $stack.findValue 這個函式 (圖 2) 有可能就是注入的源頭。請求的「label」參數數值,直接被傳進了 $stack.findValue 當中,從這一點就能斷定該情況應該存在著範本注入漏洞。研究發現,只要跳脫 getText 函式呼叫然後注入惡意的 OGNL 就能開啟遠端程式碼執行之門。
進一步分析
案例 1
在 #request 中發現了 .KEY_velocity.struts2.context 鍵值。使用以下表達式:#request['.KEY_velocity.struts2.context'].internalGet('ognl') 就能將存取權限授予 org.apache.struts2.views.jsp.ui.OgnlTool 類別,然後呼叫 Ognl.findValue(String, Object) 方法。
漏洞攻擊程式碼:
#request.get(.KEY_velocity.struts2.context).internalGet(ognl).findValue(#parameters.poc[0],{})&poc=@org.apache.struts2.ServletActionContext@getResponse().setHeader('Cmd-Ret',(new freemarker.template.utility.Execute()).exec({"id"}))
案例 2
物件 #request[‘.freemarker.TemplateModel’] 剛好是一個 org.apache.struts2.views.freemarker.ScopesHashModel 的實體。它可用來存取 org.apache.struts2.views.jsp.ui.OgnlTool 類別,然後呼叫 Ognl.getValue() 方法。此外,Execute 類別可讓 FreeMarker 使用 exec() 來執行外部指令。
漏洞攻擊程式碼:
#request[‘.freemarker.TemplateModel’].get(‘ognl’).getWrappedObject().findValue(‘(new freemarker.template.utility.Execute()).exec({“whoami”})’, {})
攻擊請求
攻擊請求在 exec() 函式中輸入了 id 這個指令 (參見圖 3)。在前述兩個案例中,攻擊程式碼都使用 whoami 作為指令。當該請求發送成功時,伺服器的回應將包含使用者識別碼 (uid)、群組識別碼 (gid) 以及 Confluence 伺服器上的群組。

結論
CVE-2023-22527 漏洞目前仍是一個駭客廣泛用來從事惡意活動的漏洞,因此對全球企業都是一項重大的資安風險。建議所有 Atlassian Confluence 的使用者都應立即修補自己的伺服器來防範此攻擊的相關風險。此外,採用一套像 Trend Vision One™️ 這樣資安解決方案,也可協助企業守護自己的環境,不但能防範駭客,還能防範本文談到的攻擊。
Trend Vision One™ – Endpoint Security 可藉由下列深層封包檢查 (DPI) 規則來防範利用前述漏洞的威脅:
- 1011954 - Atlassian Confluence Data Center and Server Template Injection Vulnerability (CVE-2023-22527)
TippingPoint 也針對這個漏洞發布了一個 Customer Shield Writer (CSW) 檔案供客戶從 Threat Management Center (TMC) 下載。以下是適用的規則:
- 43721 - HTTP: Atlassian Confluence Data Center and Server Template Injection Vulnerability
Trend Micro Cloud One – Workload Security 可協助保護虛擬、實體、雲端及容器等各式環境,並藉由以下規則來防範這項威脅:
- 1011954 - Atlassian Confluence Data Center and Server Template Injection Vulnerability (CVE-2023-22527)
Trend Micro Deep Discovery Inspector 客戶可使用以下規則來保護自己:
- DDI RULE 4990 - CVE-2023-22527 - Atlassian OGNL Injection Exploit - HTTP (Request)