JBOSS AS 5.x/6.x 反序列化命令執行漏洞(CVE-2017-12149)
1. 漏洞描述
- 漏洞描述:該漏洞爲 Java反序列化錯誤類型,存在於 Jboss 的 HttpInvoker 組件中的 ReadOnlyAccessFilter 過濾器中。該過濾器在沒有進行任何安全檢查的情況下嘗試將來自客戶端的數據流進行反序列化,從而導致了漏洞。
- 漏洞編號:CVE-2017-12149
- 漏洞等級:高危
- 漏洞版本:
- Jboss AS 5.x
- JbossAS 6.x
2. 漏洞簡介
2017年8月30日,Redhat公司發佈了一個JbossAS 5.x系統的遠程代碼執行嚴重漏洞通告,相應的漏洞編號爲CVE-2017-12149。近期有安全研究者發現JbossAS 6.x也受該漏洞影響,攻擊者可能利用此漏洞無需用戶驗證在系統上執行任意命令。
漏洞名稱 | JBOSS AS 5.x/6.x 反序列化命令執行漏洞 |
---|---|
威脅類型 | 遠程命令執行 |
威脅等級 | 高 |
漏洞ID | CVE-2017-12149 |
受影響系統及應用版本 | Jboss AS 5.x Jboss AS 6.x |
3. 漏洞分析
該漏洞存在於http invoker 組件的 ReadOnlyAccessFilter 的 doFilter 中。如下圖所示:
方法中的代碼在沒有進行任何安全檢查的情況下,將來自客戶端的數據流(request.getInputStream())進行了反序列化操作(紅色箭頭所示),從而導致了反序列化漏洞。
4. 漏洞復現
環境生成後,訪問頁面,可以看到jboss的首頁:
我們使用bash來反彈shell,但由於Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,我們需要用進行一次編碼。
編碼網址http://jackson.thuraisamy.me/runtime-exec-payloads.html
將構造好的反彈shell的payload(將ip端口設置爲你自己想要反彈的ip和端口):
使用網上公佈的java反序列化的payload構造工具ysoserial-0.0.6-SNAPSHOT-all.jar來構造payload,
將生成的poc.ser拷貝到我們寫好的poc腳本中,將url替換成你自己的url,運行腳本,在你自己的服務器上通過nc監聽反彈的端口
運行腳本,可以看到成功反彈shell,獲取flag:
5. 修復建議
不需要 http-invoker.sar 組件的用戶可直接刪除此組件。
添加如下代碼至 http-invoker.sar 下 web.xml 的 security-constraint 標籤中,對 http invoker 組件進行訪問控制:
<url-pattern>/*</url-pattern>