摘要:據(jù)公告稱,和的包裝庫使用了不安全的函數(shù)來反序列化編碼的機(jī)器學(xué)習(xí)模型。簡單來看,序列化將對象轉(zhuǎn)換為字節(jié)流。據(jù)悉,本次漏洞影響與版本,的到版本均受影響。作為解決方案,在宣布棄用之后,團(tuán)隊(duì)建議開發(fā)者以替代序列化,或使用序列化作為替代。
TensorFlow,作為一個主流的開源 Python 庫,最初由 Google 開發(fā)用于機(jī)器學(xué)習(xí)領(lǐng)域,逐漸成為 GitHub 頂級開源 TOP 10 項(xiàng)目之一。
近日,Google TensorFlow 項(xiàng)目團(tuán)隊(duì)宣布了一項(xiàng)重大的改變,由于存在一個關(guān)鍵代碼執(zhí)行漏洞,其取消對另一種標(biāo)記語言 YAML 的支持。TensorFlow 團(tuán)隊(duì)表示,鑒于 YAML 支持需要大量工作,因此暫時刪除了 YAML。
YAML 是一種可讀性高,用來表達(dá)資料序列化的格式。開發(fā)者常用 YAML 作為通用格式來存儲數(shù)據(jù)并在進(jìn)程和應(yīng)用程序之間傳遞對象。據(jù) GitHub 公告稱,TensorFlow 和 Keras(TensorFlow 的包裝庫)使用了不安全的函數(shù)來反序列化 YAML 編碼的機(jī)器學(xué)習(xí)模型。
上文所提及的不安全函數(shù)指的是 “yaml.unsafe_load()”函數(shù)(https://github.com/tensorflow/tensorflow/blob/460e000de3a83278fb00b61a16d161b1964f15f4/tensorflow/python/keras/saving/model_config.py#L100),其中“unsafe_load”函數(shù)可以相當(dāng)自由地反序列化 YAML 數(shù)據(jù),它能夠解析所有標(biāo)簽,“即使是那些在不受信任的輸入上不安全的標(biāo)簽”。
而這樣的漏洞會帶來怎樣的后果?
事實(shí)上,在理想情況下,“unsafe_load”應(yīng)該只在沒有任何惡意內(nèi)容的可信源輸入上調(diào)用。反之,攻擊者可以利用反序列化機(jī)制,通過在尚未序列化的 YAML 數(shù)據(jù)中注入惡意負(fù)載來執(zhí)行他們選擇的代碼。
對此,安全研究人員追蹤發(fā)現(xiàn),這個關(guān)鍵漏洞可使攻擊者能夠在應(yīng)用程序反序列化以 YAML 格式提供的 Keras 模型時執(zhí)行任意代碼,其將該漏洞稱之為 CVE-2021-37678。
簡單來看,序列化將對象轉(zhuǎn)換為字節(jié)流。反序列化則可以視為與序列化相反的過程,其中使用字節(jié)流在內(nèi)存中重新創(chuàng)建實(shí)際的 Java 對象。因此,當(dāng)不受信任的數(shù)據(jù)被用來濫用應(yīng)用程序的邏輯時,就會發(fā)生不安全的反序列化。
當(dāng)應(yīng)用程序讀取反序列化數(shù)據(jù)后,或造成應(yīng)用程序崩潰,導(dǎo)致拒絕服務(wù) (DoS) 條件,甚至帶來更為糟糕的結(jié)果,即執(zhí)行攻擊者的任意代碼。
最初該漏洞由安全研究員 Arjun Shibu 發(fā)現(xiàn),并上報給了 TensorFlow 項(xiàng)目的維護(hù)者。
來自 Coalfire 的管理負(fù)責(zé)人 Andrew Barratt 解釋稱,只要大多數(shù)高級語言支持基于對象的數(shù)據(jù)格式,反序列化錯誤就一直存在,甚至出現(xiàn)在解析數(shù)據(jù)流以獲取常見結(jié)構(gòu)之前。Barratt 說,使用常見結(jié)構(gòu)化格式的處理對象往往需要訪問大塊內(nèi)存,因此解析過程中的錯誤總是會導(dǎo)致數(shù)據(jù)泄漏到內(nèi)存區(qū)域,攻擊者可能會操縱這些區(qū)域以進(jìn)行遠(yuǎn)程代碼執(zhí)行。
此次,這個 YAML 反序列化漏洞的嚴(yán)重性被標(biāo)記為 9.3 等級,影響范圍較為廣泛。據(jù)悉,本次漏洞影響 TensorFlow 2.3.2、2.4.2 與 2.5.0 版本,Keras 的 0.1.0 到 2.6.0 版本均受影響。
作為解決方案,在宣布棄用 YAML 之后,TensorFlow 團(tuán)隊(duì)建議開發(fā)者以 JSON 替代 YAML 序列化,或使用 H5 序列化作為替代。與此同時,TensorFlow 官方有望在 2.6.0 版本中修復(fù)該漏洞,屆時,也早期版本如 2.5.1、2.4.3 和 2.3.4 也會進(jìn)行修復(fù)。
最后值得注意的是,TensorFlow 并不是第一個或唯一一個使用 YAML 的unsafe_load 的項(xiàng)目,該函數(shù)在 GitHub 的 Python 項(xiàng)目中相當(dāng)普遍,對此,一些開發(fā)者建議道,這些項(xiàng)目應(yīng)及時解決這個問題,使用這些項(xiàng)目的開發(fā)人員也應(yīng)注意安全。
參考:https://www.bleepingcomputer.com/news/security/googles-tensorflow-drops-yaml-support-due-to-code-execution-flaw/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/119556.html
摘要:學(xué)習(xí)利器我的小白安裝之路序易用,但用好卻不易,其中比較頭疼的就是包管理和不同版本的問題,特別是當(dāng)你使用的時候。另外值得一提的是,并不僅僅管理的工具包,它也能安裝非的包。 Python學(xué)習(xí)利器——我的小白 Anaconda安裝之路 序 Python易用,但用好卻不易,其中比較頭疼的就是包管理和Python不同版本的問題,特別是當(dāng)你使用Windows的時候。為了解決這些問題,有不少發(fā)行版的...
摘要:指定篩選條件選擇合適的狀態(tài)碼應(yīng)答中,需要帶一個很重要的字段。返回結(jié)果針對不同操作,服務(wù)器向用戶返回的結(jié)果應(yīng)該符合以下規(guī)范。如果狀態(tài)碼是,就應(yīng)該向用戶返回出錯信息。 什么是 RESTful 什么是REST REST(英文:Representational State Transfer,又稱具象狀態(tài)傳輸)是Roy Thomas Fielding博士于2000年在他的博士論文 中提出來的一種...
摘要:型網(wǎng)絡(luò)這是容器的默認(rèn)網(wǎng)絡(luò)類型,網(wǎng)橋模式意味著容器間可以互相通信,而對外的通信需要借助宿主機(jī),這一形式通常表現(xiàn)為端口號的映射。 以下記錄 Docker 中的常用操作、指令,使得大家能夠快速地使用 Docker。 為什使用 Docker? 為什么要使用 Docker?就個人而言,Docker 能提供的最大便利在于這種技術(shù)面對程序環(huán)境遷移時所表現(xiàn)的卓越性。 這種性能使得我們不必在分享代碼或項(xiàng)...
摘要:它使用機(jī)器學(xué)習(xí)來解釋用戶提出的問題,并用相應(yīng)的知識庫文章來回應(yīng)。使用一類目前較先進(jìn)的機(jī)器學(xué)習(xí)算法來識別相關(guān)文章,也就是深度學(xué)習(xí)。接下來介紹一下我們在生產(chǎn)環(huán)境中配置模型的一些經(jīng)驗(yàn)。 我們?nèi)绾伍_始使用TensorFlow ?在Zendesk,我們開發(fā)了一系列機(jī)器學(xué)習(xí)產(chǎn)品,比如的自動答案(Automatic Answers)。它使用機(jī)器學(xué)習(xí)來解釋用戶提出的問題,并用相應(yīng)的知識庫文章來回應(yīng)。當(dāng)用戶有...
閱讀 3688·2021-10-13 09:40
閱讀 3148·2021-10-09 09:53
閱讀 3550·2021-09-26 09:46
閱讀 1848·2021-09-08 09:36
閱讀 4247·2021-09-02 09:46
閱讀 1313·2019-08-30 15:54
閱讀 3178·2019-08-30 15:44
閱讀 1022·2019-08-30 11:06