• 我的位置:
  • 首頁
  • -
  • 漏洞預(yù)警
  • -
  • 其他
  • -
  • XStream 反序列化漏洞
    • CNNVD編號(hào):未知
    • 危害等級(jí): 高危 
    • CVE編號(hào):CVE-2020-26258、CVE-2020-26259
    • 漏洞類型: 反序列化
    • 威脅類型:未知
    • 廠       商:未知
    • 漏洞來源:深信服
    • 發(fā)布時(shí)間:2020-12-15
    • 更新時(shí)間:2021-01-14

    漏洞簡介

    1、XStream 組件介紹

    XStream是Java類庫,用來將對(duì)象序列化成XML(JSON)或反序列化為對(duì)象。XStream在運(yùn)行時(shí)使用Java反射機(jī)制對(duì)要進(jìn)行序列化的對(duì)象樹的結(jié)構(gòu)進(jìn)行探索,并不需要對(duì)對(duì)象作出修改。XStream可以序列化內(nèi)部字段,包括私private和final字段,并且支持非公開類以及內(nèi)部類。在缺省情況下,XStream不需要配置映射關(guān)系,對(duì)象和字段將映射為同名XML元素。但是當(dāng)對(duì)象和字段名與XML中的元素名不同時(shí),XStream支持指定別名。XStream支持以方法調(diào)用的方式,或是Java標(biāo)注的方式指定別名。XStream在進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),使用系統(tǒng)缺省的類型轉(zhuǎn)換器。同時(shí),也支持用戶自定義的類型轉(zhuǎn)換器。

    2、漏洞描述

    XStream官方在2020年12月份發(fā)布的最新安全補(bǔ)丁中披露,存在一個(gè)反序列化漏洞。XStream處理的流包含類型信息,用來重新創(chuàng)建以前寫入的對(duì)象,因此可以基于這些類型信息創(chuàng)建新的實(shí)例。攻擊者可以操縱處理后的輸入流并替換成注入對(duì)象,從而刪除服務(wù)器端的指定文件(CVE-2020-26259)。運(yùn)行XStream的服務(wù)在處理反序列化數(shù)據(jù)時(shí),攻擊者構(gòu)造特定的 XML/JSON 請(qǐng)求,可以造成服務(wù)端請(qǐng)求偽造(CVE-2020-26258)。

    3、漏洞復(fù)現(xiàn)

    搭建XStream 1.4.14環(huán)境,成功復(fù)現(xiàn)漏洞如下:

    任意文件刪除CVE-2020-26259

    服務(wù)端請(qǐng)求偽造CVE-2020-26258

    漏洞公示

    暫無

    受影響實(shí)體

    目前受影響的XStream版本:

    XStream <=  1.4.14

    補(bǔ)丁

    1、臨時(shí)修復(fù)建議

    對(duì)于使用1.4.14版本的用戶,在聲明XStream對(duì)象之后,可以額外添加下面兩行代碼:

    xstream.denyTypes(new String[]{ "jdk.nashorn.internal.objects.NativeString" });xstream.denyTypesByRegExp(new String[]{ ".*\\.ReadAllStream\\$FileStream" });

    對(duì)于使用1.4.13版本的用戶,在聲明XStream對(duì)象之后,可以額外添加下面三行代碼:

    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" });

    對(duì)于使用1.4.7-1.4.12版本的用戶,在聲明XStream對(duì)象之后,可以額外添加下面三行代碼:

    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" });

    對(duì)于使用1.4.6及以下版本的用戶,在聲明XStream對(duì)象之后,可以額外添加如下代碼:

    xstream.registerConverter(new Converter() {  public boolean canConvert(Class type) {    return type != null && (type == java.beans.EventHandler.class || type == java.lang.ProcessBuilder.class        || 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);

    2 、官方解決方案

    目前廠商已發(fā)布升級(jí)補(bǔ)丁修復(fù)漏洞,請(qǐng)受影響用戶及時(shí)更新官方補(bǔ)丁。官方鏈接如下:

    https://x-stream.github.io/download.html

    3、深信服解決方案

    深信服下一代防火墻】可輕松防御此漏洞, 建議部署深信服下一代防火墻的用戶更新至最新的安全防護(hù)規(guī)則,可輕松抵御此高危風(fēng)險(xiǎn)。

    深信服云盾】已第一時(shí)間從云端自動(dòng)更新防護(hù)規(guī)則,云盾用戶無需操作,即可輕松、快速防御此高危風(fēng)險(xiǎn)。
    深信服安全感知平臺(tái)】可檢測(cè)利用該漏洞的攻擊,實(shí)時(shí)告警,并可聯(lián)動(dòng)【深信服下一代防火墻等產(chǎn)品】實(shí)現(xiàn)對(duì)攻擊者ip的封堵。
    深信服安全運(yùn)營服務(wù)】深信服云端安全專家提供7*24小時(shí)持續(xù)的安全運(yùn)營服務(wù)。對(duì)存在漏洞的用戶,檢查并更新了客戶防護(hù)設(shè)備的策略,確??蛻舴雷o(hù)設(shè)備可以防御此漏洞風(fēng)險(xiǎn)。