自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Struts2安全漏洞頻出 多因Apache官方代碼編寫不嚴(yán)謹(jǐn)

安全 漏洞
日前,Struts2再次爆出安全漏洞,主要影響國內(nèi)電商、銀行、運(yùn)營商等諸多大型網(wǎng)站和為數(shù)眾多的政府網(wǎng)站。國外安全研究人員日前發(fā)現(xiàn),Apache Struts2在處理CVE-2014-0094的漏洞補(bǔ)丁中存在缺陷,會(huì)被輕易繞過,可導(dǎo)致任意命令執(zhí)行。

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

[[112380]]

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

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

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

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

Struts2安全漏洞頻出 多因Apache官方代碼編寫不嚴(yán)謹(jǐn)

官方給出了利用代碼,但是對(duì)卻忽視了這個(gè)漏洞的威力,因?yàn)楣俜娇吹組eder Kydyraliev給出的代碼以為就是一個(gè)簡單的bypass,沒有意識(shí)到利用此漏洞可以遠(yuǎn)程執(zhí)行任意命令,于是隨意修改了一下過濾規(guī)則便草草了之了。當(dāng)時(shí)apache官方是這樣修補(bǔ)的,他們用正則將含有“\u0023”的請(qǐng)求全部過濾掉。這樣的修復(fù)根本沒有起到作用,因?yàn)?ldquo;\u0023”在傳遞過程中被轉(zhuǎn)義為“\\u0023”所以正則根本沒匹配上,悲劇的是他們沒有意識(shí)到這個(gè)問題。

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

漏洞頻繁出現(xiàn)

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

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

Struts2安全漏洞頻出 多因Apache官方代碼編寫不嚴(yán)謹(jǐn)

 

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

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

Struts2安全漏洞頻出 多因Apache官方代碼編寫不嚴(yán)謹(jǐn)

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

Struts2安全漏洞頻出 多因Apache官方代碼編寫不嚴(yán)謹(jǐn)

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

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

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

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

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

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

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

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

Apache官方難辭其咎

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

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

struts2漏洞盤點(diǎn)

影響比較大,利用比較廣泛的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屬性遠(yuǎn)程命令執(zhí)行漏洞

2013年7月 S2-016

CVE-2013-2251 Struts2 <= 2.3.15.1 action、redirect、redirectAction前綴遠(yuǎn)程命令執(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

責(zé)任編輯:藍(lán)雨淚 來源: FreeBuf
相關(guān)推薦

2013-07-24 10:35:02

2013-05-22 10:28:19

2013-07-18 15:09:27

2012-12-18 16:18:06

2013-07-24 14:06:48

2014-04-24 16:38:50

2013-07-19 09:36:04

struts2struts2漏洞

2023-12-14 16:20:09

2013-07-22 10:45:56

2013-07-18 10:06:54

2021-05-12 10:46:23

漏洞BINDDNS服務(wù)器

2021-12-13 20:01:23

漏洞網(wǎng)絡(luò)安全數(shù)據(jù)泄露

2016-06-08 10:09:24

2021-03-27 09:47:02

漏洞安全Cisco Jabbe

2011-08-30 16:11:03

2016-03-22 12:37:45

Struts2Struts2漏洞漏洞檢測

2017-03-08 22:23:02

2017-07-11 09:42:22

漏洞

2012-07-12 12:26:36

2021-06-15 10:58:17

微軟officeMSGraph安全漏洞
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)