TensorFlow,作為一個主流的開源 Python 庫,最初由 Google 開發用于機器學習領域,逐漸成為 GitHub 頂級開源 TOP 10 專案之一,
近日,Google TensorFlow 專案團隊宣布了一項重大的改變,由于存在一個關鍵代碼執行漏洞,其取消對另一種標記語言 YAML 的支持,TensorFlow 團隊表示,鑒于 YAML 支持需要大量作業,因此暫時洗掉了 YAML,
YAML 是一種可讀性高,用來表達資料序列化的格式,開發者常用 YAML 作為通用格式來存盤資料并在行程和應用程式之間傳遞物件,據 GitHub 公告稱,TensorFlow 和 Keras(TensorFlow 的包裝庫)使用了不安全的函式來反序列化 YAML 編碼的機器學習模型,

臭名昭著的 “yaml.unsafe_load()”函式
上文所提及的不安全函式指的是 “yaml.unsafe_load()”函式(https://github.com/tensorflow/tensorflow/blob/460e000de3a83278fb00b61a16d161b1964f15f4/tensorflow/python/keras/saving/model_config.py#L100),其中“unsafe_load”函式可以相當自由地反序列化 YAML 資料,它能夠決議所有標簽,“即使是那些在不受信任的輸入上不安全的標簽”,

而這樣的漏洞會帶來怎樣的后果?
事實上,在理想情況下,“unsafe_load”應該只在沒有任何惡意內容的可信源輸入上呼叫,反之,攻擊者可以利用反序列化機制,通過在尚未序列化的 YAML 資料中注入惡意負載來執行他們選擇的代碼,
對此,安全研究人員追蹤發現,這個關鍵漏洞可使攻擊者能夠在應用程式反序列化以 YAML 格式提供的 Keras 模型時執行任意代碼,其將該漏洞稱之為 CVE-2021-37678,
簡單來看,序列化將物件轉換為位元組流,反序列化則可以視為與序列化相反的程序,其中使用位元組流在記憶體中重新創建實際的 Java 物件,因此,當不受信任的資料被用來濫用應用程式的邏輯時,就會發生不安全的反序列化,
當應用程式讀取反序列化資料后,或造成應用程式崩潰,導致拒絕服務 (DoS) 條件,甚至帶來更為糟糕的結果,即執行攻擊者的任意代碼,
最初該漏洞由安全研究員 Arjun Shibu 發現,并上報給了 TensorFlow 專案的維護者,

來自 Coalfire 的管理負責人 Andrew Barratt 解釋稱,只要大多數高級語言支持基于物件的資料格式,反序列化錯誤就一直存在,甚至出現在決議資料流以獲取常見結構之前,Barratt 說,使用常見結構化格式的處理物件往往需要訪問大塊記憶體,因此決議程序中的錯誤總是會導致資料泄漏到記憶體區域,攻擊者可能會操縱這些區域以進行遠程代碼執行,
解決方案
此次,這個 YAML 反序列化漏洞的嚴重性被標記為 9.3 等級,影響范圍較為廣泛,據悉,本次漏洞影響 TensorFlow 2.3.2、2.4.2 與 2.5.0 版本,Keras 的 0.1.0 到 2.6.0 版本均受影響,
作為解決方案,在宣布棄用 YAML 之后,TensorFlow 團隊建議開發者以 JSON 替代 YAML 序列化,或使用 H5 序列化作為替代,與此同時,TensorFlow 官方有望在 2.6.0 版本中修復該漏洞,屆時,也早期版本如 2.5.1、2.4.3 和 2.3.4 也會進行修復,
最后值得注意的是,TensorFlow 并不是第一個或唯一一個使用 YAML 的unsafe_load 的專案,該函式在 GitHub 的 Python 專案中相當普遍,對此,一些開發者建議道,這些專案應及時解決這個問題,使用這些專案的開發人員也應注意安全,

參考:https://www.bleepingcomputer.com/news/security/googles-tensorflow-drops-yaml-support-due-to-code-execution-flaw/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298293.html
標籤:AI
