1. 程式人生 > 程式設計 >FastJson的漏洞

FastJson的漏洞

今日被一條推文吸引---坑爹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,然後看到已經有相關的校驗。

參考資料:坑爹fastjson又成黑洞!這次危害可導致服務癱瘓!