技术分析 | Struts2 S2-048漏洞:跟踪攻击趋势,成功检测防御

2017-07-10 18:54:33 2061

7月7日,Apache Struts官方发布了漏洞编号为:S2-048的高危漏洞公告。

阿里云安全团队2小时内发布官方安全建议,跟踪S2-048的全球攻击趋势,并对不同漏洞版本进行了对比分析。


image

目前,阿里云云盾态势感知已支持检测,WAF默认支持防御。

一、影响范围

如果在ApacheStruts 2.3.x系列中启用了struts2-struts1-plugin插件,会受到该漏洞的影响。

二、攻击源分析

阿里云安全团队对S2-048在全球范围内的攻击源进行分析。

image


其中,有3/4的攻击源来自国内的北京、上海地区,1/4来自海外(美国、韩国)和香港地区。

三、原理及利用方法分析

在SaveGangsterAction.java的文件里看的有execute方法的实现,其中gforn.getName()是攻击者可控的,gforn.getName()的值可以带入messages结构中;


image


在Struts1Action.java里可以看到,其实是调用SaveGangsterAction.execute方法,然后再调用getText(msg.getKey())

getText方法会把actionmessages传递给com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage ,

其中又调用了com.opensymphony.xwork2.util.TextParseUtil.translateVariables,它用来调用OGNL 表达式用处理字符串表达式;

image

使用EL表达式简单测试$(1>2);


image


漏洞测试生效。

四、漏洞对比分析

阿里云安全团队将S2-045及S2-048漏洞的利用原理做了对比分析。


image


对比S2-045和S2-048的漏洞攻击次数发现,S2-045的危害程度和关注度比S2-048高;在S2-048漏洞爆发后,由于未公开POC和利用工具,当天被利用攻击的几率比较小,安全风险相对较低。

image

五、安全建议

  • 及时检测是否受到漏洞影响:使用的Struts是 2.3.x版本,是否启用了struts2-struts1-plugin插件。使用阿里云云盾态势感知进行漏洞检测。
  • 阿里云上用户可以禁用、关闭(删除)struts-2.3.xappsstruts2-showcase.war包; 建议关闭devmod模式(请根据自身业务情况决定是否关闭)。
  • 开发者可以使用resourcekeys替代,将原始消息直接传递给ActionMessage的方式,以此作为根治措施。

正确方式:

messages.add("msg",new ActionMessage("struts1.gangsterAdded", gform.getName()))

错误方式:

messages.add("msg",new ActionMessage("Gangster " + gform.getName() + " wasadded"))
  • 建议将Struts2升级到最新版本2.5.10.1。
  • 使用阿里云云盾WAF对该漏洞进行防御。

原文链接

安全 java 阿里云 HTTPS 云盾 Image 表达式 插件 Struts

作者

觉宇
TA的文章

相关文章