再爆安全漏洞,這次輪到Jackson了,竟由阿里云上報(bào)
前言
你好,我是YourBatman。
今天中午收到我司安全部發(fā)了一封郵件:Jackson存在安全漏洞。查了一下,這件事并不算很新鮮了(已經(jīng)過(guò)了10天的樣子),本文來(lái)聊聊吧。
說(shuō)起來(lái)還蠻戲劇化:阿里云向Jackson官方提交了一個(gè)Jackson序列化安全漏洞。眾所周知,在國(guó)內(nèi)關(guān)于JSON庫(kù)使用有兩大主要陣營(yíng):「國(guó)際著名的Jackson庫(kù)」和「國(guó)內(nèi)阿里巴巴出品的Fastjson」。
同樣的功能定位,不存在競(jìng)爭(zhēng)想想也覺(jué)得不可能嘛。所以當(dāng)我看到這個(gè)漏洞竟是阿里云上報(bào)的,就覺(jué)得這關(guān)系還蠻微妙呢,默默的腹黑了3秒鐘,哈哈。
附:FasterXML/jackson-databind是一個(gè)簡(jiǎn)單基于Java應(yīng)用庫(kù),Jackson可以輕松的將Java對(duì)象轉(zhuǎn)換成json對(duì)象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對(duì)象。Jackson是美國(guó)FasterXML公司的一款適用于Java的數(shù)據(jù)處理工具。jackson-databind是其中的一個(gè)具有數(shù)據(jù)綁定功能的組件。
正文
熟悉A哥的小伙伴知道,自從Fastjson上次爆出重大安全漏洞之后,我徹底的投入到了Jackson的陣營(yíng),工作中也慢慢去Fastjson化。這不還專門撰寫了一篇文章來(lái)說(shuō)明此事:Fastjson到了說(shuō)再見(jiàn)的時(shí)候了。為了順利完成“遷移”,我還專門寫了一個(gè),也有可能是全網(wǎng)唯一一個(gè)Jackson專欄,雖然很小眾但就是干了~
關(guān)于本次漏洞
2020年8月25日,jackson-databind(官方)發(fā)布了Jackson-databind序列化漏洞的安全通告,漏洞編號(hào)為CVE-2020-24616。
漏洞詳情
該漏洞源于不安全的反序列化。遠(yuǎn)程攻擊者可通過(guò)精心構(gòu)造的惡意載荷利用該漏洞在系統(tǒng)執(zhí)行任意代碼。
其實(shí)上它的底層原理是利用某些類的反序列化「利用鏈」,可以繞過(guò) jackson-databind 「黑名單限制」,遠(yuǎn)程攻擊者通過(guò)向「使用該組件」的web服務(wù)接口發(fā)送特制請(qǐng)求包(精心構(gòu)造的JSON),可以造成遠(yuǎn)程代碼執(zhí)行影響。
漏洞評(píng)級(jí)
評(píng)定方式 | 等級(jí) |
---|---|
威脅等級(jí) | 高危 |
影響面 | 「有限」 |
漏洞評(píng)分 | 75 |
對(duì)此評(píng)級(jí)沒(méi)有概念?那就來(lái)個(gè)參照物比一比嘛,我把Fastjson上次(2020-05)的安全漏洞評(píng)級(jí)給你做對(duì)比:
評(píng)定方式 | 等級(jí) |
---|---|
威脅等級(jí) | 高危 |
影響面 | 「廣泛」 |
漏洞評(píng)分 | 75 |
有限和廣泛的的區(qū)別到底有多大,用文字不太好描述。打個(gè)比方,我覺(jué)得可類比「艾滋病和新冠病毒」的區(qū)別,前者對(duì)社會(huì)生態(tài)影響并不大,而后者恨不得讓全球都停擺了,即使它致死率還遠(yuǎn)沒(méi)有前者那么高,這就是影響范圍的“力量”。
影響版本
jackson-databind < 2.9.10.6
因?yàn)楝F(xiàn)在大家都基于Spring Boot開(kāi)發(fā),針對(duì)版本號(hào)我「擴(kuò)展一下」,方便你對(duì)號(hào)入座哈:
Spring Boot版本 | Jackson版本 |
---|---|
1.5.22.RELEASE | 2.8.x |
2.0.9.RELEASE | 2.9.x |
「2.1.16.RELEASE」 | 2.9.10.5 |
2.2.9.RELEASE | 2.10.x |
2.3.3.RELEASE | 2.11.x |
Spring Boot2.1.x應(yīng)該是現(xiàn)行主流使用版本,因此從版本號(hào)上來(lái)看,大概率都在此次漏洞的射程范圍內(nèi)。
安全版本
jackson-databind 2.9.10.6或者2.10.x及以后版本
故事時(shí)間軸
2020-08-05,「阿里云安全組」同學(xué)向Jackson官方上報(bào)了這個(gè)安全漏洞:當(dāng)天,官方回復(fù)預(yù)計(jì)會(huì)在8-15左右發(fā)布bug修復(fù)版本修復(fù)次問(wèn)題(waht?知道問(wèn)題了還得10后修復(fù)?):
可結(jié)果是10天都不止。直到8.25這天,Jackson發(fā)布2.9.10.6版本修復(fù)了此問(wèn)題,并向外界發(fā)公告公布此漏洞:
從8.5號(hào)Jackson官方知曉此漏洞,到8.25號(hào)最終發(fā)版解決此問(wèn)題,「整整20天」,為何需要這么久?我想真像只有一個(gè):此漏洞影響真的不大,或者說(shuō)影響范圍較窄?;貞浵律洗蜦astjson出現(xiàn)的那個(gè)安全漏洞,24h內(nèi)就給與了修復(fù)版本,并不是因?yàn)槲覀兎从逞杆?,而是因?yàn)橛绊懼卮蟮炔涣?..
修復(fù)建議
一股腦的全部升級(jí)到2.9.10.6或以上版本當(dāng)然能規(guī)避此安全問(wèn)題,但是你是否想過(guò),你負(fù)責(zé)多少個(gè)服務(wù)?你團(tuán)隊(duì)、公司一共有多少個(gè)服務(wù)?你品,你細(xì)品,頭大嗎?
從官方對(duì)此次漏洞做出的反射弧時(shí)間來(lái)看,本次漏洞影響是相對(duì)較小的,因此我總結(jié)了下修復(fù)建議,倘若你「同時(shí)滿足」如下三個(gè)條件,那么需要立馬修復(fù),否則可暫不理會(huì):
- 對(duì)公網(wǎng)提供API接口
- Jackson版本小于2.9.10.6
- 工程內(nèi) 「有」使用(或者引入)如下4個(gè)類任意一個(gè):
- br.com.anteros.dbcp.AnterosDBCPDataSource
- com.pastdev.httpcomponents.configuration.JndiConfiguration
- com.nqadmin.rowset.JdbcRowSetImpl
- org.arrah.framework.rdbms.UpdatableJdbcRowsetImpl
條件3的理論支撐是我對(duì)比2.9.10.6版本release改動(dòng)源碼 + 我和我司安全組人員的討論結(jié)果。修復(fù)方案也僅僅是在黑名單里新增了這4個(gè)類,截圖如下:
總結(jié)
外行看熱鬧,內(nèi)行看門道。千萬(wàn)不能說(shuō)Fastjson出了個(gè)漏洞,Jackson也來(lái)一個(gè)就得出結(jié)論說(shuō)打平手了,那會(huì)稍顯外行。正所謂假設(shè)可以大膽,但小心求證,下結(jié)論需要謹(jǐn)慎。
總的來(lái)說(shuō),此次漏洞影響甚小,不用大驚小怪,我就繼續(xù)我的Jackson之旅啦。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!