7月7日,apache struts官方釋出了漏洞編号為:s2-048的高危漏洞公告。
阿裡雲安全團隊2小時内釋出官方安全建議,跟蹤s2-048的全球攻擊趨勢,并對不同漏洞版本進行了對比分析。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwgTYldTZwY2MxQmZ1czNkZjY4EWNjBTO0EWMhZGN0gjZlBjM3cDNz8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
目前,阿裡雲雲盾态勢感覺已支援檢測,waf預設支援防禦。
一、影響範圍
如果在apachestruts 2.3.x系列中啟用了struts2-struts1-plugin插件,會受到該漏洞的影響。
二、攻擊源分析
阿裡雲安全團隊對s2-048在全球範圍内的攻擊源進行分析。
其中,有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.xappsstruts2-showcase.war包; 建議關閉devmod模式(請根據自身業務情況決定是否關閉)。
開發者可以使用resourcekeys替代,将原始消息直接傳遞給actionmessage的方式,以此作為根治措施。
正确方式:
錯誤方式:
建議将struts2更新到最新版本2.5.10.1。
使用阿裡雲雲盾waf對該漏洞進行防禦。
<a href="https://mp.weixin.qq.com/s/lpti_oace4-9qpgzp_m6bg">原文連結</a>