![4d7b14001ef721946ba65e67daf76f4e.gif](https://i-blog.csdnimg.cn/blog_migrate/bbe21a984f3f82ce6cc32a35de2ca7cb.gif)
大网安协【2020-77】
近日,大连网络安全信息通报机制合作单位新华三集团提醒,新华三攻防实验室监测到XStream官方更新了两则漏洞风险通告(CVE-2020-26258、CVE-2020-26259),并进行了复现和分析。
1. 漏洞综述
1.1 漏洞背景
XStream是一个简单、易用的Java类库,主要用于在Java对象和XML之间进行序列化和反序列化,支持所有的基础类型、数组及集合等类型,在进行JavaBean序列化或XML文件反序列化时,不需要其它辅助类和映射文件,使得XML序列化更简便。XStream也可以将JavaBean序列化成Json或反序列化,使用非常方便。近日,新华三攻防实验室监测到XStream官方更新了两则漏洞风险通告(CVE-2020-26258、CVE-2020-26259),并进行了复现和分析。
1.2 漏洞描述
XStream中存在反序列化漏洞,在反序列化处理的数据流中,若包含用于重新创建以前写入对象的类型信息,则可基于这些类型信息创建新的实例。未授权的远程攻击者通过替换处理后的输入流或在其中注入对象,从而可造成任意文件删除或服务器端请求伪造。目前该漏洞利用代码已公开,建议受影响用户尽快采取相关防护措施,以防造成损失。
1.3 漏洞复现
搭建存在漏洞的环境(XStream 1.4.13),成功复现两个漏洞。
XStream任意文件删除漏洞(CVE-2020-26259):构造特制的序列化数据,成功删除服务器中存在的文件。
XStream服务端请求伪造漏洞(CVE-2020-26258):构造特制的序列化数据,可以利用该漏洞以服务器的身份发送请求给服务器所在内网环境中的其他主机。
2. 影响范围
XStream <= 1.4.14
3. 严重等级
高危
4. 处置方法
4.1 官方补丁
1、XStream官方已在新版本中修复该漏洞,请升级至XStream 1.4.15及以上版本,下载链接:https://x-stream.github.io/changes.html#1.4.15
4.2临时修复方案
1、XStream 1.4.14版本中使用XStream默认黑名单的用户,可在XStream的设置代码中添加以下两行代码:
xstream.denyTypes(new String[]{ "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypesByRegExp(new String[]{ ".*\\.ReadAllStream\\$FileStream" });
2、XStream 1.4.13版本中想要使用XStream默认黑名单的用户,可在XStream的设置代码中添加以下三行代码:
xstream.denyTypes(new String[]{ "javax.imageio.ImageIO$ContainsFilter", "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypes(new Class[]{ java.lang.ProcessBuilder.class });
xstream.denyTypesByRegExp(new String[]{ ".*\\.ReadAllStream\\$FileStream" });
3、XStream 1.4.7-1.4.12版本中想要使用XStream黑名单的用户,需要设置多个黑名单:
xstream.denyTypes(new String[]{ "javax.imageio.ImageIO$ContainsFilter", "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypes(new Class[]{ java.lang.ProcessBuilder.class, java.beans.EventHandler.class, java.lang.ProcessBuilder.class, java.lang.Void.class, void.class });
xstream.denyTypesByRegExp(new String[]{ ".*\\$LazyIterator", "javax\\.crypto\\..*", ".*\\.ReadAllStream\\$FileStream" });
4、XStream 1.4.6或更低版本的用户可以注册自己的Converter,避免反序列化当前已知的Java关键类型。
xstream.registerConverter(new Converter() {
public boolean canConvert(Class type) {
|type.getName().equals("javax.imageio.ImageIO$ContainsFilter")|type.getName().equals("jdk.nashorn.internal.objects.NativeString")| |
|type == java.lang.Void.class|void.class|Proxy.isProxy(type)|
|type.getName().startsWith("javax.crypto.")|type.getName().endsWith("$LazyIterator")|type.getName().endsWith(".ReadAllStream$FileStream"));|
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
throw new ConversionException("Unsupported type due to security reasons.");
}
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
throw new ConversionException("Unsupported type due to security reasons.");
}
}, XStream.PRIORITY_LOW);
4.3 H3C解决方案
1、H3C安全设备防护方案
新华三IPS规则库将在1.0.115版本支持对该漏洞的识别,H3C全系安全产品可通过升级IPS特征库识别该漏洞的攻击流量,并进行主动拦截。
2、态势感知产品解决方案
H3C态势感知产品已支持该漏洞的检测,通过信息搜集整合、数据关联分析等综合研判手段,发现网络中遭受该漏洞攻击及失陷的资产。
3、H3C云安全能力中心解决方案
H3C云安全能力中心知识库已更新该漏洞信息,可查询对应漏洞产生原理、升级补丁、修复措施等。
5. 参考链接
http://x-stream.github.io/CVE-2020-26258.html
http://x-stream.github.io/CVE-2020-26259.html
大连市信息网络安全协会于2004年5月,经市公安局和市民政局批准成立。协会是由大连市网络安全领域的监管部门、科研和教育部门、宣传媒体,从事网络安全技术服务以及产品研究开发、生产制造的企事业单位,大连市行政区划内的等级保护单位,以及从事网络安全工作的专业技术人员和管理人员,自愿参加的非营利性团体,具备法人资格。协会贯彻执行国家法律法规和政策,团结和组织社会各界关心支持等级保护工作的力量,宣传等级保护工作,增强等级保护单位的安全防范能力,发挥等级保护监管部门与等级保护单位之间的桥梁、纽带作用,反映诉求,协助监管机关规范和加强网络安全等级保护工作的管理,逐步建立和完善的网络安全保障机制,确保网络安全的社会化和产业化的健康发展,做到为监管部门、会员、行业发展服务。