一. 漏洞概述
2017年9月5日,Apache Struts 2官方发布一个严重级别的安全漏洞公告,该漏洞由国外安全研究组织lgtm.com的安全研究人员发现,漏洞编号为CVE-2017-9805(S2-052),在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。
二. 漏洞基本信息
漏洞编号:
CVE-2017-9805
漏洞名称:
Struts2 REST插件远程执行命令漏洞(S2-052)
官方评级: **
严重
**漏洞描述:
当Struts2使用REST插件使用XStream的实例xstreamhandler处理反序列化XML有效载荷时没有进行任何过滤,可以导致远程执行代码,攻击者可以利用该漏洞构造恶意的XML内容获取服务器权限。
漏洞利用条件和方式:
利用条件:使用REST插件并在受影响版本范围内。
利用方式:攻击者构建恶意数据包远程利用。
漏洞影响范围:
Struts 2.3.x全系版本(根据实际测试,2.3版本也存在该漏洞)
Struts 2.5 - Struts 2.5.12
三. 漏洞详细分析信息
本次Struts2漏洞是因为它的一个REST插件struts2-rest-plugin.jar用到了XStreamHandler这个类,这个类对http请求中content-type是application/xml的,调用XStream进行处理,这里先看一下污点传入,如图:
然而漏洞真正存在域XStream中,触发的根本在于javax.imageio.spi.FilterIterator类的next()会调用FilterIteratorFilter的filter(),然后java