2017年3月6日,apache struts2被曝存在遠端指令執行漏洞,漏洞編号:s2-045,cve編号:cve-2017-5638,官方評級為高危,該漏洞是由于在使用基于jakarta插件的檔案上傳功能條件下,惡意使用者可以通過修改http請求頭中的content-type值來觸發該漏洞,進而執行任意系統指令,導緻系統被黑客入侵。
完成漏洞評級和确認影響範圍後,阿裡雲安全應急團隊迅速啟動應急流程,對該漏洞進行成因分析,并迅速釋出官方安全漏洞預警公告。
在流程啟動啟動的同時,阿裡雲雲盾的各個産品關聯響應,幫助使用者應對struts2漏洞。安騎士迅速完成雲上ecs安全檢測,态勢感覺用行為檢測功能精準捕捉攻擊源ip,web應用防火牆在次日上午成功更新防護規則,幫助使用者有效攔截利用該漏洞發起的攻擊。
通過及時地檢測、通知和規則更新,所有阿裡雲雲盾使用者均未是以漏洞發生安全事件。
根據官方的漏洞公告
<a href="https://cwiki.apache.org/confluence/display/ww/s2-045" target="_blank">https://cwiki.apache.org/confluence/display/ww/s2-045</a>
可以看出漏洞的主要原因是出現在content-type
通過http header中的content-type,注入ognl語句來進行遠端指令執行。
struts2在對于異常的處理時出現了問題。
受影響的版本:struts 2.3.5 - struts 2.3.31, struts
2.5 - struts 2.5.10
測試環境:tomcat7,struts2.3.16
測試過程:在上傳頁面攔截請求的資料包
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicWZwpmLxcDNykDOiNGO2EGZzYGMzQGZ3M2N2E2N0YGZ4kDO4EmNlFWM3YTYw8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
在http header裡增加一個content-type的key,value就是我們的poc
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicWZwpmLxcDNykDOiNGO2EGZzYGMzQGZ3M2N2E2N0YGZ4kDO4EmNlFWM3YTYw8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
對于使用了基于jakarta實作檔案上傳multipart解析器,檢測方式檢視web目錄下/web-inf/lib/目錄下的struts-core.x.x.jar ,如果這個版本在struts2.3.5 到 struts2.3.31 以及 struts2.5 到 struts2.5.10之間則存在漏洞,請更新到struts 2.3.32或2.5.10.1版本。
使用其它方式實作檔案上傳的multipart解析器。
使用第三方的防護裝置進行防護。
删除commons-fileupload-x.x.x.jar檔案(會造成上傳功能不可用)。