繼 3 月 7 日爆發(fā)的 S2-045 遠(yuǎn)程命令執(zhí)行漏洞風(fēng)波之后,今日 Struts2 官方發(fā)布另一個(gè)高危漏洞 S2-046见妒,CVE 編號(hào)依然是 CVE-2017-5638,據(jù)官方披露,最新的漏洞與 S2-045 類(lèi)似胎许,只是攻擊字段發(fā)生變化奈辰。修復(fù)方案依然與 S2-045 相同栏妖,升級(jí)至 2.3.32 或者 2.5.10.1 版本即可防御針對(duì)這兩個(gè)漏洞攻擊。
Struts2 是一個(gè)基于 MVC 設(shè)計(jì)模式的 Web 應(yīng)用框架奖恰,它本質(zhì)上相當(dāng)于一個(gè) servlet吊趾,在 MVC 設(shè)計(jì)模式中宛裕,Struts2 作為控制器 (Controller) 來(lái)建立模型與視圖的數(shù)據(jù)交互。Struts2 的使用范圍及其廣泛论泛,國(guó)內(nèi)外均有大量廠商使用該框架揩尸。
漏洞描述:
據(jù)漏洞提交者紕漏,S2-046 的利用條件有以下三個(gè)方面:
1屁奏、系統(tǒng)必須使用 Jakarta 插件岩榆,檢查 Struts2 配置文件中是否有以下配置:<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
2、上傳文件的大蟹仄啊(由 Content-LSength 頭指定)大于 Struts2 允許的最大大杏卤摺(2GB)
3、文件名內(nèi)容構(gòu)造惡意的 OGNL 內(nèi)容折联。
如果滿(mǎn)足以上要求粒褒,Struts2 受影響版本將創(chuàng)建一個(gè)包含攻擊者控制的異常文件名,使用 OGNL 值堆棧來(lái)定位錯(cuò)誤消息诚镰,OGNL 值堆棧將插入任何 OGNL 變量($ {}或%{})作為 OGNL 表達(dá)式奕坟,然后實(shí)現(xiàn)任意代碼執(zhí)行。
目前網(wǎng)絡(luò)上已披露出針對(duì) S2-046 的 POC
漏洞復(fù)現(xiàn):
我們?cè)诒镜卮罱ōh(huán)境進(jìn)行測(cè)試:
查看 Struts2 的配置文件清笨,發(fā)現(xiàn)存在
<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
下面進(jìn)行網(wǎng)站上傳測(cè)試月杉,構(gòu)造數(shù)據(jù)包如下,設(shè)定 Content-LSength 值大于 2GB抠艾,并構(gòu)造惡意文件名苛萎,如下圖所示:
通過(guò)響應(yīng)數(shù)據(jù)包可看到惡意代碼成功執(zhí)行,攻擊成功跌帐,如下圖所示:
友情提示:
1.請(qǐng)升級(jí)到 Apache Struts 2.3.32 或 2.5.10.1 版本首懈,下載地址:
http://archive.apache.org/dist/struts/2.3.32/
http://archive.apache.org/dist/struts/2.5.10.1/
2.測(cè)試的時(shí)候設(shè)定 Content-LSength 值不大于 2GB也可以利用成功,原因未知谨敛。