來源:https://mp.weixin.qq.com/s/yzJFhd-O3S2waxy_XDEMYg
2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修復當字符串中包含\\\\x轉義字符時可能引發OOM的問題的修復。
360CERT 判斷該漏洞危害中。影響面較大。攻擊者可以通過發送構造好的請求而致使當前線程癱瘓,當發送的惡意請求過多時有可能使業務直接癱瘓。
建議廣大用戶對自身的業務/產品進行組件自查,確認fastjson版本至少升級到1.2.60
漏洞的關鍵點在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,當傳入json字符串時,fastjson會按位獲取json字符串,當識別到字符串為\\\\x為開頭時,會默認獲取後兩位字符,並將後兩位字符與\\\\x拼接將其變成完整的十六進位字符來處理:
而當json字符串是以\\\\x結尾時,由於fastjson並未對其進行校驗,將導致其繼續嘗試獲取後兩位的字符。也就是說會直接獲取到\\\也就是EOF:
image
當fastjson再次向後進行解析時,會不斷重複獲取EOF,並將其寫到內存中,直到觸發oom錯誤:
最終效果為:
fastjson < 1.2.60版本
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版本