繼3月6日struts2爆出漏洞S2-045後,今天又爆出一個漏洞。Struts2官方已經確認該漏洞(S2-046),並定級為高危漏洞。S2-046漏洞的報告者來自三家:qualcomm(高通)、dbappsecurity(杭州安恆)、HPE(惠普企業)。
Struts2的使用範圍及其廣泛,國內外均有大量廠商使用該框架。
Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。
漏洞分析
使用Jakarta插件處理文件上傳操作時可能導致遠程代碼執行漏洞。

使用惡意的Content-Disposition值或者使用不合適的Content-Length頭就可能導致遠程命令執行。該漏洞與S2-045(CVE-2017-5638)相似,但使用了不同的攻擊向量。
觸發漏洞需要滿足的條件:
JakartaStreamMultipartRequest已開啟。也就是說,Struts2需要通過Jakarta stream parser配置(非默認)。在Struts2配置文件中檢查<constant name=」struts.multipart.parser」 value=」jakarta-stream」 />
上傳的文件大小根據Content-Length頭的聲明要大於Struts2默認允許的2GB大小
文件名中包含OGNL payload
漏洞的危害
攻擊者可通過修改HTTP請求頭部中的Content-Length欄位大於Struts2允許的最大值(2GB),並修改Content-Disposition中的filename欄位構造惡意代碼利用該漏洞,在受影響伺服器上執行系統命令,進一步可完全控制該伺服器,造成拒絕服務、數據泄露、網站遭篡改等影響。由於該漏洞利用所需組件默認啟用,因此漏洞危害較為嚴重。
漏洞檢測
通過以下方式進行檢測:
查看web目錄下/WEB-INF/lib/目錄下的struts2-core-x.x.x.jar文件,如果x代表的版本號在2.3.5到2.3.31以及2.5到2.5.10之間且未修改默認配置則存在漏洞。
解決方案
目前網上已經有人公開了漏洞POC,為了保護您的資產安全,請按照下面方法及時修復該漏洞。
S2-046PoC如下:

1. 嚴格過濾Content-Type、filename里的內容,嚴禁ognl表達式相關欄位
2. 如果你正在使用基於Jakarta的文件上傳Multipart解析器,請將Apache Struts升級到2.3.32或2.5.10.1。
3. 和先前的漏洞一樣,也有相應的變通方案,即採用其他Mutipart解析器實施方案。Apache也提供2個插件作為解決方案(通過鏈接:
https://github.com/apache/struts-extras了解)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可採用該解決方案。
4. 另外也可以從堆中移除File Upload Interceptor,定義自有堆並設為默認,該解決方案針對Struts2.5.8 – 2.5.10有效。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/209020.html