struts2-2.3.24.1升级Struts2-2.3.32避免远程代码执行漏洞
2017-03-20 11:38
477 查看
近日,安恒信息安全研究院WEBIN实验室高级安全研究员nike.zheng发现著名J2EE框架-Struts2存在远程代码执行的严重漏洞。
漏洞编号:
S2-045,CVE-2017-5638
漏洞名称:
基于Jakarta plugin插件的Struts远程代码执行漏洞
官方评级:
高危
漏洞描述:
ApacheStruts 2被曝出存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。
漏洞利用条件和方式:
黑客通过Jakarta 文件上传插件实现远程利用该漏洞执行代码。
1.基于Jakarta(Jakarta Multipart parser)插件的文件上传功能
2.恶意攻击者精心构造Content-Type的值
漏洞影响范围:
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10
新版本官方有下载地址:
https://dist.apache.org/repos/dist/release/struts/2.5.10.1/ https://dist.apache.org/repos/dist/release/struts/2.3.32/
于是下载最新的Struts2-2.3.32相关jar包进行升级,但因为涉及工程中其它类库jar包兼容问题,第一步只替换了以下jar包:
struts2-core-2.3.32.jar
struts2-dojo-plugin-2.3.32.jar
struts2-json-plugin-2.3.32.jar
struts2-sitemesh-plugin-2.3.32.jar
struts2-spring-plugin-2.3.32.jar
xwork-core-2.3.32.jar
启动Tomcat7,发现严重错误Error filterStart,日志内容如下:
......
三月 13, 2017 11:38:06 上午 org.apache.catalina.core.StandardContext startInternal
严重: Error filterStart
三月 13, 2017 11:38:06 上午 org.apache.catalina.core.StandardContext startInternal
严重: Context [/] startup failed due to previous errors
......
查看Tomcat localhost.log日志有如下错误:
......
三月 13, 2017 11:32:54 上午 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter StrutsPrepareFilter
java.lang.NoSuchMethodError: ognl.SimpleNode.isSequence(Lognl/OgnlContext;)Z
at com.opensymphony.xwork2.ognl.OgnlUtil.isEvalExpression(OgnlUtil.java:310)
at com.opensymphony.xwork2.ognl.OgnlUtil.checkEnableEvalExpression(OgnlUtil.java:421)
at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:376)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:288)
at com.opensymphony.xwork2.ognl.OgnlUtil.internalSetProperty(OgnlUtil.java:617)
at com.opensymphony.xwork2.ognl.OgnlUtil.setProperties(OgnlUtil.java:180)
......
怀疑ognl的jar包有不兼容的问题,于是将ognl-3.0.6.jar替换为Struts2-2.3.32类库中使用的ognl-3.0.19.jar,重启Tomcat7,问题得以解决,应用可以访问,继而验证其他业务功能是否正常,发现部分jsp页面无法正常获取数据,查看相关代码发现程序员开发时Action使用了形如sList的变量(即第一个字母小写,第二个字母大写的驼峰写法),并添加了相应的get/set方法,但新的ognl-3.0.19.jar在执行过程中不能正确调用相应的get/set方法导致页面无法得到相关数据,不能正常显示。
于是,搜索替换所有Action中的形如sList的变量改为slist,修改对应的set/get方法名,页面遂恢复正常。没有研究过ognl-3.0.19.jar与之前版本原来上又和不同,从现象来看“第一个字母小写,第二个字母大写的驼峰写法”会导致这样的错误,解决方法就是把变量名改为全小写,或者大写字母前有一个以上的小写字母驼峰写法,如sList改为slist或者ssList。
希望能对遇到类似奇葩问题而不知所措的朋友有所帮助。
漏洞编号:
S2-045,CVE-2017-5638
漏洞名称:
基于Jakarta plugin插件的Struts远程代码执行漏洞
官方评级:
高危
漏洞描述:
ApacheStruts 2被曝出存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。
漏洞利用条件和方式:
黑客通过Jakarta 文件上传插件实现远程利用该漏洞执行代码。
1.基于Jakarta(Jakarta Multipart parser)插件的文件上传功能
2.恶意攻击者精心构造Content-Type的值
漏洞影响范围:
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10
新版本官方有下载地址:
https://dist.apache.org/repos/dist/release/struts/2.5.10.1/ https://dist.apache.org/repos/dist/release/struts/2.3.32/
于是下载最新的Struts2-2.3.32相关jar包进行升级,但因为涉及工程中其它类库jar包兼容问题,第一步只替换了以下jar包:
struts2-core-2.3.32.jar
struts2-dojo-plugin-2.3.32.jar
struts2-json-plugin-2.3.32.jar
struts2-sitemesh-plugin-2.3.32.jar
struts2-spring-plugin-2.3.32.jar
xwork-core-2.3.32.jar
启动Tomcat7,发现严重错误Error filterStart,日志内容如下:
......
三月 13, 2017 11:38:06 上午 org.apache.catalina.core.StandardContext startInternal
严重: Error filterStart
三月 13, 2017 11:38:06 上午 org.apache.catalina.core.StandardContext startInternal
严重: Context [/] startup failed due to previous errors
......
查看Tomcat localhost.log日志有如下错误:
......
三月 13, 2017 11:32:54 上午 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter StrutsPrepareFilter
java.lang.NoSuchMethodError: ognl.SimpleNode.isSequence(Lognl/OgnlContext;)Z
at com.opensymphony.xwork2.ognl.OgnlUtil.isEvalExpression(OgnlUtil.java:310)
at com.opensymphony.xwork2.ognl.OgnlUtil.checkEnableEvalExpression(OgnlUtil.java:421)
at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:376)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:288)
at com.opensymphony.xwork2.ognl.OgnlUtil.internalSetProperty(OgnlUtil.java:617)
at com.opensymphony.xwork2.ognl.OgnlUtil.setProperties(OgnlUtil.java:180)
......
怀疑ognl的jar包有不兼容的问题,于是将ognl-3.0.6.jar替换为Struts2-2.3.32类库中使用的ognl-3.0.19.jar,重启Tomcat7,问题得以解决,应用可以访问,继而验证其他业务功能是否正常,发现部分jsp页面无法正常获取数据,查看相关代码发现程序员开发时Action使用了形如sList的变量(即第一个字母小写,第二个字母大写的驼峰写法),并添加了相应的get/set方法,但新的ognl-3.0.19.jar在执行过程中不能正确调用相应的get/set方法导致页面无法得到相关数据,不能正常显示。
于是,搜索替换所有Action中的形如sList的变量改为slist,修改对应的set/get方法名,页面遂恢复正常。没有研究过ognl-3.0.19.jar与之前版本原来上又和不同,从现象来看“第一个字母小写,第二个字母大写的驼峰写法”会导致这样的错误,解决方法就是把变量名改为全小写,或者大写字母前有一个以上的小写字母驼峰写法,如sList改为slist或者ssList。
希望能对遇到类似奇葩问题而不知所措的朋友有所帮助。
相关文章推荐
- Struts2再爆远程代码执行漏洞
- Struts2(s2-016)远程代码执行漏洞详细代码分析
- Struts2再爆远程代码执行漏洞
- Struts2 S2 – 032远程代码执行漏洞分析报告
- struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
- OpenSSH 曝远程代码执行漏洞,尽快升级
- struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
- Struts2 S2-029远程代码执行漏洞
- Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程
- OpenSSH 曝远程代码执行漏洞,尽快升级
- Struts2远程代码执行漏洞检测的原理和代码级实现
- Struts2远程代码执行漏洞预警
- Struts2 S2 – 032远程代码执行漏洞分析报告 .
- Struts2 S2-016,S2-017远程代码执行漏洞解决,修复
- 阿里巴巴支付宝远程代码执行漏洞-0DAY
- DZ7.1 and 7.2 0远程代码执行漏洞获取Webshell
- JBOSS远程代码执行漏洞
- Windows写字板HTML帮助文件处理远程代码执行漏洞
- 阿里巴巴支付宝远程代码执行漏洞-0DAY
- struts2代码执行漏洞