压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

Apache Struts2 遠(yuǎn)程代碼執(zhí)行漏洞(S2-057) 技術(shù)分析與防護(hù)方案

北京時(shí)間2018年8月22日,Apache官方發(fā)布通告公布了Struts2中一個(gè)遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2018-11776,CNVD-2018-15894,CNNVD-201808-740)。該漏洞在兩種情況下存在,第一,當(dāng)xml配置中未設(shè)置namespace 值,且上層動(dòng)作配置(action(s) configurations)中未設(shè)置或使用通配符namespace值時(shí),可能導(dǎo)致遠(yuǎn)程代碼執(zhí)行漏洞的發(fā)生。第二,使用未設(shè)置 value和action值的url標(biāo)簽,且上層動(dòng)作配置中未設(shè)置或使用通配符namespace值,同樣可能導(dǎo)致遠(yuǎn)程代碼執(zhí)行。

受影響版本

  • Struts 2.3 – 2.3.34
  • Struts 2.5 – 2.5.16

不受影響版本

  • Struts 2.3.35
  • Struts 2.5.17

技術(shù)防護(hù)方案

版本檢測(cè)

通過(guò)配置文件檢測(cè)

此漏洞產(chǎn)生于低版本的Struts組件,當(dāng)應(yīng)用系統(tǒng)引入相關(guān)組件時(shí),將存在被攻擊者遠(yuǎn)程攻擊的風(fēng)險(xiǎn)。建議由應(yīng)用開(kāi)發(fā)人員排查引入組件的版本是否處于受影響范圍之內(nèi)。

查看Maven配置文件pom.xml中關(guān)于組件的版本。如:

<dependency><groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version> 2.5.13 </version>

</dependency>

若紅字所示版本在受影響范圍內(nèi),則請(qǐng)用戶盡快升級(jí)Struts2至最新版本,以保證長(zhǎng)期有效的防護(hù)。

通過(guò)組件名檢測(cè)

Linux系統(tǒng)下可使用以下命令查找當(dāng)前使用的struts2-core包,通過(guò)查看其文件名,判斷當(dāng)前版本。

find / -name struts2-core-*.jar

若紅框處版本號(hào)在受影響范圍內(nèi),則請(qǐng)用戶盡快升級(jí)至最新版本。

官方修復(fù)方案

官方已在最新版本中修復(fù)了此漏洞,請(qǐng)用戶盡快將Struts升級(jí)至官方修復(fù)版本,2.3.*的用戶請(qǐng)升級(jí)至2.3.35;2.5.*的用戶請(qǐng)升級(jí)至2.5.17。下載鏈接如下所示:

Struts2.3.35:

http://mirrors.hust.edu.cn/apache/struts/2.3.35/struts-2.3.35-all.zip

Struts2.5.17:

http://mirrors.hust.edu.cn/apache/struts/2.5.17/struts-2.5.17-all.zip

臨時(shí)解決方案

排查所有Struts 2的配置文件,如struts.xml,為沒(méi)有定義namespace命名空間的package節(jié)點(diǎn)添加命名空間配置。

<package name=”user” namespace=”/user” extends=”struts-default”><action name=”login”>

</action>

</package>

綠盟科技防護(hù)建議

綠盟科技檢測(cè)類(lèi)產(chǎn)品與服務(wù)

  1. 公網(wǎng)資產(chǎn)可使用綠盟云 緊急漏洞在線檢測(cè),檢測(cè)地址如下:

手機(jī)端訪問(wèn)地址:

https://cloud.nsfocus.com/megi/holes/hole_struts2_2018_8_23.html

PC端訪問(wèn)地址:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1026

2、內(nèi)網(wǎng)資產(chǎn)可以使用綠盟科技的入侵檢測(cè)系統(tǒng)(IDS),遠(yuǎn)程安全評(píng)估系統(tǒng)(RSAS V5、V6)和Web應(yīng)用漏洞掃描系統(tǒng)(WVSS)進(jìn)行檢測(cè)。

  • 入侵檢測(cè)系統(tǒng)(IDS)

http://update.nsfocus.com/update/listIds

  • 遠(yuǎn)程安全評(píng)估系統(tǒng)(RSAS V5)

http://update.nsfocus.com/update/listAurora/v/5

  • 遠(yuǎn)程安全評(píng)估系統(tǒng)(RSAS V6)

http://update.nsfocus.com/update/listRsasDetail/v/vulweb

通過(guò)上述鏈接,升級(jí)至最新版本即可進(jìn)行檢測(cè)!

使用綠盟科技防護(hù)類(lèi)產(chǎn)品進(jìn)行防護(hù)

  • 入侵防護(hù)系統(tǒng)(IPS)

http://update.nsfocus.com/update/listIps

  • 下一代防火墻系統(tǒng)(NF)

http://update.nsfocus.com/update/listNf

  • Web應(yīng)用防護(hù)系統(tǒng)(WAF)

http://update.nsfocus.com/update/wafIndex

通過(guò)上述鏈接,升級(jí)至最新版本即可進(jìn)行防護(hù)!

檢測(cè)防護(hù)產(chǎn)品升級(jí)包/規(guī)則版本號(hào)

檢測(cè)產(chǎn)品

升級(jí)包 / 規(guī)則版本號(hào)

IDS 5.6.7.732、5.6.8.732、5.6.9.18479、5.6.10.18479
RSAS V5 web 插件包 V051758
RSAS V6 web 插件包 V6.0R02F00.1004
WVSS V6 web 插件包 V6.0R03F00.113

防護(hù)產(chǎn)品

升級(jí)包 / 規(guī)則版本號(hào)

IPS 5.6.7.732、5.6.8.732、5.6.9.18479、5.6.10.18479
NF 5.6.7.732、6.0.1.732
WAF v6.0.5.1.39591、v6.0.7.0.39590、v6.0.6.1.39589

具體配置詳見(jiàn)附錄

技術(shù)分析

補(bǔ)丁對(duì)比

如圖所示,補(bǔ)丁主要添加了cleanNamespaceName方法,該方法通過(guò)白名單的方式來(lái)驗(yàn)證namespace是否合法,從官方描述和漏洞修復(fù)方式來(lái)看,該漏洞應(yīng)該是一個(gè)Ognl的表達(dá)式注入漏洞。

動(dòng)態(tài)分析

漏洞發(fā)布幾個(gè)小時(shí)之后,漏洞發(fā)現(xiàn)作者公布了整個(gè)發(fā)現(xiàn)過(guò)程,并且詳細(xì)分析了一種漏洞情形: https://lgtm.com/blog/apache_struts_CVE-2018-11776 。按照該博客的說(shuō)法,拉取struts2-showcase項(xiàng)目作為示例,修改struts-actionchaining.xml,具體如下:

  1. <struts>
  2. <package name=”actionchaining” extends=”struts-default” >
  3. <action name=”actionChain1″ class=”org.apache.struts2.showcase.actionchaining.ActionChain1″>
  4. <result type=”redirectAction”>
  5. <param name = “actionName”>register2</param>
  6. </result>
  7. </action>
  8. </package>
  9. </struts>

在這種情況下,所有到actionChain1.action的請(qǐng)求的返回結(jié)果都會(huì)指向register2,并且執(zhí)行鏈會(huì)到ServletActionRedirectResult.execute方法中,具體如下:

從上圖可以看出,通過(guò)namespace字段,污染了tmpLocation字典,并且設(shè)置為了預(yù)期的執(zhí)行的PoC,這也是補(bǔ)丁中為什么要凈化namespace的原因,繼續(xù)跟蹤namespace的去向,執(zhí)行鏈會(huì)到ServletActionRedirectResult的父類(lèi)的父類(lèi)StrutsResultSupport.execute方法中,具體如下圖:

這里有個(gè)conditionParse方法,這個(gè)方式就是使用Ognl表達(dá)式來(lái)計(jì)算數(shù)據(jù)值,在系統(tǒng)中用得非常多,而且在一些歷史漏洞中,也應(yīng)該由它來(lái)背鍋,當(dāng)然最大的鍋還是struts官方,每次漏洞出在哪就修在哪,典型的頭痛醫(yī)頭,腳痛醫(yī)腳。方法實(shí)現(xiàn)如下圖所示:

在這個(gè)方法中會(huì)使用到TextParseUtil.translateVariables方法,繼續(xù)跟蹤,調(diào)用棧進(jìn)入OgnlTextParser中的evaluate方法,首先會(huì)判斷傳入的表達(dá)式是否合法,比如是否能找到${}或者%{}對(duì),接著調(diào)用evaluator.evaluate求值,求值過(guò)程非常復(fù)雜,總得來(lái)說(shuō)就是鏈?zhǔn)綀?zhí)行過(guò)程,具體如下調(diào)用棧:

從上圖也可以看出最頂層就是通過(guò)反射的方式來(lái)調(diào)用ProcessBuilder的構(gòu)造函數(shù),中間部分就是鏈?zhǔn)綀?zhí)行過(guò)程中牽涉到一些操作。

我們可以看下求值過(guò)程中參數(shù)的一些情況。來(lái)查看Ognl安全加固的一些變化,具體如下圖:

主要是黑名單上又添加了一些類(lèi),分別是:

class ognl.DefaultMemberAccess

class com.opensymphony.xwork2.ognl.SecurityMemberAccess

class java.lang.ProcessBuilder

分析就結(jié)束了,計(jì)算器還是要彈的,如下圖:

相關(guān)鏈接如下:

https://cwiki.apache.org/confluence/display/WW/S2-057

原文鏈接: http://blog.nsfocus.net/s2-075-protection-plan/

完整版防護(hù)方案下載

上一篇:JavaScript Web應(yīng)用程序和服務(wù)器易受ReDoS攻擊

下一篇:UA(普遍適用性)給互聯(lián)網(wǎng)帶來(lái)的巨大經(jīng)濟(jì)機(jī)遇