今日被一條推文吸引---坑爹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
看到這裏,你還有啥可想的,都被人家發現了那就升級吧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,而後看到已經有相關的校驗。