Atlassian Confluence模板註入代碼執行漏洞分析(CVE-2023-22527)

2024年2月6日 17点热度 0人点赞

Atlassian Confluence是一款企業級協作和文檔管理軟件,由澳大利亞公司Atlassian開發和維護。它提供了一個集成的平臺,使團隊能夠協作創建、共享和管理項目文檔、知識庫、會議記錄等內容。

2024年1月16日,Atlassian 官方披露了CVE-2023-22527 Atlassian Confluence模板註入代碼執行漏洞。攻擊者可在無需登錄的情況下構造惡意請求導致遠程代碼執行。建議盡快修復漏洞。

漏洞復現

1. 靶場環境搭建

使用以下docker-compose.yaml文件搭建靶場環境。

啟動容器後,訪問http://your-ip,出現以下界面說明靶場成功。

2. 漏洞利用

使用BurpSuite發送以下數據包:

根據響應頭可以看到,Confluence成功回顯了/etc/passwd文件信息。

漏洞分析

通過接口地址我們找到了該漏洞使用的模版

首先,需要說明的是這裡使用的是Velocity模版引擎,Velocity 主要用於將模板與數據合並,生成文本輸出。在 Web 開發中,Velocity 常用於生成動態網頁、電子郵件模板、文檔等。它支持在模板中嵌入變量、條件語句、循環結構等,使得模板能夠根據給定的數據動態地生成內容。

在以上代碼的首行中使用了$parameters.label去獲取請求體中label參數的值,當我們傳入label參數後,這行代碼就變成了下面這樣:

在這段代碼中$stack.findValue的功能是通過變量名稱去獲取參數的值。

我們通過findValue調試來理解漏洞利用的過程,我們通過調試找到了該方法的位置:

該方法執行時會進入下方findValue(String expr, boolean throwExceptionOnFailure)方法,並將傳入的label參數交由
this.tryFindValueWhenExpressionIsNotNull方法處理。


tryFindValueWhenExpressionIsNotNull把參數交給tryFindValue處理。

在tryFindValue中,調用getValueUsingOgnl進行處理。

在getValueUsingOgnl中可以看到程序將payload直接傳入到了this.ognlUtil.getValue方法中,該方法會將傳入的參數進行unicode解碼並執行。

一步步跟進後,最終執行payload的方法為compileAndExecute(),在下面斷點調試中可發現,this.expressions.get()方法在解析payload時會將內部的unicode編碼\u0027及單引號等進行處理,使aaa前面的引號與\u0027解碼後的引號閉合,所以能夠順利執行後面註入的代碼,導致攻擊成功。

塞訊驗證規則

針對該漏洞的攻擊模擬已經加入到塞訊安全度量驗證平臺中,您可以在塞訊安全度量驗證平臺中搜索關鍵詞“CVE-2023-22527”或“Atlassian Confluence”獲取相關攻擊模擬驗證動作,從而驗證您的安全防禦體系是否能夠有效應對該漏洞,平臺以業界獨有方式確保您的驗證過程安全無害。

公眾號:塞訊安全驗證