为修复一个代码执行安全漏洞,TensorFlow决定不再支持YAML
TensorFlow是谷歌開發(fā)的基于Python的機器學(xué)習(xí)和人工智能項目。為修復(fù)一個代碼執(zhí)行安全漏洞,TensorFlow決定不再支持YAML。YAML(Yet Another Markup Language)是一個可讀性高,用來表達數(shù)據(jù)序列化的格式。YAML參考了其他多種語言,包括C語言、Python、Perl,并從XML、電子郵件的數(shù)據(jù)格式。
CVE-2021-37678:TensorFlow不可信反序列化漏洞
安全研究人員Arjun Shibu在TensorFlow和Keras中發(fā)現(xiàn)了一個安全漏洞——CVE-2021-37678。該漏洞是由于不安全處理YAML引發(fā)的不可信反序列化漏洞,攻擊者利用該漏洞可以在應(yīng)用反序列化YAML格式中的Keras模型時執(zhí)行任意代碼。該YAML反序列化漏洞CVSS 評分為9.3分。反序列化漏洞主要發(fā)生于應(yīng)用從不可信的源讀取偽造的或惡意數(shù)據(jù)的情況。應(yīng)用在讀取和反序列化數(shù)據(jù)后,可能會引發(fā)DoS攻擊條件甚至執(zhí)行攻擊者的任意代碼。
漏洞來源于TensorFlow的yaml.unsafe_load()函數(shù):
TensorFlow中有漏洞的yaml.unsafe_load()函數(shù)調(diào)用
unsafe_load函數(shù)的作用是反序列化YAML數(shù)據(jù),該函數(shù)會解析所有的標(biāo)簽,包括來自不安全或不可信的輸入。理想情況下,unsafe_load函數(shù)只有在輸入來源于可信源時被調(diào)用。但攻擊者利用通過在已經(jīng)序列化的YAML數(shù)據(jù)中注入惡意payload來利用該機制執(zhí)行代碼。
該漏洞的PoC利用代碼如下所示:
from tensorflow.keras import modelspayload = ''' !!python/object/new:type args: ['z', !!python/tuple [], {'extend': !!python/name:exec }] listitems: "__import__('os').system('cat /etc/passwd')" '''models.model_from_yaml(payload)TensorFlow不再支持YAML
該漏洞提交后,TensorFlow決定啟用YAML支持,并使用JSON反序列化。
但TensorFlow并不是唯一使用YAML unsafe_load的項目,該函數(shù)被廣泛應(yīng)用于Python項目中。GitHub顯示有上千個引用該函數(shù)的搜索結(jié)果,目前已經(jīng)有開發(fā)者提出了解決方案:

【網(wǎng)安學(xué)習(xí)資料】
總結(jié)
以上是生活随笔為你收集整理的为修复一个代码执行安全漏洞,TensorFlow决定不再支持YAML的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 渗透操作系统——【靶场实战训练营】快来看
- 下一篇: CVE-2021-40444 0 day