冤冤相報何時了,得饒人處且饒人。本文已被 https://www.yourbatman.cn 收錄,裡面一併有Spring技術棧、MyBatis、JVM、中介軟體等小而美的專欄供以免費學習。關注公眾號【BAT的烏托邦】逐個擊破,深入掌握,拒絕淺嘗輒止。
✍前言
你好,我是YourBatman。
今天中午收到我司安全部發了一封郵件:Jackson存在安全漏洞。查了一下,這件事並不算很新鮮了(已經過了10天的樣子),本文來聊聊吧。
說起來還蠻戲劇化:阿里雲向Jackson官方提交了一個Jackson序列化安全漏洞。眾所周知,在國內關於JSON庫使用有兩大主要陣營:國際著名的Jackson庫和國內阿里巴巴出品的Fastjson。
同樣的功能定位,不存在競爭想想也覺得不可能嘛。所以當我看到這個漏洞竟是阿里雲上報的,就覺得這關係還蠻微妙呢,默默的腹黑了3秒鐘,哈哈。
附:FasterXML/jackson-databind是一個簡單基於Java應用庫,Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。Jackson是美國FasterXML公司的一款適用於Java的資料處理工具。jackson-databind是其中的一個具有資料繫結功能的元件。
✍正文
熟悉A哥的小夥伴知道,自從Fastjson上次爆出重大安全漏洞之後,我徹底的投入到了Jackson的陣營,工作中也慢慢去Fastjson化。這不還專門撰寫了一篇文章來說明此事:Fastjson到了說再見的時候了。為了順利完成“遷移”,我還專門寫了一個,也有可能是全網唯一一個Jackson專欄,雖然很小眾但就是幹了~
關於本次漏洞
2020年8月25日,jackson-databind(官方)釋出了Jackson-databind序列化漏洞的安全通告,漏洞編號為CVE-2020-24616。
漏洞詳情
該漏洞源於不安全的反序列化。遠端攻擊者可通過精心構造的惡意載荷利用該漏洞在系統執行任意程式碼。
其實上它的底層原理是利用某些類的反序列化利用鏈,可以繞過 jackson-databind 黑名單限制,遠端攻擊者通過向使用該元件的web服務介面傳送特製請求包(精心構造的JSON),可以造成遠端程式碼執行影響。
漏洞評級
評定方式 | 等級 |
---|---|
威脅等級 | 高危 |
影響面 | 有限 |
漏洞評分 | 75 |
對此評級沒有概念?那就來個參照物比一比嘛,我把Fastjson上次(2020-05)的安全漏洞評級給你做對比:
評定方式 | 等級 |
---|---|
威脅等級 | 高危 |
影響面 | 廣泛 |
漏洞評分 | 75 |
有限和廣泛的的區別到底有多大,用文字不太好描述。打個比方,我覺得可類比愛滋病和新冠病毒的區別,前者對社會生態影響並不大,而後者恨不得讓全球都停擺了,即使它致死率還遠沒有前者那麼高,這就是影響範圍的“力量”。
影響版本
jackson-databind < 2.9.10.6
因為現在大家都基於Spring Boot開發,針對版本號我擴充套件一下,方便你對號入座哈:
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應該是現行主流使用版本,因此從版本號上來看,大概率都在此次漏洞的射程範圍內。
安全版本
jackson-databind 2.9.10.6或者2.10.x及以後版本
故事時間軸
2020-08-05,阿里雲安全組同學向Jackson官方上報了這個安全漏洞:
當天,官方回覆預計會在8-15左右釋出bug修復版本修復次問題(waht?知道問題了還得10後修復?):
可結果是10天都不止。直到8.25這天,Jackson釋出2.9.10.6版本修復了此問題,並向外界發公告公佈此漏洞:
從8.5號Jackson官方知曉此漏洞,到8.25號最終發版解決此問題,整整20天,為何需要這麼久?我想真像只有一個:此漏洞影響真的不大,或者說影響範圍較窄。回憶下上次Fastjson出現的那個安全漏洞,24h內就給與了修復版本,並不是因為我們反映迅速,而是因為影響重大等不了...
修復建議
一股腦的全部升級到2.9.10.6或以上版本當然能規避此安全問題,但是你是否想過,你負責多少個服務?你團隊、公司一共有多少個服務?你品,你細品,頭大嗎?
從官方對此次漏洞做出的反射弧時間來看,本次漏洞影響是相對較小的,因此我總結了下修復建議,倘若你同時滿足如下三個條件,那麼需要立馬修復,否則可暫不理會:
- 對公網提供API介面
- Jackson版本小於2.9.10.6
- 工程內有使用(或者引入)如下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改動原始碼 + 我和我司安全組人員的討論結果。修復方案也僅僅是在黑名單裡新增了這4個類,截圖如下:
✍總結
外行看熱鬧,內行看門道。千萬不能說Fastjson出了個漏洞,Jackson也來一個就得出結論說打平手了,那會稍顯外行。正所謂假設可以大膽,但小心求證,下結論需要謹慎。
總的來說,此次漏洞影響甚小,不用大驚小怪,我就繼續我的Jackson之旅啦。