FastJSON的0day漏洞報告

1、問題背景

fastjson是阿里巴巴的開源JSON解析庫,它能夠解析JSON格式的字符串,支持將Java Bean序列化爲JSON字符串,也能夠從JSON字符串反序列化到JavaBean,因爲具備執行效率高的特色,應用範圍很廣html

2019年6月22日,阿里云云盾應急響應中心監測到FastJSON存在0day漏洞,攻擊者能夠利用該漏洞繞過黑名單策略進行遠程代碼執行java

關於fastjson javaweb框架的0day漏洞情報,因爲fastjson在進行實例化對象時沒有對輸入數據進行嚴格限制,攻擊者只要精心構造json數據,便可形成遠程代碼執行,截止到發稿日,關於該漏洞的利用方式暫未公開,請相關用戶及時進行防禦。python

2019年6月22日,阿里云云盾應急響應中心監測到FastJSON存在0day漏洞,攻擊者能夠利用該漏洞繞過黑名單策略進行遠程代碼執行。web

1.一、漏洞名稱

FastJSON遠程代碼執行0day漏洞apache

1.二、漏洞描述

利用該0day漏洞,惡意攻擊者能夠構造攻擊請求繞過FastJSON的黑名單策略。例如,攻擊者經過精心構造的請求,遠程讓服務端執行指定命令(如下示例中成功運行計算器程序)。

1.三、影響範圍

  • FastJSON 1.2.30及如下版本
  • FastJSON 1.2.41至1.2.45版本

1.四、官方解決方案

升級至FastJSON最新版本,建議升級至1.2.58版本。json

 
說明 強烈建議不在本次影響範圍內的低版本FastJSON也進行升級。

升級方法api

您能夠經過更新Maven依賴配置,升級FastJSON至最新版本(1.2.58版本)。
 
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>

1.五、防禦建議

(1)Web應用防火牆

Web應用防火牆的Web攻擊防禦規則中已默認配置相應規則防禦該FastJSON 0day漏洞,啓用Web應用防火牆的Web應用攻擊防禦功能便可。服務器

說明 若是您的業務使用 自定義規則組功能自定義所應用的防禦規則,請務必在自定義規則組中添加如下規則:
 

以上參考:https://helpcdn.aliyun.com/document_detail/123431.htmlapp

(2)WAF自定義防禦規則

FastJson是阿里的一個開源Json解析庫,能夠將數據在JSON和Java Object之間互相轉換,此前曾被爆出存在反序列化漏洞。爲預防FastJson庫存在0day漏洞,現提供兩條自定義規則,可根據狀況選擇一個添加。也能夠同時添加兩個,若是有誤報,再取消。此自定義規則主要針對存在JAVA系統並使用了該庫的客戶。框架

自定義規則--精準防禦

檢測對象>request_body

匹配操做>正則包含

檢測值>['"]\s*@type\s*['"].*?(com\.(sun|mchange)|org\.(apache|codehaus|hibernate|jboss|mozilla|python)|java\.(lang\.Thread|net\.Socket|rmi)|javax\.xml|bsh)

自定義規則--暴力防禦

檢測對象>request_body

匹配操做>正則包含

檢測值>['"]\s*@type\s*['"]

 

防禦驗證截圖

TAM關於fastjson javaweb框架0day漏洞回溯和實時檢測

ssh後臺執行(後臺執行速度相對比較快,推薦此方式)

  1. 肯定Spark組件位置:點擊BSA首頁右上角齒輪,選擇集羣管理,進入組件,點擊查看Spark組件,以下圖:


    記錄下主機名稱,例如bsa12
  2. ssh登錄BSA後臺,執行以下命令(將SparkSqlServer主機地址替換至綠色背景,而後複製該命令而且回車):
    先切換bsauser帳號 su – bsauser
    而後執行

    ./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

    等待上述任務執行完成以後,若是當前目錄下有fastjson _export.csv文件且文件中有內容時,說明20190610至今的歷史流量中出現過fastjson漏洞攻擊。

tam界面執行自定義查詢(當沒法ssh後臺時,可在TAM的界面上操做。相比後臺執行稍慢,不推薦)

  1. 進入挖掘檢索—自定義查詢—新建查詢
  2. 將上述下列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')

  3. 點擊校驗。耐心等待校驗成功後繼續點擊新建。完成後點擊以後,點擊下圖所示位置開始執行:

實時監控

Tam自定義場景監控可用於實時監測,當UTS上沒有配置該規則時,使用TAM的自定義場景的檢測功能:

  1. 進入場景管理—場景配置—自定義場景。選擇規則, 「fastjson遠程代碼執行漏洞利用檢測」配置以下
  2. 將下列SQL粘貼至規則輸入

    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)反序列化的場景時,存在惡意構造序列化內容形成執行服務器命令。即在遠程服務器場景,若是使用fastjson作爲遠程報文內容反序列化,且泛型使用,則存在期可能。

在1.2.24版本以後該缺陷已修復,修復方案採用默認關閉autoType,即自動泛型反序列化,且若是打開autoType,也加入了黑名單,對存在易被利用攻擊的類進行了黑名單處理。此次漏洞風險內容爲:打開了autoType的狀況下,能夠經過0day漏洞繞過黑名單。繞過的方式,暫時不詳。

相關文章
相關標籤/搜索