您的位置:首页 > 编程语言 > Java开发

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。

        希望能对遇到类似奇葩问题而不知所措的朋友有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: