昨天的信息安全和互聯網界,再一次被Struts2刷了一次屏:Struts2存在遠程代碼執行的嚴重漏洞(漏洞編號S2-045,CVE編號:cve-2017-5638),并被官方定級為高危風險。黑客可以利用該漏洞通過瀏覽器在遠程服務器上執行任意系統命令,將會對受影響站點造成嚴重影響,引發數據泄露、網頁篡改、植入后門、成為肉雞等安全事件。
那么,問題來了,Struts2到底是什么玩意?
Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互,它在國內使用非常廣泛,被大量的政府、金融以及大中型互聯網公司所使用。所以,每一次爆出Struts2的漏洞,相關單位和各大互聯網公司都非常敏感。日前盛傳的“京東12G用戶數據泄露事件”的罪魁禍首就是Struts漏洞。
近年來,Struts漏洞頻發,影響比較大的有如下這些:
2010年 S2-005
CVE-2010-1870 XWork ParameterInterceptors bypass allows OGNLstatement execution
2012年1月 S2-008
CVE-2012-0392 struts2 DevMod Remote Command Execution Vulnerability
2012年1月 S2-009
CVE-2011-3923 Struts<=2.3.1參數攔截器代碼執行
2013年 5月 S2-013
CVE-2013-1966 Struts2 <= 2.3.14 includeParams屬性遠程命令執行漏洞
2013年7月 S2-016
CVE-2013-2251 Struts2 <= 2.3.15.1 action、redirect、redirectAction前綴遠程命令執行漏洞
2014年3月 S2-020
Struts2 <= 2.3.16 DoS attacks and ClassLoader manipulation
2014年4月 S2-021
Struts2 <= 2.3.16.1 bypass patch(ClassLoader manipulation)
回顧struts2的漏洞歷史,Apache官方難辭其咎,首先,開發人員安全意識不強,雖然采取了基本的安全措施,但是形同虛設。其次,官方修復力度不夠,給我的感覺總像是在敷衍了事,未能從根本上解決問題。再就是,官方的開放精神確實很震撼,竟然直接將漏洞的PoC掛在官網,這樣給了很多人進一步研究漏洞利用的機會,這個也是導致問題更加嚴重的一個原因。
近兩年關于struts2的攻擊事件頻發,攻擊面覆蓋各大門戶網站,包括向移動、電信、聯通、各大網銀、證券等等,因為struts2是一款功能非常強大的j2ee框架,特別是對于廣大開發人員,應用非常廣泛。所以一旦struts2出現0day,導致互聯網上出現大面積被入侵、被拖庫,信息泄露等事件。
在這里,筆者提醒廣大java開發人員以及系統運維人員,面對這么一個漏洞百出的框架,你還敢用嗎,還是早日換掉這個危險的struts2吧!實在必須要用,也請及時更新struts2框架版本。如果有能力,最好自己去開發應用框架,避免使用開源框架。
參考:
1.http://www.freebuf.com/articles/web/33301.html
2.https://cwiki.apache.org/confluence/display/WW/Security+Bulletins
3.http://www.leiphone.com/news/201703/GGlXuODrwTovCx0u.html
4.百度百科