FastJson的漏洞

今日被一條推文吸引---坑爹fastjson又成黑洞!此次危害可致使服務癱瘓!。這一看不得了了,由於咱們服務中有使用到fastjson。且版本目前仍是1.2.58。html

咱們使用的springCloud,其中jersey與fastjson版本有衝突,這個時候就會出現以下錯誤java

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。git

模擬場景

當fastjson再次向後進行解析時,會不斷重複獲取EOF,並將其寫到內存中,直到觸發OOM錯誤:github

而後致使的結果爲: spring

而後爲此我還使用了 Arthas查看了當前內存的使用狀況:
咱們能夠清晰的看到非堆內存已經高達94%!!!

解決方案

看到這裏,你還有啥可想的,都被人家發現了那就升級吧json

  • 1.1.15~1.1.31版本更新到1.1.31.sec07版本ide

  • 1.1.32~1.1.33版本更新到1.1.33.sec06版本spa

  • 1.1.34 版本更新到1.1.34.sec06版本code

  • 1.1.35~1.1.46版本更新到1.1.46.sec06版本cdn

  • 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又成黑洞!此次危害可致使服務癱瘓!

相關文章
相關標籤/搜索