北京时间9月5日晚,国家信息安全漏洞共享平台(CNVD)收录了Apache struts2 S2-052远程代码执行漏洞(CNVD-2017-25267 ,对应CVE-2017-9805),攻击者可以通过构造恶意XML请求在目标服务器上远程执行任意代码,获得服务器权限。目前相关利用代码已在互联网公开并传播,有可能导致互联网上大规模的攻击尝试。
一、漏洞情况分析
Struts2是第二代基于Model-View-Controller(MVC)模型的java企业级web应用框架,并成为国内外较为流行的容器软件中间件。Xstream是一种OXMapping技术,是用来处理XML文件序列化的框架,在将JavaBean序列化或将XML文件反序列化的时候,不需要其它辅助类和映射文件。Xstream也可以将JavaBean序列化成JSON或反序列化,使用非常方便。
Struts2的REST插件使用带有XStream例程的XStreamHandler执行反序列化操作,但在反序列化过程中未做任何类型过滤,导致攻击者可能在反序列化XML负载时构造恶意的XML内容执行任意代码。
CNVD对漏洞的综合评级均为“高危”。
二、漏洞影响范围
根据官方公告情况,漏洞影响Apache Struts 2.5至Struts 2.5.12版本。参考长亭公司的核验结果,Apache Struts 2.3.33版本也受到漏洞影响且官方网站未发布对应版本的更新。综合评估认为,虽然攻击原理通用,但由于目前攻击利用过程存在远程指令执行回显的技术限制以及需要有REST插件应用的前提条件,本次S2-052漏洞威胁达不到S2-045/046漏洞的威胁级别。
三、漏洞处置建议
根据官方发布的安全更新,建议升级到Apache Struts版本2.5.13,下载地址:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.13。
此外,可以采用如下临时解决方案:
1、如果非网站功能必需,建议删除Struts REST插件,或仅用于服务器普通页面和JSONs:
2、限制服务端扩展类型,删除XML支持。
注:兼容问题
由于可用类的默认限制,某些REST操作可能会影响到正常的网站功能。在这种情况下,请调查介绍的新接口以允许每个操作定义类限制,这些接口是:
org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider
附:参考链接:
https://cwiki.apache.org/confluence/display/WW/S2-052
http://www.cnvd.org.cn/flaw/show/CNVD-2017-25267
本公告在编写过程中重点参考了CNVD技术组成员单位启明星辰公司、杭州安恒公司、绿盟科技公司、知道创宇公司、奇虎360公司的公开分析结果。