Apache Struts2存在远程代码执行漏洞,编号CVE-2019-0230。Struts2在某些标签属性中使用OGNL表达式时,因为没有做内容过滤,在传入精心构造的请求时,可以造成OGNL二次解析,执行指定的远程代码。
1 Apache Struts2组件介绍
Apache Struts2是一个基于MVC设计模式的Web应用框架。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。
2 漏洞描述
Struts2在某些标签属性中使用OGNL表达式时,因为没有做内容过滤,在传入精心构造的请求时,可以造成OGNL二次解析,执行指定的远程代码。
<s:url var="url" namespace="/employee" action="list"/><s:a id="%{skillName}" href="%{url}">List available Employees</s:a>
在上面的例子中。如果攻击者可以修改skillName的值,并传入一个恶意的OGNL表达式,最终就可以导致远程代码执行。
影响范围
目前受影响的Struts2版本:
Struts 2.0.0 - 2.5.20
解决方案
1修复建议
Struts 2.5.22及以后的版本已经修复此漏洞,请受漏洞影响的用户下载最新版本。
下载链接:
https://struts.apache.org/download.cgi#struts2522