TensorFlow因代码执行漏洞将弃用YAML!推荐开发者改用JSON

出品|开源中国
作者|Travis
Tensorflow是一个基于Python的机器学习和人工智能项目 , 该项目由Google开发 。 近日TensorFlow已经放弃了对YAML的支持 , 以修复一个关键的 。
TensorFlow因代码执行漏洞将弃用YAML!推荐开发者改用JSON
文章图片
YAML或YAMLAin'tMarkupLanguage是一种人类可读的数据序列化语言 , 用于在进程和应用程序之间传递对象和存储数据 , 许多Python应用程序都使用YAML来序列化和反序列化对象 。
该漏洞的CVEID为CVE-2021-37678 。 TensorFlow和Keras(TensorFlow的一个封装项目)的维护者表示 , 该漏洞源于对YAML的不安全解析 , 漏洞会在应用程序反序列化以YAML格式提供的Keras模型时 , 使攻击者可以执行任意代码 。 反序列化漏洞通常发生在应用程序读取来自非真实来源的不良或恶意数据时 。
这个YAML反序列化漏洞的严重程度被评为9.3级 , 由安全研究员ArjunShibu报告给TensorFlow维护者 。
TensorFlow因代码执行漏洞将弃用YAML!推荐开发者改用JSON
文章图片
TensorFlow因代码执行漏洞将弃用YAML!推荐开发者改用JSON】这个漏洞的来源是TensorFlow代码中臭名昭著的"yaml.unsafe_load"函数 。
安全研究员ArjunShibu表示 , "我在TensorFlow中搜索了Pickle和PyYAML的反序列化模式 , 令人惊讶的是 , 我发现了对危险函数yaml.unsafe_load的调用 。 "
众所周知 , "unsafe_load"函数可以对YAML数据进行相当自由的反序列化——它解析了所有的标签 , 即使是那些不受信任的输入上已知不安全的标签 。 该函数直接加载YAML输入而不对其进行清理 , 这使得使用恶意代码注入数据成为可能 。
序列化的使用在机器学习应用中非常普遍 。 训练模型是一个昂贵且缓慢的过程 。 因此 , 开发人员经常使用预先训练好的模型 , 这些模型已经存储在YAML或TensorFlow等ML库支持的其他格式中 。
TensorFlow因代码执行漏洞将弃用YAML!推荐开发者改用JSON
文章图片
在该漏洞被披露后 , TensorFlow的维护者决定完全放弃对YAML的支持 , 而使用JSON进行反序列化 。 值得注意的是 , TensorFlow并不是第一个、也不是唯一一个被发现使用YAMLunsafe_load的项目 。 该函数的使用在Python项目中是相当普遍的 。
TensorFlow的维护者表示 , CVE-2021-37678漏洞将于TensorFlow2.6.0版本的更新中进行修复 , 并且还将被回传到之前的2.5.1、2.4.3和2.3.4版本 。 自年初以来 , Google已经在TensorFlow上修复了 。