From: S2-52 分析(含POC)
0x01 漏洞描述
2017年9月5日,Apache Struts發(fā)布最新安全公告,Apache Struts2的REST插件存在遠(yuǎn)程代碼執(zhí)行的高危漏洞,該漏洞由lgtm.com的安全研究員匯報(bào),漏洞編號(hào)為CVE-2017-9805(S2-052)。Struts2 REST插件的XStream組件存在反序列化漏洞,使用XStream組件對(duì)XML格式的數(shù)據(jù)包進(jìn)行反序列化操作時(shí),未對(duì)數(shù)據(jù)內(nèi)容進(jìn)行有效驗(yàn)證,存在安全隱患,可被遠(yuǎn)程攻擊。
Struts2啟用了rest-plugin后并編寫(xiě)并設(shè)置了XStreamHandler后,可以導(dǎo)致遠(yuǎn)程命令執(zhí)行這一嚴(yán)重問(wèn)題。
xxlegend師傅已經(jīng)分析了官方緩解措施無(wú)效《S2-052漏洞分析及官方緩解措施無(wú)效驗(yàn)證》
建議升級(jí)到Struts 2.5.13 or Struts 2.3.34
0x02 測(cè)試環(huán)境
使用struts官方showcase, 2.5.12、2.3.33及以下,下載地址: https://archive.apache.org/dist/struts/ 。
載入工程,apps目錄下rest-showcase為可進(jìn)行。

0x03 漏洞分析
struts2的ContentTypeInterceptor會(huì)根據(jù)ContentType、url后綴尋找響應(yīng)的處理handler,并調(diào)用handler相關(guān)的反序列化函數(shù)。xml形式的restfull請(qǐng)求轉(zhuǎn)至XStreamHandler進(jìn)行處理。

struts2-rest-plugin請(qǐng)求處理handler定義:

XStreamHandler在沒(méi)有進(jìn)行任何驗(yàn)證的情況下直接反序列化xml形式的數(shù)據(jù)。

這里在調(diào)試的是否發(fā)現(xiàn)一坑,反序列化的棧中若只有一個(gè)對(duì)象,將會(huì)導(dǎo)致直接返回toObject函數(shù)傳入的target對(duì)象。


0x04 POC執(zhí)行
目前公布的POC由于使用了jdk.nashorn,javax.imageio,需要用jdk1.8以上。
POC執(zhí)行鏈

最終在ImageIO$ContainsFilter.filter中觸發(fā)POC構(gòu)造的命令執(zhí)行

