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

Struts2 最新高危漏洞详解

2017-07-25 16:08 323 查看
由于计算机起源于美国,因此很多新兴技术和框架也都出于美国的一些大公司。虽然国内的BAT也在开源技术上有一些贡献,但目前来说还是比较缺少用户来支持。这也就导致了国内大部分互联网公司大量的依赖国外的技术。如果某些开源框架出了高危漏洞,就将影响一大批中国互联网公司。

最近 Struts2 又爆出了一个高危漏洞,据说影响了大半个中国互联网。涵盖金融、教育、医疗、电商等各个行业。哪么这个高危漏洞到底是怎样形成的呢?本文将为你详细讲解!


Struts2 漏洞概要

2017年3月6日,Apache Struts2被曝存在远程命令执行漏洞,漏洞编号:S2-045,CVE编号:CVE-2017-5638,官方评级为高危,该漏洞是由于在使用基于Jakarta插件的文件上传功能条件下,恶意用户可以通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行任意系统命令,导致系统被黑客入侵。

漏洞分析请移步:阿里云帮助云上用户应对Struts2高危漏洞


漏洞解决方案

如果这个版本在Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10之间则存在漏洞,请升级到struts 2.3.32或2.5.10.1版本(哔了狗了狗了,公司还在用struts2)。

由于目前使用版本是struts2-core-2.3.28,于是赶紧升了下级别,略过2.3 直接升级到2.5版本。


升级说明


找不到类

查看了一下源码,2.5版本已变更了包路径。


配置好了居然找不到Action

什么情况?是不是有点怀疑人生了,赶紧去http://struts.apache.org/ struts2的官网扒拉扒拉。

由于版本跨度大,2.5版本升级了很多特性,在Struts 2.5中,严格DMI被扩展,它被称为严格方法调用 又名SMI。你可以想象DMI是一个“边境警察”,SMI是一个“税务警察”,并注意内部。使用此版本,SMI默认情况下启用(strict-method-invocation属性默认设置为 true在 struts-default包中),您可以选择禁用它每个包 - 没有全局开关禁用整个应用程序的SMI。

SMI的工作原理如下:
也就是说你必须加入这个配置才可以,最好全局设置:


package中元素顺序的问题

出现此报错,你就要注意了,一定要检查package中 global-allowed-methods 的位置,然后按照报错指定顺序放置配置。


其他问题

如果你的项目中使用的是log4j而不是log4j2,那么问题就来了,你还需要加入log4j-api-2.7.jar 和log4j-core-2.7.jar,并且配置 log4j2.xml(暂且是个空的)。
否则会一直报以下错误,至于为什么,还没深入了解。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息