TensorFlow 因代码执行缺陷已弃用 YAML ,建议使用 JSON 来替代

MissD -
TensorFlow 因代码执行缺陷已弃用 YAML ,建议使用 JSON 来替代

据外媒报道,由于安全缺陷,由谷歌提供的开源机器学习和人工智能项目—— TensorFlow 已经放弃了对 YAML 的支持。在最新版本中,Google 已将 YAML 删除,以解决不受信任的反序列化漏洞执行问题。

据悉,本次编号为 CVE-2021-37678 的漏洞 ,是由研究员 Arjun Shibu 提交给谷歌的,其严重程度较高,CVSS 得分为 9.3 。

YAML 是一种更可读的格式,用于表示数据序列化。研究人员发现,当 TensorFlow 代码加载 yaml.unsafe_load()函数时,攻击者可通过该漏洞,在应用程序反序列化 yaml 格式提供的 Keras 模型上执行任意代码。

通常,反序列化漏洞容易发生在应用程序从不真实的源读取格式错误或恶意数据之时,此时 TensorFlow 中的反序列化漏洞,可能导致 DoS 崩溃或拒绝服务。更糟糕的是,此漏洞甚至可以执行任意代码。

以上,就是为什么 “yaml.unsafe_load()” 函数漏洞的 CVSS 得分高达 9.3 分(满分 10 分),且“臭名昭著”的原因。

众所周知,“unsafe_load” 函数反序列化 YAML 数据的方式相当宽松,并可以解析所有标记,包括已知不受信任的标记。

这意味着在理想情况下,unsafe_load 应该只在没有任何恶意内容的可信源输入上调用。否则,攻击者则可以利用反序列化机制,通过将恶意负载注入到尚未序列化的 YAML 数据中,以执行想要执行的代码。

一项关于漏洞概念脆弱性咨询的 PoC 示例,证实了这一点:

从 tensorflow.keras 导入模型有效载荷 = ''' !!python/object/new:type args: ['z', !!python/tuple [], {'extend': !!python/name:exec }] listitems: "__import__('os').system('cat /etc/passwd')" ''' models.model_from_yaml(payload)

正因为如此,在研究人员通知 Google 该漏洞后,TensorFlow 的维护人员决定完全放弃 YAML的使用,转而使用 JSON 反序列化。

“鉴于YAML格式支持需要大量工作,现在我们已经删除了它,”同一项目咨询中的维护人员称,“引发RuntimeErrorModel.to_yaml()keras.models.Model_from_yaml已被替换,因为它们可能被滥用而导致任意代码执行”。同时,维护人员解释了与修复相关的发行说明。

同时,维护人员还举例说明了 YAML 导致的其他漏洞和修复。维护人员建议开发人员使用 JSON 反序列化而不是 YAML,或使用 H5 序列化等更好的替代方法。

值得注意的是,TensorFlow 并不是唯一使用 YAML 不安全加载函数的项目。在 Github 上搜索可以发现大量 Python 项目使用该不安全函数。

鉴于潜在的安全问题,研究人员建议,这些项目应及时解决这个问题,使用这些项目的开发人员也应注意安全。

据了解,TensorFlow 有望解决版本 2.6.0 中的漏洞问题,即删除 YAML 支持。届时,2.5.1、2.4.3 和 2.3.4 的早期版本也将被修复,使用该项目的开发人员也应及时升级到最新版本。

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

pythonphp安全

扩展阅读

加个好友,技术交流

1628738909466805.jpg