当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 19:05:23 PHP

由于代码执行缺陷,TensorFlow已弃用YAML。建议改用JSON。在最新版本中,谷歌删除了YAML以解决不受信任的反序列化漏洞的实现。据悉,编号为CVE-2021-37678的漏洞由研究人员ArjunShibu提交给谷歌,严重程度较高,CVSS评分为9.3。YAML是一种更具可读性的数据序列化表达格式。研究人员发现,当TensorFlow代码加载yaml.unsafe_load()函数时,攻击者可以利用该漏洞以反序列化的yaml格式在应用程序提供的Keras模型上执行任意代码。通常,当应用程序从不真实的来源读取格式错误或恶意的数据时,很容易发生反序列化漏洞。此时,TensorFlow中的反序列化漏洞可能会导致DoS崩溃或拒绝服务。更糟糕的是,这个漏洞甚至可以执行任意代码。以上就是为什么“yaml.unsafe_load()”函数漏洞的CVSS评分为9.3outof10并且“臭名昭著”的原因。众所周知,“unsafe_load”函数以一种相当宽松的方式反序列化YAML数据,并且可以解析所有标签,包括已知不受信任的标签。这意味着理想情况下,unsafe_load只应在没有任何恶意内容的可信源输入上调用。否则,攻击者可以通过将恶意负载注入尚未序列化的YAML数据来利用反序列化机制来执行所需代码。关于漏洞概念的漏洞咨询的PoC示例证实了这一点:fromtensorflow.kerasimportmodelpayload='''!!python/object/new:typeargs:['z',!!python/tuple[],{'extend':!!python/name:exec}]listitems:"__import__('os').system('cat/etc/passwd')"'''models.model_from_yaml(payload)因为这个,在研究人员将此漏洞通知谷歌后,TensorFlow维护人员决定完全放弃使用YAML,转而使用JSON反序列化。“鉴于YAML格式支持需要大量工作,我们现在已将其删除,”同一项目咨询中的维护者说,“引发RuntimeError的Model.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版本也将得到修复,使用该项目的开发者也应及时升级至最新版本。