FastJSON的0day漏洞的解決
一、問題背景
fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean,由于具有執(zhí)行效率高的特點,應用范圍很廣
2019年6月22日,阿里云云盾應急響應中心監(jiān)測到FastJSON存在0day漏洞,攻擊者可以利用該漏洞繞過黑名單策略進行遠程代碼執(zhí)行
關(guān)于fastjson javaweb框架的0day漏洞情報,由于fastjson在進行實例化對象時沒有對輸入數(shù)據(jù)進行嚴格限制,攻擊者只要精心構(gòu)造json數(shù)據(jù),即可造成遠程代碼執(zhí)行,截止到發(fā)稿日,關(guān)于該漏洞的利用方式暫未公開,請相關(guān)用戶及時進行防護。
2019年6月22日,阿里云云盾應急響應中心監(jiān)測到FastJSON存在0day漏洞,攻擊者可以利用該漏洞繞過黑名單策略進行遠程代碼執(zhí)行。
1.1、漏洞名稱
FastJSON遠程代碼執(zhí)行0day漏洞
1.2、漏洞描述
利用該0day漏洞,惡意攻擊者可以構(gòu)造攻擊請求繞過FastJSON的黑名單策略。例如,攻擊者通過精心構(gòu)造的請求,遠程讓服務(wù)端執(zhí)行指定命令(以下示例中成功運行計算器程序)。
1.3、影響范圍
- FastJSON 1.2.30及以下版本
- FastJSON 1.2.41至1.2.45版本
1.4、官方解決方案
升級至FastJSON最新版本,建議升級至1.2.58版本。
說明 強烈建議不在本次影響范圍內(nèi)的低版本FastJSON也進行升級。
升級方法
您可以通過更新Maven依賴配置,升級FastJSON至最新版本(1.2.58版本)。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
1.5、防護建議
(1)Web應用防火墻
Web應用防火墻的Web攻擊防護規(guī)則中已默認配置相應規(guī)則防護該FastJSON 0day漏洞,啟用Web應用防火墻的Web應用攻擊防護功能即可。
說明 如果您的業(yè)務(wù)使用自定義規(guī)則組功能自定義所應用的防護規(guī)則,請務(wù)必在自定義規(guī)則組中添加以下規(guī)則:
(2)WAF自定義防護規(guī)則
FastJson是阿里的一個開源Json解析庫,可以將數(shù)據(jù)在JSON和Java Object之間互相轉(zhuǎn)換,此前曾被爆出存在反序列化漏洞。為預防FastJson庫存在0day漏洞,現(xiàn)提供兩條自定義規(guī)則,可根據(jù)情況選擇一個添加。也可以同時添加兩個,如果有誤報,再取消。此自定義規(guī)則主要針對存在JAVA系統(tǒng)并使用了該庫的客戶。
自定義規(guī)則--精準防護
檢測對象>request_body
匹配操作>正則包含
檢測值>['"]\s*@type\s*['"].*?(com\.(sun|mchange)|org\.(apache|codehaus|hibernate|jboss|mozilla|python)|java\.(lang\.Thread|net\.Socket|rmi)|javax\.xml|bsh)
自定義規(guī)則--暴力防護
檢測對象>request_body
匹配操作>正則包含
檢測值>['"]\s*@type\s*['"]
TAM關(guān)于fastjson javaweb框架0day漏洞回溯和實時檢測
ssh后臺執(zhí)行(后臺執(zhí)行速度相對比較快,推薦此方式)
- 確定Spark組件位置:點擊BSA首頁右上角齒輪,選擇集群管理,進入組件,點擊查看Spark組件
- 記錄下主機名稱,例如bsa12
ssh登陸B(tài)SA后臺,執(zhí)行如下命令(將SparkSqlServer主機地址替換至綠色背景,然后復制該命令并且回車):
先切換bsauser賬號 su – bsauser
然后執(zhí)行./spark-1.3.0-bin-hadoop2.4/bin/beeline -u jdbc:hive2://bsa12:10000 --verbose=true --showHeader=true --outputformat=tsv2 --color=true -e "select sip, dip, from_unixtime(timestamp) as timestamp, ret_code, host, uri, post_data from internal_app_bsatam2.tam_httplog where ns_date>=20190610 and (post_data rlike '@type' or uri rlike '@type');" > fastjson_export.csv
等待上述任務(wù)執(zhí)行完成之后,如果當前目錄下有fastjson _export.csv文件且文件中有內(nèi)容時,說明20190610至今的歷史流量中出現(xiàn)過fastjson漏洞攻擊。
tam界面執(zhí)行自定義查詢(當無法ssh后臺時,可在TAM的界面上操作。相比后臺執(zhí)行稍慢,不推薦)
- 進入挖掘檢索—自定義查詢—新建查
將上述下列SQL粘貼至下圖所示位置:
select sip, dip, from_unixtime(timestamp) as timestamp, ret_code, host, uri, post_data from internal_app_bsatam2.tam_httplog where ns_date>=20190610 and (post_data rlike '@type' or uri rlike '@type')
- 點擊校驗。耐心等待校驗成功后繼續(xù)點擊新建。完成后點擊之后,點擊下圖所示位置開始執(zhí)行
實時監(jiān)控
Tam自定義場景監(jiān)控可用于實時監(jiān)測,當UTS上沒有配置該規(guī)則時,使用TAM的自定義場景的檢測功能:
- 進入場景管理—場景配置—自定義場景。選擇規(guī)則, “fastjson遠程代碼執(zhí)行漏洞利用檢測”配置如下
將下列SQL粘貼至規(guī)則輸入
select sip, dip, timestamp as start_time, timestamp as end_time, ret_code as info3, concat(host, uri) as infos, post_data as info2, timestamp as end_time from internal_app_bsatam2.tam_httplog where post_data rlike '@type' or uri rlike '@type')
問題補充:
該缺陷是因舊缺陷修復方案引起,原因如下:
在fastjson 1.2.24版本之前(包括1.2.24版本),fastjson 在使用JSON.parseObject方法時,由于使用泛型(Object.class)反序列化的場景時,存在惡意構(gòu)造序列化內(nèi)容造成執(zhí)行服務(wù)器命令。即在遠程服務(wù)器場景,如果使用fastjson做為遠程報文內(nèi)容反序列化,且泛型使用,則存在期可能。
在1.2.24版本之后該缺陷已修復,修復方案采用默認關(guān)閉autoType,即自動泛型反序列化,且如果打開autoType,也加入了黑名單,對存在易被利用攻擊的類進行了黑名單處理。這次漏洞風險內(nèi)容為:打開了autoType的情況下,可以通過0day漏洞繞過黑名單。繞過的方式,暫時不詳。
到此這篇關(guān)于FastJSON的0day漏洞的解決的文章就介紹到這了,更多相關(guān)FastJSON的0day漏洞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼
本篇文章主要介紹了Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼,非常具有實用價值,需要的朋友可以參考下2017-06-06Jenkins如何使用DockerFile自動部署Java項目
這篇文章主要介紹了Jenkins如何使用DockerFile自動部署Java項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08Java中static關(guān)鍵字的作用和用法詳細介紹
這篇文章主要介紹了Java中static關(guān)鍵字的作用和用法詳細介紹,本文講解了static變量、靜態(tài)方法、static代碼塊、static和final一塊用等內(nèi)容,需要的朋友可以參考下2015-01-01