安全通告-XStream拒绝服务漏洞风险提示(CVE-2022-41966)
发布时间:2023-01-03
阅读次数:34228
一、 漏洞公告
近日,监测到XStream官方发布了安全公告,修复了XStream拒绝服务漏洞(CVE-2022-41966),CVSS评分8.2。该漏洞是由于XStream中存在堆栈溢出漏洞,攻击者可以通过操纵输入流来替换或注入对象造成堆栈溢出,从而导致拒绝服务。该漏洞影响范围广泛,官方已发布安全版本,建议受影响的用户尽快采取安全措施。
参考链接: https://x-stream.github.io/CVE-2022-41966.html
二、影响范围
受影响版本:
XStream < 1.4.20
安全版本:
XStream >= 1.4.20
三、漏洞描述
XStream是Java类库,用来将对象序列化成XML(JSON) 或反序列化为对象。XStream提供了所有的基础类型、数组、集合等类型直接转换的支持,因此XML常用于数据交换、对象序列化。
XStream拒绝服务漏洞(CVE-2022-41966):XStream中存在堆栈溢出漏洞,该漏洞允许未经身份认证的远程攻击者通过操纵输入流来替换或注入对象造成堆栈溢出,从而导致拒绝服务。
已验证该漏洞的可利用性:

四、缓解措施
高危:目前漏洞细节和利用代码已公开,官方已发布新版本修复了此漏洞,建议受影响用户及时采取安全措施。
漏洞自查方法:
1、若程序使用Maven打包,查看项目的pom.xml文件,查看xstream的version字段:

2、若程序使用gradle打包,可查看gradle依赖版本:

通过以上方式查看版本号,若版本在漏洞影响范围之内,则可能受到该漏洞的影响。
官方建议:
1、目前官方已发布安全版本修复上述漏洞,建议受影响的用户升级至安全版本。
下载链接: https://x-stream.github.io/download.html
临时缓解措施:
1、在调用XStream的代码中捕获StackOverflowError 异常。
2、如果对象图不引用任何元素,可以设置为NO_REFERENCE模式:
XStream xstream = new XStream();
xstream.setMode(XStream.NO_REFERENCES);
3、如果对象图既不包含Hashtable、HashMap也不包含HashSet(或它的其他变种),那么可以使用安全框架来拒绝使用这些类型:
XStream xstream = new XStream();
xstream.denyTypes(new Class[]{
java.util.HashMap.class, java.util.HashSet.class, java.util.Hashtable.class, java.util.Li });
4、如果只使用 HashMap 或 HashSet 并且XML仅将这些引用为默认值映射或集合时,还可以更新反序列化时 java.util.Map 和 java.util.Set 的默认实现:
xstream.addDefaultImplementation(java.util.TreeMap.class, java.util.Map.class);
xstream.addDefaultImplementation(java.util.TreeSet.class, java.util.Set.class);
来源:XStream官方