Apache Struts2 远程代码执行漏洞(S2-057)

来源:scanv2018.08.23

一 漏洞概述

1.1简介

      Apache Struts 是一个免费的开源 MVC 框架,用于创建优雅,现代的 Java Web 应用程序。 它支持约定优于配置,可使用插件体系结构进行扩展,并附带插件以支持 REST,AJAX 和 JSON。
      2018 年 8 月 22 日,Apache Strust2 发布最新安全公告,Apache Struts2 存在远程代码执行的高危漏洞,该漏洞由 Semmle Security Research team 的安全研究员 Man YueMo 汇报,漏洞编号为 CVE-2018-11776(S2-057)。Struts2 在 XML 配置中如果namespace 值未设置且(Action Configuration)中未设置或用通配符 namespace 时可能会导致远程代码执行,当 url 标签未设置 value 和 action 值且上层动作未设置或用通配符 namespace 时也可能会导致远程代码执行。

1.2漏洞危害

当定义XML配置时,如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时,可能会导致远程代码执行;当url标签未设置value和action值且上层动作未设置或用通配符namespace时,可能会导致远程代码执行。

 

1.3 影响版本

  • Struts 2.3 to 2.3.34
  • Struts 2.5 to 2.5.16

 

二 漏洞复现

2.1复现环境

  • Struts 2.5.16
  • Tomcat 8.0.43

2.2环境搭建

1. 下载 Struts 2.5.16 官方示例 showcase
2. 修改 struts-actionchaining.xml,将 namespace 删除,将 result 类型改为 redirectAction


3. 重启 tomcat

2.3复现结果及过程

访问以下链接
http://localhost:8080/struts2-showcase/${100*100}/actionChain1.action
会执行 Ognl 表达式 ${100*100}

从图中可以看到,表达式执行成功了,并且结果展现在跳转的 url 中。

 

三 影响范围

根据 ZoomEye 网络空间搜索引擎对 Apache Struts2 的搜索结果,共找到 111,294,519 条历史记录。

 

三 修复建议

1.目前官方已发布补丁,用户可升级至版本2.3.35或2.5.17。

2.若暂时不想更新,可暂时使用官方提供的临时解决方案:当上层动作配置中未设置或使用通配符 namespace 时,验证所有 XML 配置中的 namespace,同时在 JSP 中验证所有 url 标签的 value 和 action。

3.技术业务咨询:

知道创宇技术业务咨询热线:400-060-9587(政府、国有企业)

                                                028-68360638(互联网企业)

 

 

 

 

 

 

 

热门文章

关注知道创宇云安全

获取安全动态