Struts2升级版本至2.5.10,高危漏洞又来了

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

前情概要

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

漏洞分析请移步:https://yq.aliyun.com/articles/72008

建议

如果这个版本在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版本。

升级说明

一、找不到类

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

找不到那得多正常,查看了一下源码,2.5版本已变更了包路径。

 <filter>
      <filter-name>struts2</filter-name>
      <filter-class>    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
  </filter>

二、配置好了居然找不到Action

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

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

SMI的工作原理如下:

<allowed-methods> / @AllowedMethods 被定义每个动作 - SMI工作,而不打开它,但只是那些动作(加上<global-allowed-methods/>)
SMI已启用,但没有<allowed-methods> / @AllowedMethods 被定义 - SMI工作,但只有<global-allowed-methods/>
SMI已禁用 - 允许调用任何与默认RegEx匹配的操作方法 - ([A-Za-z0-9_$]*)
您可以使用常量重新定义默认RegEx,如下所示 <constant name="struts.strictMethodInvocation.methodRegex" value="([a-zA-Z]*)"/>

在操作定义中使用通配符映射时,SMI有两种方式:

SMI被禁用 - 任何通配符将被替换为默认的RegEx,即:<action name="Person*" method="perform*">将被翻译成allowedMethod = "regex:perform([A-Za-z0-9_$]*)".
启用S​​MI - 不会发生通配符替换,必须严格定义通过注释或<allowed-method/>标记可以访问哪些方法。

也就是说你必须加入这个配置才可以,最好全局设置:

<global-allowed-methods>regex:.*</global-allowed-methods>

三、package中元素顺序的问题

元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?

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

四、可能会出现的问题

如果你的项目中使用的是log4j而不是log4j2,那么问题就来了,你还需要加入log4j-api-2.7.jar 和log4j-core-2.7.jar,并且配置 log4j2.xml(暂且是个空的)。

<?xml version="1.0" encoding="UTF-8"?>   
<configuration status="error">   
  <appenders>   
  </appenders>   
  <loggers>   
    <root level="info">   
    </root>   
  </loggers>   
</configuration>

否则会一直报以下错误,至于为什么,还没深入了解。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

好了,如果启动没有其他问题,应该就可以访问到久违的Action了。

目录
相关文章
|
供应链 安全 IDE
【风险预警】Confluence Wiki OGNL注入漏洞(CVE-2022-26134)
【风险预警】Confluence Wiki OGNL注入漏洞(CVE-2022-26134)
【风险预警】Confluence Wiki OGNL注入漏洞(CVE-2022-26134)
|
XML 自然语言处理 安全
Thinkphp-v6漏洞如何修复
ThinkPHP可以说是快捷、简易的面向对象编程的一个微服务架构,PHP前端框架开发,创建于2006年,遵照Apache2的开源协议进行对外开放,目的是为了快速WEB应用程序开发和优化企业应用软件开发而发展起来的。假如Thinkphp代码开启了多语言这个功能,hack就能通过POST、GET、COOKIES等方式将恶意参数插入进去发送到服务器中进行执行恶意代码,并目录穿越+文件包含,利用pearcmd文件含有这个trick就可以实现RCE远程代码执行漏洞。
279 0
Thinkphp-v6漏洞如何修复
|
安全 PHP
ThinkPHP < 5.0.24 远程代码执行高危漏洞 修复方案
漏洞描述由于ThinkPHP5.0框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。 漏洞评级严重 影响版本ThinkPHP 5.0系列 < 5.
25222 0
|
安全 网络架构
【高危漏洞预警】CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052)
2017年9月5日,Struts官方发布一个严重级别的安全漏洞,该漏洞编号为:S2-052,在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。
3455 0
|
安全 Java
补丁问题导致Java高危漏洞再现 可攻击最新版服务器
本文讲的是补丁问题导致Java高危漏洞再现 可攻击最新版服务器,安全研究人员警告称,甲骨文在2013年发布的一个关键 Java 漏洞更新是无效的,黑客可以轻松绕过。
1387 0