一 前言
Fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化爲JSON字符串,也可以從JSON字符串反序列化到JavaBean
二 漏洞介紹
Fastjson 1.2.60版本以下存在字符串解析異常
該漏洞會導致java進程的佔用內存迅速漲到JVM允許的最大值(-Xmx參數,默認爲1/4物理內存大小),並且CPU飆升。
該漏洞並不能直接打掛java進程,但是可能由於java進程佔用內存過大,導致被系統的OOM Killer殺掉
三 漏洞危害
經鬥象安全應急響應團隊分析Fastjson多個版本存在遠程拒絕服務漏洞,Fastjson 1.2.60版本以下存在字符串解析異常,可導致遠程拒絕服務攻擊。攻擊者即可通過精心構造的請求包對使用Fastjson的服務器造成遠程拒絕服務攻擊,可導致服務器宕機。
四 影響範圍
產品
Fastjson
版本
1.2.60以下版本
組件
Fastjson
五 修復方案
1、升級Fastjson到1.2.60版本
2、建議儘可能使用Jackson或者Gson
六 分析
1.復現
採用1.6.49 fastjson
public static void main(String[] args) throws UnsupportedEncodingException {
//{"a":"x
//漏洞是由於fastjson處理字符串中x這種HEX字符表示形式出現的問題。
//輸入字符串長度爲8
final String DEATH_STRING = "{\"a\":\"\\x";
try{
Object obj = JSON.parse(DEATH_STRING);
System.out.println(obj);
}catch (JSONException ex){
ex.printStackTrace();
System.out.println(ex);
}
}
升級1.2.60之後再次運行如下 :
解析可以參考:
1.2.60增加了
詳解可以參考 http://www.sohu.com/a/339253119_120045376
意思是 輸入以 x結尾的字符串會導致next方法程序進入死循環,無限擴充數組最終導致head space;
七 參考
https://www.anquanke.com/post/id/185964
https://github.com/alibaba/fastjson