Note
deserialize
fastjson 是一個 Java 的 library,可以將 Java Object 和 JSON 格式互相轉換,主要為 Alibaba 開發
@type
指定反序列化的 class 類型fastjson [v1.2.25,)
checkAutoType
fastjson 1.2.25
以及之後的版本中,fastjson AutoType 這一機制帶來的安全隱患,增加了一層名為 checkAutoType 的檢測機制notSupportAutoType
也不代表不支援 AutoType,還是是會進入 checkAutoType 進行檢查,裡面不外乎就是做各種黑白名單的過濾或是特殊案例的例外處理,導致許多邏輯漏洞存在在此 function 中checkAutoType 運作邏輯
autoTypeSupport
是不是等於 True歸納一個小結論,若是想要通過 checkAutoType
的驗證有以下方法
透過 expectClass != NULL 的條件繞過 checkAutoType
background 提到想要通過 checkAutoType
的驗證有 5 種方法,這邊使用的是第 5 種
剛剛提到繼承的 expectClass 不能在黑名單中,但在 fastjson v1.2.68
及以前的黑名單裡,雖然包括了大部分常用的 class,但少了 java.lang.AutoCloseable
和 java.util.BitSet
第一次的 @type 使得 expectClass 變成 true,讓第二個 @type 可以順利的 deserialize
將 java.lang.Runnable
、java.lang.Readable
、java.lang.AutoCloseable
加入黑名單
把目標換成 java.lang.Exception
但目前 poc 都需要 Evil class 存在並且實作有害的 setter 才能利用