01.17 記一次 fastjson 坑爹 BUG 帶來的服務器癱瘓...

來源:https://mp.weixin.qq.com/s/yzJFhd-O3S2waxy_XDEMYg

0x00 漏洞背景

2019年9月5日,fastjson在commit 995845170527221ca0293cf290e33a7d6cb52bf7上提交了旨在修復當字符串中包含\\\\x轉義字符時可能引發OOM的問題的修復。

360CERT 判斷該漏洞危害中。影響面較大。攻擊者可以通過發送構造好的請求而致使當前線程癱瘓,當發送的惡意請求過多時有可能使業務直接癱瘓。

建議廣大用戶對自身的業務/產品進行組件自查,確認fastjson版本至少升級到1.2.60

0x01 漏洞詳情

漏洞的關鍵點在com.alibaba.fastjson.parser.JSONLexerBase#scanString中,當傳入json字符串時,fastjson會按位獲取json字符串,當識別到字符串為\\\\x為開頭時,會默認獲取後兩位字符,並將後兩位字符與\\\\x拼接將其變成完整的十六進制字符來處理:

記一次 fastjson 坑爹 BUG 帶來的服務器癱瘓...

而當json字符串是以\\\\x結尾時,由於fastjson並未對其進行校驗,將導致其繼續嘗試獲取後兩位的字符。也就是說會直接獲取到\\\\u001A也就是EOF:

記一次 fastjson 坑爹 BUG 帶來的服務器癱瘓...

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


記一次 fastjson 坑爹 BUG 帶來的服務器癱瘓...

最終效果為:

記一次 fastjson 坑爹 BUG 帶來的服務器癱瘓...

0x02 影響版本

fastjson < 1.2.60版本

0x03 修復建議

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版本


分享到:


相關文章: