一、背景介绍
Apache Struts框架是一个一个基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller (MVC)的设计模式,可以用来构件复杂的Web应用。
它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理
1.1漏洞描述
根据Apache 于2018年8月22日发布的安全公告表明,Struts2由于部分配置不当或可造成远程命令执行漏洞。
安全公告描述,有两种情况会照成命令执行:
1)当Struts2 的命名空间没有为基础xml配置中定义的结果设置值时,可能造成RCE,同时,其上部操作配置没有通配符namespace。
2)当使用url没有value和action设置的标签并且同时其上部动作配置没有或通配符时,命名空间的条件跟第一种情况相同。
1.2漏洞编号
CVE-2018-11776
1.3漏洞等级
高危
二、修复建议
2.1受影响版本
Struts 2.3 – Struts 2.3.34
Struts 2.5 – Struts 2.5.16
其它不受支持的Struts版本也可能受到影响
2.2解决方案
请尽快升级到Apache Struts版本2.3.35或2.5.17,该版本已解决可能存在的远程代码执行漏洞,同时它们还包含关键的整体主动安全性改进。
如果您暂时无法执行升级操作,可以尝试以下缓解方案。 验证已经为所有XML配置下定义的结果都设置了命名空间,同时验证对所有的JSP中的所有URL 标签中都设置了属性和Action,如果上层的动作配置没有设置命名空间或者通配符命名空间,也同样需要为他们设置。