Apache Struts2 是一个基于 MVC 架构的,用于开发 Java EE 网络应用程序的 Web 框架,它本质上相当于一个Servlet。在 MVC 设计模式中,Apache Struts2 作为控制器来建立模型与视图的数据交互。
一、 漏洞描述
近日发现Apache Struts2 组件存在远程代码执行漏洞的信息,漏洞编号:CVE-2021-31805,漏洞威胁等级:高危。该漏洞是由于 Apache Struts2 对 CVE-2020-17530(S2-061) 的修复不够完整,导致一些标签属性仍然可以执行 OGNL 表达式,攻击者利用该漏洞可以构造恶意数据远程执行任意代码。
二、影响范围
Apache Struts2 是当前 Java 企业级 Web 应用开发的主流框架之一,具有简洁、易扩展等优点。其作为底层框架来使用,极大简化了 Web 应用从构建、部署的开发周期,被广泛用于工业界中,使用范围较广。
若基于该框架开发的应用,将用户输入作为 OGNL 表达式来执行,则可能受该漏洞影响。
目前受影响的 Apache Struts2 版本:
2.0.0 <= Apache Struts2 <= 2.5.29
三、解决方案
版本检测方法1
全盘搜索 struts2-core,如果存在 struts2-core-{version}.jar,且所使用的版本号在受影响范围内:
则用户可能受漏洞影响。
版本检测方法2
如果项目是由 maven 编译的(一般在项目根目录下会有 pom.xml)
打开 pom.xml 文件,如图:
在此文件中搜索 struts2-core,如果可以搜索到如下关键字,且所使用的版本号在受影响范围内,则可能受该漏洞影响。
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.29</version></dependency>
版本升级
官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。版本下载链接如下:
https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.30