日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Struts2安全漏洞頻出多因Apache官方代碼編寫不嚴謹

2014年4月30日 日前,Struts2再次爆出安全漏洞,主要影響國內(nèi)電商、銀行、運營商等諸多大型網(wǎng)站和為數(shù)眾多的政府網(wǎng)站。國外安全研究人員日前發(fā)現(xiàn),Apache Struts2在處理CVE-2014-0094的漏洞補丁中存在缺陷,會被輕易繞過,可導致任意命令執(zhí)行。黑客進而能夠竊取到網(wǎng)站數(shù)據(jù),或者對網(wǎng)站進行DDoS攻擊。

為淶源等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及淶源網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站建設、淶源網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

本文盤點了近年來曝出的高危Struts2漏洞,并分析了Struts2為什么屢屢出現(xiàn)重大安全漏洞。

4年前就存在Struts2代碼執(zhí)行問題

Struts2漏洞,這里主要指的是J2EE開源框架struts2出現(xiàn)的命令執(zhí)行漏洞,危害巨大,可導致遠程執(zhí)行任意系統(tǒng)命令,進而獲取系統(tǒng)控制權,數(shù)據(jù)庫控制權,導致信息泄露。所有使用struts2框架開發(fā)的系統(tǒng)都受影響。

Struts2的代碼執(zhí)行問題最早要追溯到2010年,當時來自Google安全Team的Meder Kydyraliev發(fā)現(xiàn)可以通過用unicde編碼的形式繞過參數(shù)攔截器對特殊字符“#”的過濾,造成代碼執(zhí)行問題,官方漏洞編號S2-003,我們可以在struts2官方的漏洞公告中看到如下文字,如圖:

官方給出了利用代碼,但是對卻忽視了這個漏洞的威力,因為官方看到Meder Kydyraliev給出的代碼以為就是一個簡單的bypass,沒有意識到利用此漏洞可以遠程執(zhí)行任意命令,于是隨意修改了一下過濾規(guī)則便草草了之了。當時apache官方是這樣修補的,他們用正則將含有“\u0023”的請求全部過濾掉。這樣的修復根本沒有起到作用,因為“\u0023”在傳遞過程中被轉義為“\\u0023”所以正則根本沒匹配上,悲劇的是他們沒有意識到這個問題。

好在官方終于發(fā)現(xiàn)了ognl表達式的威力,ognl可以調(diào)用java靜態(tài)方法,struts2本身就是一個命令執(zhí)行漏洞,于是他們修改了一些參數(shù)進而限制執(zhí)行java靜態(tài)方法。經(jīng)過研究發(fā)現(xiàn),他們修改了OGNL上下文中一些命名空間中的屬性,比如將#_memberAccess.allowStaticMethodAccess設置為true,#context["xwork.MethodAccessor.denyMethodExecution"]設置為false。但是通過unicde編碼繞過過濾規(guī)則的問題依然存在。他們以為這樣便萬事大吉了。

漏洞頻繁出現(xiàn)

可能是因為apache冷落了Google安全Team,沒過多久,Meder Kydyraliev大神便發(fā)飆了,這次他構造了一個可以遠程執(zhí)行任意命令的利用代碼提交給apache官方,因為之前unicode編碼繞過的問題一直存在,所以還是S2-003的bypass方式,只不過這次他給出了利用ONGL調(diào)用java靜態(tài)函數(shù)執(zhí)行系統(tǒng)命令的方法,并且在他的blog當中給出了詳細的分析,如圖所示:

blog地址:http://blog.o0o.nu/2010/07/cve-2010-1870-struts2xwork-remote.html

所以S2-003的修復宣告失敗,此漏洞編號S2-005,CVE-2010-1870。但是官方的修復卻很簡陋,他們重新修改了正則,封堵了Meder Kydyraliev的利用,但是始終沒有從根本上解決問題,他們沒有意識OGNL表達式用八進制編碼依然是可以執(zhí)行的,比如”\u0023”換成八進制的“\43”,再次繞過。

這次,apache官方終于意識到問題的嚴重性,更加嚴謹?shù)母膶懥苏齽t,過濾掉了出現(xiàn)\, @等字符的請求內(nèi)容,官方修改的正則表達式,如圖所示

但是struts2的問題依然存在,不知道過了多久大概是2011年,Meder Kydyraliev再次發(fā)飆(CVE-2011-3923),他提出新的利用思路,借助action實例中的私有變量的set方法執(zhí)行OGNL調(diào)用java靜態(tài)方法執(zhí)行任意命令。關于這個問題,其實還牽扯出好多web容器的特性,但是危害依然巨大,此漏洞編號S2-009,CVE-2011-3923,而官方依然是通過正則過濾的方式來修復此問題,官方修復如圖所示

此后還出現(xiàn)過S2-013利用struts2標簽執(zhí)行ognl的方式,但是這些漏洞都相對雞肋,影響范圍也就大打折扣了。

事實上struts2框架底層是利用OGNL表達式來實現(xiàn)的,然而OGNL表達式的功能過于強大,導致可以直接調(diào)用java靜態(tài)方法。但是官方為了防止在OGNL表達式中直接調(diào)用java靜態(tài)方法,它在OGNL上下文中內(nèi)置了幾個命名對象。例如,#_memberAccess["allowStaticMethodAccess"]默認被設置為false,#context["xwork.MethodAccessor.denyMethodExecution"]默認被設置為true。

之前的幾個漏洞使官方意識到他們做的很多限制都白費,比如上面提到的這幾個屬性的值可以利用執(zhí)行OGNL進行修改,我們不難看出上面提到的這兩個漏洞都會先設置這兩個屬性,然后調(diào)用java靜態(tài)方法。

一直到2013年,在S2-013被爆出之后,#_memberAccess["allowStaticMethodAccess"]的屬性,使它沒有權限被修改。這樣看似從根本上解決了問題。但是他們忘記了利用java反射類來訪問私有成員變量這種猥瑣的方法。關于反射類這里順帶說一下,在這之前還出現(xiàn)過例如S2-008命令執(zhí)行,不過這其實是Struts2開發(fā)模式的一個特性,嚴格來講不能算是漏洞,只不過在他的處理邏輯當中用戶可以控制執(zhí)行OGNL,但是默認struts2的開發(fā)模式是關閉的,所以此漏洞很雞肋。但值得一提的是一直到2014年pwntesting的一篇分析文章中給出S2-008的利用方式,真正利用java反射類修改前面那兩個屬性的奇技淫巧。

另外,還有另一種方法更加干脆,就是java.lang.ProcessBuilder這個類,隨便new一個實例然后調(diào)用start()方法,便達到命令執(zhí)行的目的。所以apache改了半天有白忙活了。

關于比較火的struts2命令執(zhí)行漏洞,在就是去年7月份爆出的S2-016了。關于這個漏洞,其實是DefaultActionMapper類支持以"action:"、"redirect:"、"redirectAction:"作為導航或是重定向前綴,但是這些前綴后面同時可以跟OGNL表達式,由于struts2沒有對這些前綴做過濾,導致命令執(zhí)行。

一直到最近的S2-020,以及后續(xù)的補丁被繞過,又讓傷痕累累的struts2火了一把,但是這次問題不是出在ognl執(zhí)行上,而是換成了操控容器的classLoader屬性,這個其跟前面提到的S2-009有點類似,因為struts2框架有這樣一個特性,只要接受到用戶提交aa=bb這樣的請求時,就會通過OGNL去執(zhí)行對應的setaa方法,所以當用戶去提交class.classLoader….這樣的參數(shù)時,當然可以操控對應classLoader的屬性,至于classLoader,不同的容器有不同的屬性,能夠控制這些屬性是很危險的,比如tomcat的docBase可以控制根目錄的位置等等。

關于S2-020的修復,官方發(fā)揚了他們一貫的作風,繼續(xù)使用正則表達式這種“高端“技術過濾用戶請求,可惜這次又沒過濾好,被人家用各種奇技淫巧繞過。就這個問題來言,我想對struts2的開發(fā)人員說,你們什么時候能夠關注一下底層代碼呀。至于在S2-020補丁被繞過之后的修復,官方無奈還是用正則,但是這次他們總算確認要從根本上修復框架問題,所以坐等apache出最終補丁吧。

Apache官方難辭其咎

回顧struts2的漏洞歷史,我們發(fā)現(xiàn)官方難辭其咎,首先,開發(fā)人員安全意識不強,雖然采取了基本的安全措施,但是形同虛設。其次,官方修復力度不夠,給我的感覺總像是在敷衍了事,未能從根本上解決問題。再就是,官方的開放精神確實很震撼,竟然直接將漏洞的PoC掛在官網(wǎng),這樣給了很多人進一步研究漏洞利用的機會,這個也是導致問題更加嚴重的一個原因。其實責任很明顯,apache官方的問題。在這里我想提醒廣大java開發(fā)人員以及系統(tǒng)運維人員,面對這么一個漏洞百出的框架,你還敢用嗎,還是早日換掉這個危險的struts2吧!

近兩年關于struts2的攻擊事件頻發(fā),攻擊面覆蓋各大門戶網(wǎng)站,包括向移動、電信、聯(lián)通、各大網(wǎng)銀、證券等等,因為struts2是一款功能非常強大的j2ee框架,特別是對于廣大開發(fā)人員,應用非常廣泛。所以一旦struts2出現(xiàn)0day,導致互聯(lián)網(wǎng)上出現(xiàn)大面積被入侵、被拖庫,信息泄露等事件。對于此問題,專家建議相關技術人員應及時更新struts2框架版本。如果有能力,最好自己去開發(fā)應用框架,避免使用開源框架。

struts2漏洞盤點

影響比較大,利用比較廣泛的struts2漏洞:

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參數(shù)攔截器代碼執(zhí)行

2013年 5月 S2-013

CVE-2013-1966 Struts2 <= 2.3.14 includeParams屬性遠程命令執(zhí)行漏洞

2013年7月 S2-016

CVE-2013-2251 Struts2 <= 2.3.15.1 action、redirect、redirectAction前綴遠程命令執(zhí)行漏洞

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官網(wǎng)提供的漏洞歷史:

https://cwiki.apache.org/confluence/display/WW/Security+Bulletins


新聞名稱:Struts2安全漏洞頻出多因Apache官方代碼編寫不嚴謹
地址分享:http://m.5511xx.com/article/cosoigh.html