据外媒报道,因为平安缺点,由谷歌提供的开源机器学习和人工智能我的项目—— 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 格局反对须要大量工作,当初咱们曾经删除了它,”同一我的项目征询中的保护人员称,“引发 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 的晚期版本也将被修复,应用该项目标开发人员也应及时降级到最新版本。