- 資訊首頁(yè) > 互聯(lián)網(wǎng) > 經(jīng)驗分享 >
- jackson-databind遠程代碼執行漏洞分析(CVE-2020-106
近日,云安全團隊跟蹤到j(luò )ackson-databind在github上更新了一個(gè)新的反序列化利用類(lèi)com.caucho.config.types.ResourceRef,issue編號2660,該類(lèi)繞過(guò)了之前jackson-databind維護的黑名單類(lèi)。如果項目中包含resin-kernel庫,并且JDK版本較低的話(huà),請及時(shí)升級jackson-databind到安全版本。
jackson-databind < 2.9.10.4
JDK < 6u201、7u191、8u182、11.0.1(LDAP)
該漏洞本質(zhì)是java的JNDI注入,我們先來(lái)了解下JNDI基礎知識。簡(jiǎn)單來(lái)說(shuō),JNDI是一組應用程序接口,它為開(kāi)發(fā)人員查找和訪(fǎng)問(wèn)各種資源提供了統一的通用接口,可以用來(lái)定位用戶(hù)、網(wǎng)絡(luò )、機器、對象和服務(wù)等各種資源。比如可以利用JNDI在局域網(wǎng)上定位一臺打印機,也可以用JNDI來(lái)定位數據庫服務(wù)或一個(gè)遠程Java對象。JNDI底層支持RMI遠程對象,RMI注冊的服務(wù)可以通過(guò)JNDI接口來(lái)訪(fǎng)問(wèn)和調用。JNDI接口在初始化時(shí),可以將RMI URL作為參數傳入,而JNDI注入就出現在客戶(hù)端的lookup()函數中,如果lookup()的參數可控就可能被攻擊。
因此分析的時(shí)候,可以直接先搜索受影響類(lèi)的lookup方法,看看漏洞入口在哪里,本文復現的時(shí)候用的是resin-kernel-4.0.52版本。
首先定位到com.caucho.config.types.ResourceRef類(lèi),我們在getValue方法中找到了jdni.lookup方法,但需要滿(mǎn)足getLookupName方法不為空。
跟進(jìn)到父類(lèi)ResourceGroupConfig,getLookupName方法直接返回_lookupName變量,但會(huì )在setLookupName方法進(jìn)行賦值。
因此可以確遠程對象調用入口為lookupName,我們可以寫(xiě)入如下的反序列化的測試代碼。由于觸發(fā)是在getValue方法中,因此在反序列化后需要再調用writeValueAsString方法進(jìn)行序列化,以觸發(fā)get方法??捎胢arshalsec監聽(tīng)ldap服務(wù),并制作好可執行命令的class文件。
其實(shí),在這里還需要說(shuō)下為什么需要調用mapper.enableDefaultTyping(),當不帶參數調用enableDefaultTyping時(shí),會(huì )設置DefaultTyping為OBJECT_AND_NON_CONCRETE。
DefaultTyping有四個(gè)選項:
JAVA_LANG_OBJECT: 當對象屬性類(lèi)型為Object時(shí)生效;
OBJECT_AND_NON_CONCRETE: 當對象屬性類(lèi)型為Object或者非具體類(lèi)型(抽象類(lèi)和接口)時(shí)生效;
NON_CONCRETE_AND _ARRAYS: 同上, 另外所有的數組元素的類(lèi)型都是非具體類(lèi)型或者對象類(lèi)型;
NON_FINAL: 對所有非final類(lèi)型或者非final類(lèi)型元素的數組。
因此,當開(kāi)啟DefaultTyping后,會(huì )開(kāi)發(fā)者在反序列化時(shí)指定要還原的類(lèi),過(guò)程中調用其構造方法setter方法或某些特殊的getter方法,當這些方法中存在一些危險操作時(shí)就造成了代碼執行。
官方在github的更新措施(https://github.com/FasterXML/jackson-databind/commit/1645efbd392989cf015f459a91c999e59c921b15),仍然是添加com.caucho.config.types.ResourceRef為黑名單類(lèi),但這種方式治標不治本,后續可能出現其他繞過(guò)黑名單的gdaget。
參考:
https://qiita.com/shimizukawasaki/items/d72fb40b69bb0d328ee7
https://github.com/FasterXML/jackson-databind/issues/2660
文章轉自百度安全:https://anquan.baidu.com/article/1069
發(fā)布者:水橋丶帕露西
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站