一 漏洞概述
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(互联网企业)