当前位置: 首页 > 科技观察

由于代码执行漏洞,TensorFlow将弃用YAML,并推荐开发者使用JSON

时间:2023-03-21 21:11:37 科技观察

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