XStream是Java类库,用来将对象序列化成XML(JSON)或反序列化为对象。XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,XStream支持指定别名。XStream支持以方法调用的方式,或是Java标注的方式指定别名。XStream在进行数据类型转换时,使用系统缺省的类型转换器。同时,也支持用户自定义的类型转换器。
CVE-2019-10173包含类型信息的流在unmarshalling时,会再次创建之前写入的对象。因此XStream会基于这些类型信息创建新的实例。攻击者可以操控XML数据,将恶意命令注入在在可以执行任意shell命令的对象中,实现漏洞的利用。
该漏洞原本是CVE-2013-7285,然而 在com.thoughtworks.xstream.converters.reflection.ReflectionConverter类中,canConvert方法中的type != eventHandlerType被删除了,使得原来的漏洞利用方式可以再次被利用。 由于在Xstream1.4.10中的com.thoughtworks.xstream.XStream类增加了setupDefaultSecurity()方法和InternalBlackList转换器,通过黑名单的形式对漏洞进行防御。但是安全模式默认不开启,必须在初始化后才可以使用,eg:XStream.setupDefaultSecurity(xStream)。导致防御失效,造成漏洞的第二次出现。
利用payload
CVE-2020-26258,CVE-2020-26259foo java.lang.Comparable 1 start touch /tmp/success
在运行XStream的服务上,未授权的远程攻击者通过构造特定的序列化数据 ,可造成服务端请求伪造/任意文件删除。
调用栈
getInputStream:107, URLDataSource (javax.activation) get:181, base64Data (com.sun.xml.internal.bind.v2.runtime.unmarshaller) toString:286, base64Data (com.sun.xml.internal.bind.v2.runtime.unmarshaller) getStringValue:121, NativeString (jdk.nashorn.internal.objects) hashCode:117, NativeString (jdk.nashorn.internal.objects) hash:339, HashMap (java.util) put:612, HashMap (java.util) putCurrentEntryIntoMap:107, MapConverter (com.thoughtworks.xstream.converters.collections) populateMap:98, MapConverter (com.thoughtworks.xstream.converters.collections) populateMap:92, MapConverter (com.thoughtworks.xstream.converters.collections) unmarshal:87, MapConverter (com.thoughtworks.xstream.converters.collections) convert:72, TreeUnmarshaller (com.thoughtworks.xstream.core) convert:72, AbstractReferenceUnmarshaller (com.thoughtworks.xstream.core) convertAnother:66, TreeUnmarshaller (com.thoughtworks.xstream.core) convertAnother:50, TreeUnmarshaller (com.thoughtworks.xstream.core) start:134, TreeUnmarshaller (com.thoughtworks.xstream.core) unmarshal:32, AbstractTreeMarshallingStrategy (com.thoughtworks.xstream.core) unmarshal:1404, XStream (com.thoughtworks.xstream) unmarshal:1383, XStream (com.thoughtworks.xstream) fromXML:1268, XStream (com.thoughtworks.xstream) fromXML:1259, XStream (com.thoughtworks.xstream) parseXml:29, XStreamRce (org.joychou.controller)
CVE-2020-26258 SSRF payload
CVE-2020-26259 DeleteFile payload
参考链接
[1]XStream 组件高危漏洞分析与利用
[2]XStream CVE-2019-10173漏洞分析|NOSEC安全讯息平台 - 白帽汇安全研究院
[3]CVE-2020-26258&26259:XStream漏洞复现 - 云+社区 - 腾讯云
[4][CVE-2020-26258/26259]Xstream任意文件删除/SSRF漏洞_公众号shadow sock7-CSDN博客



