FastJson的漏洞
阿新 • • 發佈:2020-06-24
今日被一條推文吸引---坑爹fastjson又成黑洞!這次危害可導致服務癱瘓!。這一看不得了了,因為我們服務中有使用到
fastjson
。且版本目前還是1.2.58。
我們使用的springCloud,其中jersey與fastjson版本有衝突,這個時候就會出現如下錯誤
ERROR com.sun.jersey.spi.inject.Errors - The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for field: javax.ws.rs.core.UriInfo com.alibaba.fastjson.support.jaxrs.FastJsonProvider.uriInfo
2019-04-03 17:59:20.776 [main] ERROR o.s.c.n.eureka.serviceregistry.EurekaRegistration - error getting CloudEurekaClient
複製程式碼
問題產生原因
漏洞的關鍵點在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,當傳入json字串時,fastjson會按位獲取json字串,當識別到字串為x為開頭時,會預設獲取後兩位字元,並將後兩位字元與x拼接將其變成完整的十六進位制字元來處理。而當json字串是以x結尾時,由於fastjson並未對其進行校驗,將導致其繼續嘗試獲取後兩位的字元。也就是說會直接獲取到u001A也就是EOF。
模擬場景
當fastjson再次向後進行解析時,會不斷重複獲取EOF,並將其寫到記憶體中,直到觸發OOM錯誤:
然後導致的結果為:
然後為此我還使用了Arthas查看了當前記憶體的使用情況: 我們可以清晰的看到非堆記憶體已經高達94%!!!解決方案
看到這裡,你還有啥可想的,都被人家發現了那就升級吧
-
1.1.15~1.1.31版本更新到1.1.31.sec07版本
-
1.1.32~1.1.33版本更新到1.1.33.sec06版本
-
1.1.34 版本更新到1.1.34.sec06版本
-
1.1.35~1.1.46版本更新到1.1.46.sec06版本
-
1.2.3~1.2.7版本更新到1.2.7.sec06版本或1.2.8.sec04版本
-
1.2.8 版本更新到1.2.8.sec06版本
-
1.2.9~1.2.29 版本更新到1.2.29.sec06版本
我本地使用了1.2.60,然後看到已經有相關的校驗。