绿盟

44118太阳成城集团

  • 基础设施安全

    基础设施安全
  • 数据安全

    数据安全
  • 云计算安全

    云计算安全
  • 工业互联网安全

    工业互联网安全
  • 物联网安全

    物联网安全
  • 信息技术应用创新

    信息技术应用创新
  • 全部产品

    全部产品
  • 全部解决方案

    全部解决方案

基础设施安全


  • 政府

    政府
  • 运营商

    运营商
  • 金融

    金融
  • 能源

    能源
  • 交通

    交通
  • 企业

    企业
  • 科教文卫

    科教文卫

返回列表

Apache Struts2 远程代码执行漏洞(S2-048) 技术分析与防护方案

2017-07-09

发布者:44118太阳成城集团

综述

2017年7月7日,Apache Struts发布最新的安全公告,Apache Struts 2.3.x的strus1插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791S2-048)。攻击者可以构造恶意的字段值通过Struts2的Struts1的插件,远程执行代码。

相关链接如下:

https://cwiki.apache.org/confluence/display/WW/S2-048

威胁影响

全球分布图

(数据来自44118太阳成城集团威胁情报中心NTI)

国内分布图

(数据来自44118太阳成城集团威胁情报中心NTI)

全球排行

(数据来自44118太阳成城集团威胁情报中心NTI)

国内排行

(数据来自44118太阳成城集团威胁情报中心NTI)

 

防护方案

官方解决方案

   官方已经发布了版本更新,建议用户升级到Struts 2.5.10.1版本,下载链接如下所示:

·  https://github.com/apache/struts/releases/tag/STRUTS_2_5_10_1

·   http://struts.apache.org/download.cgi

临时修复方案

·  开发者通过使用资源调用方式替代原始值传递方式给ActionMessage的方式。 如下所示:

不要使用如下的方式:

·  在非必要的情况下禁用struts2-struts1-plugin插件。将struts2-struts1-plugin-2.3.x.jar文件从 “/WEB-INF/lib”目录中移动到其他文件夹或者删除。

技术防护方案

44118太阳成城集团检测方案

1)  如果您不清楚是否受此漏洞影响,公网资产可使用绿盟云紧急漏洞在线检测,检测地址如下:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12

2)  内网资产可以使用44118太阳成城集团的远程安全评估系统(RSAS V6 )或Web应用漏洞扫描系统(WVSS) 进行检测。

·  远程安全评估系统(RSAS V6)

http://update.nsfocus.com/update/listRsasDetail/v/vulweb

·  Web应用漏洞扫描系统(WVSS)

http://update.nsfocus.com/update/listWvssDetail/v/6/t/plg

通过上述链接,升级至最新版本即可进行检测!

44118太阳成城集团防护方案

使用44118太阳成城集团防护类产品(IPS/IDS/NF/WAF)进行防护

·  入侵防护系统(IPS)

http://update.nsfocus.com/update/listIps

·  入侵检测系统(IDS)

http://update.nsfocus.com/update/listIds

·  下一代防火墙系统(NF)

http://update.nsfocus.com/update/listNf

·  Web应用防护系统(WAF)

http://update.nsfocus.com/update/wafIndex

通过上述链接,升级至最新版本即可进行防护!

44118太阳成城集团服务方案

44118太阳成城集团提供专业的安全技术服务,全方位的保障客户应用系统安全,避免受此漏洞影响。

·  短期服务:我们可以提供应急服务,服务内容包括对客户应用系统有针对性的提供修复建议,保障客户系统的安全升级。

·  中长期服务:结合44118太阳成城集团检测与防护产品,提供7*24的安全运营服务,在客户应用系统遭到安全威胁时第一时间通知客户,并定期进行安全检测,针对安全风险提供专业的解决方案。

技术分析

漏洞简介

Apache Struts2.3.x系列版本中struts2-struts1-plugin存在远程代码执行漏洞,进而导致任意代码执行。

漏洞分析

官方的漏洞描述如下:

 

从官方的漏洞描述可以知道,这个漏洞本质上是在struts2-struts1-plugin这个jar包上。这个库是将struts1的action封装成struts2的action以便在strut2上使用。本质问题出在struts2-struts1-plugin包Struts1Action.java文件中,Struts1Action类中的execute方法调用了getText函数,这个函数会执行ognl表达式,更为严重的是getText的输入内容是攻击者可控的。以下会基于struts2的官方示例进行分析。

Struts1Action的execute方法代码如下,从红框中信息可以看出其实质是调用SaveGangsterAction.execute方法,然后再调用getText(msg.getKey()….)。

 

 

在struts2-showcase的integration模块下有SaveGangsterAction类的execute方法(位于SaveGangsterAction.java文件)用于实现。具体如下:

 

 

在这个方法中就带入有毒参数gforn.getName()放到了messages结构中,gform.getName()的值是从客户端获取的。

Gangsterform.getName()的实现如下:

 

 

这里传入了${1+1},有毒参数已经带入,就差ognl表达式,继续回到Struts1Action类的execute方法下半部分,有getText()的入口,能清晰看到参数已经被污染,具体如下图:

 

 

下面进入getText的实现函数,这个调用栈比较深,首先我们给出栈图:

 

 

从Struts1action.execute函数开始,到ActionSupport的getText()方法,方法如下:

 

 

进入TextProviderSuppport.getText,调用其另一个重载类方法getText()示例如下:

 

 

进入LocalizeTextUtil.findText,继续分析其实现:从名字上也能看出其是根据用户的配置做一些本地化的操作。代码如下:

 

 

到这里就能发现这就是一个很典型的ognl表达式入口,先是得到一个valueStack,再继续递归得到ognl表达式的值。官方参考链接:

https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html

最后附上一个简单的测试用例图:

 

 

 

您的信息

*姓名
*联系电话
*邮箱
*所在行业
*所在公司
*验证码
提交到邮箱

<<上一篇

绿盟网站安全解决方案白皮书

>>下一篇

WannaCry勒索软件溯源分析

您的联系方式

*姓名
*单位名称
*联系方式
*验证码
提交到邮箱

购买热线

  • 购买咨询:

    400-818-6868-1

提交项目需求

欢迎加入44118太阳成城集团,成为我们的合作伙伴!
  • *请描述您的需求
  • *最终客户名称
  • *项目名称
  • 您感兴趣的产品
  • 项目预算
您的联系方式
  • *姓名
  • *联系电话
  • *邮箱
  • *职务
  • *公司
  • *城市
  • *行业
  • *验证码
  • 提交到邮箱

服务支持

支持热线
支持热线
400-818-6868
44118太阳成城集团社区
44118太阳成城集团社区
资料下载|在线问答|技术交流
微博
微博

微博

微信
微信

微信

B站
B站

B站

抖音
抖音

抖音

视频号
视频号

视频号

服务热线

400-818-6868

服务时间

7*24小时

© 2023 44118太阳成城集团 - 太阳成集团44118平台首页 All Rights Reserved . 京公网安备 11010802021605号 京ICP备14004349号 京ICP证110355号