Fastjson反序列化遠(yuǎn)程代碼執(zhí)行漏洞產(chǎn)生原因及修復(fù)建議
Fastjason是阿里巴巴的開(kāi)源JSON解析庫(kù),它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。由于其序列化jason文件速度快且中文文檔非常全面,所以為國(guó)內(nèi)廣大開(kāi)發(fā)人員所應(yīng)用。
fastjson是目前java語(yǔ)言中最快的json庫(kù),比自稱(chēng)最快的jackson速度要快。
第三方獨(dú)立測(cè)試結(jié)果可參考:https://github.com/eishay/jvm-serializers/wiki
一、漏洞產(chǎn)生原因:
Fastjson使用黑白名單用于防御反序列化漏洞,并允許用戶在輸入JSON串時(shí)通過(guò)“@type”鍵對(duì)應(yīng)的value指定任意反序列化類(lèi)名。在特定條件下可繞過(guò)默認(rèn)autoType關(guān)閉限制,攻擊遠(yuǎn)程服務(wù)器,風(fēng)險(xiǎn)影響較大(也就是通常所指的“Gadget”)。
二、受影響的版本:
特定依賴(lài)存在下影響 ≤1.2.80
三、漏洞等級(jí):
風(fēng)險(xiǎn)評(píng)級(jí):高危
四、官方修復(fù)方案:
1. 升級(jí)到1.2.83版本
從源代碼可以看到:
- 該版本源代碼刪除了很多白名單對(duì)應(yīng)的hash;
- checkAutoType(String typeName, Class> expectClass, int features)方法,添加了新的校驗(yàn)包含mask和autoTypeSupport,用來(lái)規(guī)避未經(jīng)驗(yàn)證的autoType的注入。
2. 原來(lái)1.2.68以后到1.2.80的版本:開(kāi)啟配置safeMode,讓白名單和黑名單都不支持autoType,從而可杜絕反序列化Gadgets類(lèi)變種攻擊。
在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打開(kāi)后,完全禁用autoType。所有的安全修復(fù)版本sec10也支持SafeMode配置。
打開(kāi)SafeMode功能(1.2.68之后的版本)
有三種配置SafeMode方式,如下:
①在代碼中配置
ParserConfig.getGlobalInstance().setSafeMode(true);
注意,如果使用new ParserConfig的方式,需要注意單例處理,否則會(huì)導(dǎo)致低性能full gc。
②加上JVM啟動(dòng)參數(shù)
-Dfastjson.parser.safeMode=true
如果有多個(gè)包名前綴,用逗號(hào)隔開(kāi)
③通過(guò)fastjson.properties文件配置。
通過(guò)類(lèi)路徑的fastjson.properties文件來(lái)配置,配置方式如下:
fastjson.parser.safeMode=true
safeMode場(chǎng)景如何做autoType
在1.2.68之后的版本,提供了AutoTypeCheckHandler擴(kuò)展,可以自定義類(lèi)接管autoType, 通過(guò)ParserConfig#addAutoTypeCheckHandler方法注冊(cè)。
?
怎么判斷是否用到了autoType
看序列化的代碼中是否用到了SerializerFeature.WriteClassName
JSON.toJSONString(obj, SerializerFeature.WriteClassName); // 這種使用會(huì)產(chǎn)生@type
使用JSONType.autoTypeCheckHandler
在fastjson 1.2.71版本中,提供了通過(guò)JSONType配置autoTypeCheckHandler的方法,比如:
?
來(lái)源:https://github.com/alibaba/fastjson/wiki/fastjson_safemode
中科天齊 漏洞治理專(zhuān)家
中科天齊由中科院研究員李煉博士創(chuàng)立,以自主研究成果WuKong靜態(tài)軟件安全測(cè)試工具為主打產(chǎn)品,團(tuán)隊(duì)?wèi){借多年在程序分析領(lǐng)域的技術(shù)積累,致力打造安全漏洞治理領(lǐng)域新生態(tài)的高新技術(shù)企業(yè)。
WuKong靜態(tài)軟件安全測(cè)試工具
WuKong是一款國(guó)產(chǎn)信創(chuàng)SAST產(chǎn)品,采用自主專(zhuān)利技術(shù)的程序分析引擎,多種創(chuàng)新性的靜態(tài)分析技術(shù),結(jié)合深度學(xué)習(xí)和人工智能等多種方法,能夠?qū)浖a進(jìn)行全方位的 安全掃描和安全分析。
