Apache Struts2 远程代码执行漏洞分析CVE-2019-0230

  • A+
所属分类:安全文章

Apache Struts2存在远程代码执行漏洞,编号CVE-2019-0230。Struts2在某些标签属性中使用OGNL表达式时,因为没有做内容过滤,在传入精心构造的请求时,可以造成OGNL二次解析,执行指定的远程代码。





漏洞名称:Apache Struts远程代码执行漏洞CVE-2019-0230

威胁等级:高危

影响范围:Struts2 2.0.0 - 2.5.20

漏洞类型:远程代码执行

利用难度:中等






漏洞分析



1 Apache Struts2组件介绍

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表达式,最终就可以导致远程代码执行。


3 漏洞分析

搭建Apache Struts2 2.5.16环境,首先直接传入执行代码的ognl表达式。

可以发现在控制台输出如下内容:

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230

从而定位到SecurityMemberAccess类的isAccessible方法,可以发现该方法做了一些过滤,并且上面出现的语句也是在这里输出的:

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230

梳理调用栈,可以找到位于OgnlRuntime类中的isMethodAccessible方法,该方法通过对不同的memberAccess调用不同的isAccessible方法:

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230

结合之前的漏洞,需要将context中的memberAccess属性设置为没做任何过滤的DefaultMemberAccess类。构造流程是首先获取到OgnlUtil类,然后将黑名单package和类的属性置空或者做其他修改,最后修改memberAccess属性。


跳转到OgnlUtil类,发现set方法可以直接实现上述提到的黑名单类和包的覆写,于是一条完整的调用链就提取出来了。

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230

值得一提的是,在2.5.16版本之后,上面提到的set方法由覆写变成追加,所以需要寻找新的置空方式。

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230


4 漏洞复现

搭建Apache Struts 2.5.16漏洞环境,使用构造的payload进行攻击,最终执行指定代码,弹出计算器,效果如图:

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230


影响范围



目前受影响的Struts2版本:

Apache Struts2  2.0.0 - 2.5.20


解决方案



1修复建议

Struts 2.5.22及以后的版本已经防御此漏洞,请受漏洞影响的用户下载最新版本。

下载链接:

https://struts.apache.org/download.cgi#struts2522


2 深信服解决方案

深信服下一代防火墙】可轻松防御此漏洞,建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。


深信服云盾】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。


深信服安全感知平台】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。


深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。


时间轴



2020/8/13



Apache Struts官网披露该远程代码执行漏洞

2020/8/14



深信服千里目安全实验室发布漏洞安全通告

Apache Struts2 远程代码执行漏洞CVE-2019-0230

2020/8/27 



深信服千里目安全实验室发布漏洞分析文章


参考链接



https://struts.apache.org/download.cgi#struts2522



点击阅读原文,及时关注并登录深信服智安全平台,可轻松查询漏洞相关解决方案

Apache Struts2 远程代码执行漏洞分析CVE-2019-0230


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: