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" />