1、Apache Struts2的Jakarta Multipart parser插件存在远程代码执行漏洞,漏洞编号为CNNVD-201703-152。攻击者可以在使用该插件上传文件时,修改HTTP请求头中的Content-Type值来触发该漏洞,导致远程执行代码。ApacheStruts2被曝存在远程代码执行漏洞,漏洞编号为S2-046。此次漏洞影响产品包括Apachestruts>=2.3.5,<=2.3.31;Apachestruts>=2.5,<=2.5.10。短短几天内就爆出来2个漏洞,影响范围极其广泛。
2、又能执行远程代码,又能攻破服务器,问题挺吓人!老铁你别怕!分两种修复手段。
3、临时修复方案在用户不便进行升级的情况下,作为临时的解决方案,用户可以进行以下操作来规避风险:修改WEB-INF/classes目录下的struts.xml中的配置1. 在WEB-INF/classes目录下的struts.xml 中的struts 标签下添加<constant name=”struts.custom.i18n.resources” value=”global” />2. 在WEB-INF/classes/ 目录下添加 global.properties,文件内容如下struts.messages.upload.error.InvalidContentTypeException=13. 配置过滤器过滤Content-Type的内容在web应用的web.xml中配置过滤器,在过滤器中对Content-Type内容的合法性进行检测:
4、web.xml中配置的过滤器的代码如下(直接粘贴,看起来不好看,格式化一下就 美观了):public class ContentTypeFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String contentType = request.getContentType().toLowerCase(Locale.ENGLISH); if (contentType != null && contentType.contains("multipart/form-data") && !contentType.startsWith("multipart/form-data")) { response.getWriter().write("Reject!"); } else { chain.doFilter(request, response); } } public void destroy() { }}
5、永久官方解决方案:替换2.3.x的包到2.3.32,需要替换的jar包如下图所示。各个lib已经放到百度云盘,链接为:https://pan.baidu.com/s/1nuF5zQT你也可以去maven仓库一个一个下载,还可以去strtus官网下载,方法有很多,找一个自己喜欢的。把图中的jar的上个版本的jar删除,替换成最新的就可以了
6、每个版本升级都会有细微的变化的;struts2.3.16升级到2.3.32报Invocation of init method failed(初始化方法的调用失败)。是版本升级中改了动态方法调用的配置true-false,在struts.xmlDynamicMethodInvocation" value="true" 改成false,如果是false改成true 试下了解更多建议引入jar源码看看。