708
支付寶
技術分析 | Struts2 S2-048漏洞:跟蹤攻擊趨勢,成功檢測防禦
7月7日,Apache Struts官方發布了漏洞編號為:S2-048的高危漏洞公告。
阿裏雲安全團隊2小時內發布官方安全建議,跟蹤S2-048的全球攻擊趨勢,並對不同漏洞版本進行了對比分析。
目前,
如果在ApacheStruts 2.3.x係列中啟用了struts2-struts1-plugin插件,會受到該漏洞的影響。
其中,有3/4的攻擊源來自國內的北京、上海地區,1/4來自海外(美國、韓國)和香港地區。
在SaveGangsterAction.java的文件裏看的有execute方法的實現,其中gforn.getName()是攻擊者可控的,gforn.getName()的值可以帶入messages結構中;
在Struts1Action.java裏可以看到,其實是調用SaveGangsterAction.execute方法,然後再調用getText(msg.getKey())
getText方法會把actionmessages傳遞給com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage ,
其中又調用了com.opensymphony.xwork2.util.TextParseUtil.translateVariables,它用來調用OGNL 表達式用處理字符串表達式;
使用EL表達式簡單測試$(1>2);
漏洞測試生效。
阿裏雲安全團隊將S2-045及S2-048漏洞的利用原理做了對比分析。
對比S2-045和S2-048的漏洞攻擊次數發現,S2-045的危害程度和關注度比S2-048高;在S2-048漏洞爆發後,由於未公開POC和利用工具,當天被利用攻擊的幾率比較小,安全風險相對較低。
- 及時檢測是否受到漏洞影響:使用的Struts是 2.3.x版本,是否啟用了struts2-struts1-plugin插件。使用阿裏雲雲盾態勢感知進行漏洞檢測。
- 阿裏雲上用戶可以禁用、關閉(刪除)\struts-2.3.x\apps\struts2-showcase.war包; 建議關閉devmod模式(請根據自身業務情況決定是否關閉)。
- 開發者可以使用resourcekeys替代,將原始消息直接傳遞給ActionMessage的方式,以此作為根治措施。
正確方式:
messages.add("msg",new ActionMessage("struts1.gangsterAdded", gform.getName()))
錯誤方式:
messages.add("msg",new ActionMessage("Gangster " + gform.getName() + " wasadded"))
- 建議將Struts2升級到最新版本2.5.10.1。
- 使用阿裏雲雲盾WAF對該漏洞進行防禦。
最後更新:2017-07-10 10:32:43