Struts2远程代码执行漏洞CVE-2017-9805 s2-052 绿盟科技发布分析和防护方案

5日晚, Struts2远程代码执行漏洞CVE-2017-9805(s2-052),绿盟科技发布扫描工具 ,今天绿盟科技发布了《Struts2 s2-052 REST插件远程代码执行技术分析与防护方案》,报告全文如下

Struts2 s2-052 REST插件远程代码执行技术分析与防护方案

2017年9月5日,Apache Struts发布最新的安全公告,Apache Struts 2.5.x以及之前的部分2.x版本的REST插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9805(S2-052)。漏洞的成因是由于使用XStreamHandler反序列化XStream实例的时候没有任何类型过滤导致远程代码执行。

相关地址:

https://struts.apache.org/docs/s2-052.html

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

影响范围

受影响的版本

  • Struts 2.1.2 – Struts 2.3.33
  • Struts 2.5 - Struts 2.5.12

不受影响的版本

  • Struts 2.3.34
  • Struts 2.5.13

漏洞分析

根据官方的描述信息来看,是REST插件使用到XStreamHandler处理xml数据的时候,由于未对xml数据做任何过滤,在进行反序列将xml数据转换成Object时导致的RCE。

环境搭建

从官方地址( https://archive.apache.org/dist/struts/2.5/struts-2.5-all.zip)下载所有源码包,找到其中的struts2-rest-showcase.war 直接部署到tomcat就行,当然我更喜欢手动编译,直接通过Maven编译即可。具体的部署过程这里就不详细描述,不过有点是需要注意的,由于javax.imageio的依赖关系,我们的环境的jdk版本需要是jdk8以上,jdk8某些低版本也是不行的,本文作者的版本是jdk8_102,后续的一些验证都是在这个版本上做的

补丁分析

环境搭建好了之后,首先我们来看下rest插件的相关配置

从这个文件中就可以看出XStreamHanler就是Content-Type:xml的默认处理句柄,而且可以看出xml是默认支持格式,这也就是说存在rest插件就会存在XStream的反序列化漏洞。

接着看看官方的修复方案,补丁地址:

https://github.com/apache/struts/commit/19494718865f2fb7da5ea363de3822f87fbda264

在官方的修复方案中,主要就是将xml中的数据白名单化,把Collection和Map,一些基础类,时间类放在白名单中,这样就能阻止XStream反序列化的过程中带入一些有害类。

POC的生成

目前公开的Poc是基于javax.imageio的,这是能直接本地执行命令,但是marshelsec提供了11个XStream反序列化库,其中大部分都是基于JNDI,具体包含:CommonsConfiguration, Rome, CommonsBeanutils, ServiceLoader, ImageIO,

BindingEnumeration, LazySearchEnumeration, SpringAbstractBeanFactoryPointcutAdvisor, SpringPartiallyComparableAdvisorHolder, Resin, XBean,

从外部请求类完成反序列化。

漏洞验证及简单分析

下图是一个简单的验证分析图,从Poc中可以看出,请求是PUT,请求的url后缀带xml,请求的Content-Type为delicious/bookmark+xml,请求的xml的前缀是<set>.

接着我们看下触发的执行调用栈:

在XStreamHanler.toObject调用了XStream的fromXml,从而进入反序列化流程。

官方临时缓解措施不起作用

官方给出的缓解措施<constant name="struts.action.extension" value="xhtml,,,json" />,从字面意思也能看出来,这个是针对action的后缀的,也就是说如果后缀不带xml也就可以绕过。操作方式如下:

将下图红框部分修改为:

<constant name="struts.action.extension" value="xhtml,,json" />

具体修改方法为:

使用压缩工具打开对应的jar包,这里以struts2-rest-plugin-2.5.10.1.jar为例:

将struts-plugin.xml进行提取,修改对应的配置,重新放入压缩包中,替换原有配置:

重启服务器即可。

停止xml解析后,再次访问xml请求时,应用就会显示404错误,不再支持xml格式数据的解析。

下面给出测试用例,从我们的poc中也可以看出,POST请求不带xml的后缀直接忽视这个缓解措施。XStream只跟Content-Type有关,如果Content-Type中含有xml,则会交给XStream处理,所以poc该怎么使还怎么使,下面看下我们的验证:

从图上可以看出,我们已经去除了xml的支持,下面来看看Payload的执行效果:

成功弹出计算器,这也就验证了我们的想法。同时通过两个不同poc的比较,我们也能发现一些端倪,Content-Type支持xml的几种格式,POST请求,PUT请求,GET请求甚至是自定义请求都是能触发漏洞,我们可以将poc中<map><entry>换成<set>也能触发漏洞。同时由于XStream本身的Poc多达十一种,做好安全防御确实比较艰难。

技术防护方案

官方修复方案

Struts官方已经发布了最新版本,请受影响的受用尽快升级来进行防护。

参考链接:

  • Struts 2.3.34:
  • https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.34
  • Struts 2.5.13:
  • https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.13

绿盟科技防护建议

绿盟科技检测类产品与服务

公网资产可使用绿盟云 紧急漏洞在线检测,检测地址如下:

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

内网资产可以使用绿盟科技的远程安全评估系统(RSAS V6)或 Web应用漏洞扫描系统(WVSS),以及入侵检测系统(IDS) 进行检测。

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

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

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

http://update.nsfocus.com/update/listWvss

入侵检测系统(NIDS)

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

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

使用绿盟科技防护类产品(IPS/IDS/NF/WAF)进行防护

入侵防护系统(NIPS)

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

下一代防火墙系统(NF)

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

Web应用防护系统(WAF)

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

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

临时解决方案

添加xml过滤器,将所有的contentType为“application/xml”的请求全部过滤。该方案会导致所有contentType为application/xml的请求失效,为暂时性的防护方案。

具体过滤器代码如下:


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

if (request.getContentType() != null) {

String contentType = request.getContentType().toLowerCase(Locale.ENGLISH);

if (contentType != null && contentType.contains("application/xml")) {

response.getWriter().write("Reject!");

} else {

chain.doFilter(request, response);

}

} else {

chain.doFilter(request, response);

}

}

添加该过滤器后,使用POC测试,可以拦截:

需要注意的是,新版本使用的默认限制策略会导致REST的一些函数停止工作,会对一些业务造成影响,建议使用以下新的接口:

org.apache.struts2.rest.handler.AllowedClasses 
org.apache.struts2.rest.handler.AllowedClassNames 
org.apache.struts2.rest.handler.XStreamPermissionProvider

绿盟科技声明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

原文发布时间:2017年9月6日

本文由:绿盟科技发布,版权归属于原作者

原文链接:http://toutiao.secjia.com/struts2-cve-2017-9805-s2-052-protection#

时间: 2024-10-01 04:00:07

Struts2远程代码执行漏洞CVE-2017-9805 s2-052 绿盟科技发布分析和防护方案的相关文章

绿盟科技网络安全威胁周报2017.10 请关注Struts2远程代码执行漏洞CVE-2017-5638

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-10,绿盟科技漏洞库本周新增32条,其中高危1条.本次周报建议大家关注 Struts2 远程代码执行漏洞 CVE-2017-5638 .攻击者通过恶意的Content-Type值,可导致远程代码执行.目前,Apache官方已针对该漏洞已经发布安全公告和补丁.请受影响用户及时检查升级,修复漏洞. 焦点漏洞 Struts2 远程代码执行漏洞 NSFOCUS ID 36031 CVE ID CVE-2017-5638 受影响版本 Struts

深度剖析Struts2远程代码执行漏洞

本文讲的是深度剖析Struts2远程代码执行漏洞, 三月初,安全研究人员发现世界上最流行的JavaWeb服务器框架之一– Apache Struts2存在远程代码执行的漏洞,Struts2官方已经确认该漏洞(S2-046,CVE编号为:CVE-2017-5638)风险等级为高危漏洞. 漏洞描述 该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过修改HTTP请求头中的Content-Type值,构造发送恶意的数据包,利用该漏洞进而在受影响服务器上执行任意系统命令

Apache Struts2远程代码执行漏洞S2-048 CVE-2017-9791 分析和防护方案

今天,Apache Struts官方发布公告,漏洞编号为S2-048 CVE-2017-9791,公告称Struts2和Struts1中的一个Showcase插件可能导致远程代码执行,并评价为高危漏洞. 绿盟科技发布分析和防护方案,其中开放了在线检测工具 https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12 通告全文如下 Apache Struts2远程代码执行漏洞S2-048 CVE-2017-

Struts2远程代码执行漏洞CVE-2017-9805 s2-052 绿盟科技发布扫描工具

5日晚,apache官方发布公告称, Struts2出现严重远程代码执行漏洞 .发布通告不到一天,又更新了受影响版本的范围,增加了Struts 2.12 - Struts 2.3.33 ,此外还有Struts 2.5 - Struts 2.5.12.请尽快升级到 Struts 2.5.13 ,官方通告中称 Struts2在使用带有 XStream 处理程序的 Struts REST 插件,处理 XML 有效负载时,可能发生远程代码执行攻击 绿盟科技随即发布发布预警通告(见本文后半部分),并给出C

Struts2再爆远程代码执行漏洞CVE-2017-12611 S2-053 还是升级到最新版本吧

9月5日, Struts2远程代码执行漏洞CVE-2017-9805 s2-052 的事情刚搞完,7日Apache官方再出通告,又公告了一个远程代码执行漏洞CVE-2017-12611(S2-053),绿盟科技随即发布威胁预警通告,通告全文如下 Apache Struts2( S2-053 )远程代码执行漏洞威胁预警通告 2017年9月7日,Apache Struts发布最新的安全公告,Apache Struts 2 存在一个远程代码执行漏洞,漏洞编号为CVE-2017-12611(S2-053

Office远程代码执行漏洞CVE-2017-8570 大部分版本受影响 PoC已经公开

Microsoft Office出现 远程代码执行漏洞 CVE-2017-8570,office 大部分版本受影响.绿盟科技发布安全威胁通告,通告内容如下: Office远程代码执行漏洞CVE-2017-8570 2017年7月,微软在例行的月度补丁中修复了多个Microsoft Office漏洞,其中的CVE-2017-8570漏洞为一个逻辑漏洞,利用方法简单.网上已经出现该漏洞的利用代码,影响范围较广. 该漏洞为Microsoft Office的一个远程代码执行漏洞.其成因是Microsof

绿盟科技网络安全威胁周报2017.11 关注Apache Struts2 任意代码执行漏洞 CVE-2017-5638

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-11,绿盟科技漏洞库本周新增136条,其中高危63条.本次周报建议大家关注 Apache Struts2 任意代码执行漏洞 CVE-2017-5638 .目前漏洞细节以及利用工具已经曝光,可导致大规模对此漏洞的利用.强烈建议用户检查自己的Struts2是否为受影响的版本,如果是,请尽快升级. 焦点漏洞 Apache Struts2 任意代码执行漏洞 NSFOCUS ID 36031 CVE ID CVE-2017-5638 受影响版本 A

绿盟科技网络安全威胁周报2017.27 关注Apache Struts远程代码执行漏洞CVE-2017-9791

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-26,绿盟科技漏洞库本周新增46条,其中高危9条.本次周报建议大家关注 Apache Struts远程代码执行漏洞 .目前厂商已经为此发布了一个 安全公告 (S2-048)以及相应补丁,请用户及时下载更新. 焦点漏洞 Apache Struts远程代码执行漏洞 NSFOCUS ID  37074 CVE ID  CVE-2017-9791 受影响版本 Apache Struts Version:2.3.x 漏洞点评 Apache Stru

绿盟科技网络安全威胁周报2017.13 关注Apple iOS WI-FI远程代码执行漏洞CVE-2017-6975

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-13,绿盟科技漏洞库本周新增34条,其中高危4条.本次周报建议大家关注 Apple iOS WI-FI远程代码执行漏洞 .目前厂商已经进行了修复,强烈建议用户检查自己的系统是否为受影响版本,如果是,请尽快升级. 焦点漏洞 Apple iOS WI-FI远程代码执行漏洞 NSFOCUS ID 36325 CVE ID CVE-2017-6975 受影响版本 iOS Version <= 10.3 漏洞点评 博通(Broadcom)WI-FI