strut2 升級至2.3.20

問題現象:

Apache Struts s2-005 遠程代碼執行漏洞(CVE-2010-1870)  html

受影響版本: java

Struts 2.0.0 - Struts 2.1.8.1 web

漏洞描述: spring

在Struts2中訪問OGNL的上下文對象必需要使用#符號,S2-003的修復方案中對#號進行過濾,可是沒有考慮到unicode編碼狀況,致使\u0023或者8進制\43繞過。 apache

http://struts.apache.org/docs/s2-005.html json

 

Apache Struts s2-008 遠程代碼執行漏洞(CVE-2012-0392) 安全

受影響版本: 服務器

Struts 2.1.0 - Struts 2.3.1 app

漏洞描述: 框架

Struts2框架存在一個DevMode模式,方便開發人員調試程序。若是啓用該模式,攻擊者能夠構造特定代碼致使OGNL表達式執行,以此對主機進行入侵。

http://struts.apache.org/docs/s2-008.html

 

Apache Struts s2-016 遠程代碼執行漏洞(CVE-2013-2251) 

受影響版本:

Struts 2.0.0 - Struts 2.3.15

漏洞描述:

在Struts2中,DefaultActionMapper類支持以"action:"、"redirect:"、"redirectAction:"做爲導航或是重定向前綴,可是這些前綴後面同時能夠跟OGNL表達式。因爲Struts2沒有對這些前綴作過濾,致使利用OGNL表達式調用java靜態方法執行任意系統命令。

http://struts.apache.org/docs/s2-016.html

 

Apache Struts s2-019 遠程代碼執行漏洞(CVE-2013-4316)

受影響版本:

Struts 2.0.0 - Struts 2.3.15.1

漏洞描述:

Struts2的「動態調用機制(Dynamic Method Invocation)」存在數量很多的漏洞,一直以來都被各種攻擊手法所利用。但「動態調用機制」在2.3.15.1版本之前都是默認打開狀態,用戶應該把它禁用掉。

http://struts.apache.org/docs/s2-019.html

 

Apache Struts s2-020 遠程代碼執行漏洞(CVE-2014-0094)

受影響版本:

Struts 2.0.0 - Struts 2.3.16

漏洞描述:

Apache Struts 2.0.0-2.3.16版本的默認上傳機制是基於Commons FileUpload 1.3版本,其附加的ParametersInterceptor容許訪問'class' 參數(該參數直接映射到getClass()方法),並容許控制ClassLoader。在具體的Web容器部署環境下(如:Tomcat),攻擊者利用 Web容器下的Java Class對象及其屬性參數(如:日誌存儲參數),可向服務器發起遠程代碼執行攻擊,進而植入網站後門控制網站服務器主機。

http://struts.apache.org/docs/s2-020.html

 

 

 

問題分析過程:

1)升級至最新版本2.3.20;

Struts.xml :

Struts 2.3.20 配置文件新增長了參數爲struts.excludedClasses,此參數爲了嚴格驗證排除一些不安全的對象類型。

 

              value="

                java.lang.Object,

                java.lang.Runtime,

                java.lang.System,

                java.lang.Class,

                java.lang.ClassLoader,

                java.lang.Shutdown,

                ognl.OgnlContext,

                ognl.MemberAccess,

                ognl.ClassResolver,

                ognl.TypeConverter,

                com.opensymphony.xwork2.ActionContext" />

 

升級注意事項:

替換jar包:

l  xwork-core-2.3.20.jar

l  struts2-json-plugin-2.3.20.jar

l  struts2-core-2.3.20.jar

l  commons-lang3-3.2.jar

l  freemarker-2.3.19.jar

l  asm-x.x.jar

l  asm-commons-x.x.jar

l  asm-tree-x.x.jar

l  commons-io-X.X.X.jar

l  commons-lang3-X.X.X.jar

l  commons-fileupload-X.X.X.jar

l  freemarker-X.X.X.jar

l  javassist-X.X.X.jar

l  ognl-X.X.X.jar

l  struts2-core-X.X.X.X.jar

l  xwork-core-X.X.X.jar

l  struts2-spring-plugin-2.3.20.jar

 

項目struts.xml文件添加

 第一句 修改成:

      

 

2) S2-016和S2-017修復步驟:

      重寫struts2 DefaultActionMapper的handleSpecialParameters方法,增長action、redirect、redirectAction等參數的過濾。此方法可修補S2-01六、S2-017漏洞。
  操做步驟:
    2.1 新建com/website/struts2/MyDefaultActionMapper.java,代碼以下:
    2.2 複製MyDefaultActionMapper.class 到 /com/website/struts2/目錄。
    2.3 用struts.xml添加以下代碼:
    2.4 重啓服務器。

      

public class MyDefaultActionMapper extends DefaultActionMapper {
    public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping) {
        Set uniqueParameters = new HashSet();
        Map parameterMap = request.getParameterMap();
        for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext();) {
            String key = (String) iterator.next();

            if ((key.endsWith(".x")) || (key.endsWith(".y"))) {
                key = key.substring(0, key.length() - 2);
            }

            // -- jason.zhou 20130708 add start -- //
            if ((key.contains("redirect:")) || (key.contains("redirectAction:")) || (key.contains("action:"))) {
                return;
            }
            // -- jason.zhou 20130708 add end -- //
            
            if (!uniqueParameters.contains(key)) {
                ParameterAction parameterAction = (ParameterAction) this.prefixTrie.get(key);
                if (parameterAction != null) {
                    parameterAction.execute(key, mapping);
                    uniqueParameters.add(key);
                    break;
                }
            }
        }
    }
}

    

struts.xml

 

<!-- 爲修復struts2 s2-01六、s2-017漏洞,重寫DefaultActionMapper -->  
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class="com.website.struts2.MyDefaultActionMapper" />    
<constant name="struts.mapper.class" value="myDefaultActionMapper" />



 


問題處理結論:可使用工具進行漏洞修復檢測(K8 Struts2 Exploit_20140731.rar

相關文章
相關標籤/搜索