TensorFlow 因代碼執(zhí)行漏洞將棄用 YAML,推薦開(kāi)發(fā)者改用 JSON
Tensorflow 是一個(gè)基于 Python 的機(jī)器學(xué)習(xí)和人工智能項(xiàng)目,該項(xiàng)目由 Google 開(kāi)發(fā)。近日 TensorFlow 已經(jīng)放棄了對(duì) YAML 的支持,以修復(fù)一個(gè)關(guān)鍵的代碼執(zhí)行漏洞。
YAML 或 YAML Ain't Markup Language 是一種人類可讀的數(shù)據(jù)序列化語(yǔ)言,用于在進(jìn)程和應(yīng)用程序之間傳遞對(duì)象和存儲(chǔ)數(shù)據(jù),許多 Python 應(yīng)用程序都使用 YAML 來(lái)序列化和反序列化對(duì)象。
該漏洞的 CVE ID 為 CVE-2021-37678。TensorFlow 和 Keras(TensorFlow 的一個(gè)封裝項(xiàng)目)的維護(hù)者表示,該漏洞源于對(duì) YAML 的不安全解析,漏洞會(huì)在應(yīng)用程序反序列化以 YAML 格式提供的 Keras 模型時(shí),使攻擊者可以執(zhí)行任意代碼。反序列化漏洞通常發(fā)生在應(yīng)用程序讀取來(lái)自非真實(shí)來(lái)源的不良或惡意數(shù)據(jù)時(shí)。
這個(gè) YAML 反序列化漏洞的嚴(yán)重程度被評(píng)為 9.3 級(jí),由安全研究員 Arjun Shibu 報(bào)告給 TensorFlow 維護(hù)者。
這個(gè)漏洞的來(lái)源是 TensorFlow 代碼中臭名昭著的 "yaml.unsafe_load()" 函數(shù)。
安全研究員 Arjun Shibu 表示,"我在 TensorFlow 中搜索了 Pickle 和 PyYAML 的反序列化模式,令人驚訝的是,我發(fā)現(xiàn)了對(duì)危險(xiǎn)函數(shù) yaml.unsafe_load() 的調(diào)用。"
眾所周知,"unsafe_load" 函數(shù)可以對(duì) YAML 數(shù)據(jù)進(jìn)行相當(dāng)自由的反序列化 —— 它解析了所有的標(biāo)簽,即使是那些不受信任的輸入上已知不安全的標(biāo)簽。該函數(shù)直接加載 YAML 輸入而不對(duì)其進(jìn)行清理,這使得使用惡意代碼注入數(shù)據(jù)成為可能。
序列化的使用在機(jī)器學(xué)習(xí)應(yīng)用中非常普遍。訓(xùn)練模型是一個(gè)昂貴且緩慢的過(guò)程。因此,開(kāi)發(fā)人員經(jīng)常使用預(yù)先訓(xùn)練好的模型,這些模型已經(jīng)存儲(chǔ)在 YAML 或 TensorFlow 等 ML 庫(kù)支持的其他格式中。
在該漏洞被披露后,TensorFlow 的維護(hù)者決定完全放棄對(duì) YAML 的支持,而使用 JSON 進(jìn)行反序列化。值得注意的是,TensorFlow 并不是第一個(gè)、也不是唯一一個(gè)被發(fā)現(xiàn)使用 YAML unsafe_load 的項(xiàng)目。該函數(shù)的使用在 Python 項(xiàng)目中是相當(dāng)普遍的。
TensorFlow 的維護(hù)者表示,CVE-2021-37678 漏洞將于 TensorFlow 2.6.0 版本的更新中進(jìn)行修復(fù),并且還將被回傳到之前的 2.5.1、2.4.3 和 2.3.4 版本。自年初以來(lái),Google 已經(jīng)在 TensorFlow 上修復(fù)了 100 多個(gè)安全漏洞。
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:TensorFlow 因代碼執(zhí)行漏洞將棄用 YAML,推薦開(kāi)發(fā)者改用 JSON
本文地址:https://www.oschina.net/news/159014/deserialization-bug-in-tensorflow