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

Apache Struts2在开启动态方法调用(Dynamic Method Invocation)的情况下,攻击者使用REST插件调用恶意表达式可以远程执行代码。
此漏洞编号为CVE-2016-3087,定名为S2-033。

影响范围

影响的版本

  • Struts 2.3.20 – Struts 2.3.28 (不包括 2.3.20.3和 2.3.24.3)。

不受影响的版本

  • Struts 2.3.20.3、 2.3.24.3 或者 2.3.28.1。

漏洞分析

经过对Apache Struts2版本进行回溯,发现修复S2-033的代码和S2-032的代码基本相同。

S2-033

根据官方描述修复S2-032漏洞是在Struts 2.3.20.2和2.3.24.2版本中修复,而官方的版本库中却少了这个版本,直接出现了可以修复S2-033漏洞的Struts 2.3.20.3、 2.3.24.3和2.3.28.1等版本,通过代码直接对比,只是在DefaultActionMapper.java文件中加入了对method成员变量的值的一次过滤,cleanupActionName这个方法是在对“action:”滥用的问题进行添加的,禁止了绝大多数的特殊字符。但是在后来的版本变更中忽略了之前的问题,将method也引入了OGNL表达式(Object Graph Navigation Library)。

代码对比

通过对OGNL表达式的过滤来进行漏洞的修补。

漏洞验证

检查Struts2的配置文件struts.xml,确认“struts.enable.DynamicMethodInvocation” 是否为“true”,如为“true”,且版本在受影响版本范围内,则说明受影响,否则不受影响。

防护方案

  • 如果使用受影响的版本,在允许的情况下禁用动态方法调用(Dynamic Method Invocation),修改Struts2的配置文件struts.xml,将struts.enable.DynamicMethodInvocation设置为“false”。
  • 升级到Struts 2.3.20.3、 2.3.24.3 或者 2.3.28.1。
  • 使用绿盟科技防护类产品(WAF/IPS/NF/SG)进行防护。
  • 已经购买了绿盟科技防护类产品服务的客户可以通过产品升级进行防护。
  • 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  • 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。
  • 长期服务:基金行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

### 声 明

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

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:486207500、570982169
直接询问:010-68438880-8669

Spread the word. Share this post!

Meet The Author

Leave Comment