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-9791

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

相关链接如下:

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

影响范围

影响版本: Apache Struts Version: 2.3.x

不受影响的版本: Apache Struts Version:2.5.10.1

(数据来自绿盟科技威胁情报中心NTI)

Struts2远程代码执行漏洞S2-048防护方案

官方解决方案

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

临时修复方案

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

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

不要使用如下的方式:

messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));

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

技术防护方案

绿盟科技检测方案

  1. 如果您不清楚是否受此漏洞影响,公网资产可使用绿盟云紧急漏洞在线检测,检测地址如下:
    • https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12
  2. 内网资产可以使用绿盟科技的远程安全评估系统(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

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

绿盟科技防护方案

使用绿盟科技防护类产品(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

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

绿盟科技服务方案

绿盟科技提供专业的安全技术服务,全方位的保障客户应用系统安全,避免受此漏洞影响。

  • 短期服务:我们可以提供应急服务,服务内容包括对客户应用系统有针对性的提供修复建议,保障客户系统的安全升级。
  • 中长期服务:结合绿盟科技检测与防护产品,提供7*24的安全运营服务,在客户应用系统遭到安全威胁时第一时间通知客户,并定期进行安全检测,针对安全风险提供专业的解决方案。

Struts2远程代码执行漏洞S2-048技术分析

官方的漏洞描述如下:

从官方的漏洞描述可以知道,这个漏洞本质上是在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

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

绿盟科技声明

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



原文发布时间:2017年7月7日

本文由:安全加 发布,版权归属于原作者

原文链接:http://toutiao.secjia.com/apache-struts2-rce-cve-2017-9791#

本文来自云栖社区合作伙伴安全加,了解相关信息可以关注安全加网站

相关文章
|
6月前
|
存储 SQL Apache
为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
本文将从技术选型的视角,从开放性、系统架构、实时写入、实时存储、实时查询等多方面,深入分析 Apache Doris 与 Elasticsearch 的能力差异及性能表现
545 17
为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
|
3月前
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
10月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
511 5
|
10月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
10月前
|
监控 Cloud Native BI
8+ 典型分析场景,25+ 标杆案例,Apache Doris 和 SelectDB 精选案例集(2024版)电子版上线
飞轮科技正式推出 Apache Doris 和 SelectDB 精选案例集 ——《走向现代化的数据仓库(2024 版)》,汇聚了来自各行各业的成功案例与实践经验。该书以行业为划分标准,辅以使用场景标签,旨在为读者提供一个高度整合、全面涵盖、分类清晰且易于查阅的学习资源库。
362 8
|
存储 JSON 物联网
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
本文我们将聚焦企业最普遍使用的 JSON 数据,分别介绍业界传统方案以及 Apache Doris 半结构化数据存储分析的三种方案,并通过图表直观展示这些方案的优势与不足。同时,结合具体应用场景,分享不同需求场景下的使用方式,帮助用户快速选择最合适的 JSON 数据存储及分析方案。
440 15
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
|
11月前
|
存储 数据挖掘 数据处理
Apache Paimon 是一款高性能的数据湖框架,支持流式和批处理,适用于实时数据分析
【10月更文挑战第8天】随着数据湖技术的发展,越来越多企业开始利用这一技术优化数据处理。Apache Paimon 是一款高性能的数据湖框架,支持流式和批处理,适用于实时数据分析。本文分享了巴别时代在构建基于 Paimon 的 Streaming Lakehouse 的探索和实践经验,包括示例代码和实际应用中的优势与挑战。
496 1
|
11月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
138 2
|
11月前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
177 1
|
11月前
|
消息中间件 druid Kafka
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
241 0

热门文章

最新文章

推荐镜像

更多