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