tensorflow删除yaml支持,建议json作为替补方案!

苏小宓 苏小宓     2022-12-31     500

关键词:

TensorFlow,作为一个主流的开源 Python 库,最初由 Google 开发用于机器学习领域,逐渐成为 GitHub 顶级开源 TOP 10 项目之一。

近日,Google TensorFlow 项目团队宣布了一项重大的改变,由于存在一个关键代码执行漏洞,其取消对另一种标记语言 YAML 的支持。TensorFlow 团队表示,鉴于 YAML 支持需要大量工作,因此暂时删除了 YAML。

YAML 是一种可读性高,用来表达资料序列化的格式。开发者常用 YAML 作为通用格式来存储数据并在进程和应用程序之间传递对象。据 GitHub 公告称,TensorFlow 和 Keras(TensorFlow 的包装库)使用了不安全的函数来反序列化 YAML 编码的机器学习模型。

臭名昭著的 “yaml.unsafe_load()”函数

上文所提及的不安全函数指的是 “yaml.unsafe_load()”函数(https://github.com/tensorflow/tensorflow/blob/460e000de3a83278fb00b61a16d161b1964f15f4/tensorflow/python/keras/saving/model_config.py#L100),其中“unsafe_load”函数可以相当自由地反序列化 YAML 数据,它能够解析所有标签,“即使是那些在不受信任的输入上不安全的标签”。

而这样的漏洞会带来怎样的后果?

事实上,在理想情况下,“unsafe_load”应该只在没有任何恶意内容的可信源输入上调用。反之,攻击者可以利用反序列化机制,通过在尚未序列化的 YAML 数据中注入恶意负载来执行他们选择的代码。

对此,安全研究人员追踪发现,这个关键漏洞可使攻击者能够在应用程序反序列化以 YAML 格式提供的 Keras 模型时执行任意代码,其将该漏洞称之为 CVE-2021-37678。

简单来看,序列化将对象转换为字节流。反序列化则可以视为与序列化相反的过程,其中使用字节流在内存中重新创建实际的 Java 对象。因此,当不受信任的数据被用来滥用应用程序的逻辑时,就会发生不安全的反序列化。

当应用程序读取反序列化数据后,或造成应用程序崩溃,导致拒绝服务 (DoS) 条件,甚至带来更为糟糕的结果,即执行攻击者的任意代码。

最初该漏洞由安全研究员 Arjun Shibu 发现,并上报给了 TensorFlow 项目的维护者。

来自 Coalfire 的管理负责人 Andrew Barratt 解释称,只要大多数高级语言支持基于对象的数据格式,反序列化错误就一直存在,甚至出现在解析数据流以获取常见结构之前。Barratt 说,使用常见结构化格式的处理对象往往需要访问大块内存,因此解析过程中的错误总是会导致数据泄漏到内存区域,攻击者可能会操纵这些区域以进行远程代码执行。

解决方案

此次,这个 YAML 反序列化漏洞的严重性被标记为 9.3 等级,影响范围较为广泛。据悉,本次漏洞影响 TensorFlow 2.3.2、2.4.2 与 2.5.0 版本,Keras 的 0.1.0 到 2.6.0 版本均受影响。

作为解决方案,在宣布弃用 YAML 之后,TensorFlow 团队建议开发者以 JSON 替代 YAML 序列化,或使用 H5 序列化作为替代。与此同时,TensorFlow 官方有望在 2.6.0 版本中修复该漏洞,届时,也早期版本如 2.5.1、2.4.3 和 2.3.4 也会进行修复。

最后值得注意的是,TensorFlow 并不是第一个或唯一一个使用 YAML 的unsafe_load 的项目,该函数在 GitHub 的 Python 项目中相当普遍,对此,一些开发者建议道,这些项目应及时解决这个问题,使用这些项目的开发人员也应注意安全。

参考:https://www.bleepingcomputer.com/news/security/googles-tensorflow-drops-yaml-support-due-to-code-execution-flaw/

yaml有漏洞被弃用?网友:yaml不背锅!

...送达文|Travis出品|OSC开源社区(ID:oschina2013)Tensorflow是一个基于Python的机器学习和人工智能项目,该项目由Google开发。近日TensorFlow已经放弃了对YAML的支持,以修复一个关键的代码执行漏洞。YAML或YAMLAin't 查看详情

Git 日志输出到 XML、JSON 还是 YAML?

...件中,最好是某种序列化格式,如XML、JSON或YAML。有什么建议吗?【问题讨论】:【参考方案1】:输出到文件:gitlog>filename.log指定一种格 查看详情

yaml文件详解(代码片段)

yaml文件详解一.yaml文件详解一.yaml文件详解Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读YAML语法格... 查看详情

yaml文件详解(代码片段)

yaml文件详解一.yaml文件详解一.yaml文件详解Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读YAML语法格... 查看详情

k8s-yaml文件(代码片段)

文章目录一、K8S支持的文件格式1、yaml和json的主要区别2、YAML语言格式二、YAML1、查看API资源版本标签2、编写资源配置清单2.1编写nginx-test.yaml资源配置清单2.2创建资源对象2.3查看创建的pod资源3、创建service服务对外提供访问并测... 查看详情

现代配置指南——yaml比json高级在哪

...其他模块,因此会选择js文件。还有现在许多新工具同时支持多种配置,比如Eslint,两种格式的配置任你选择:后来不知道什么时候,突然出现了一种以.yaml或.yml为后缀的配置文件。一开始以为是某个程序的专有配置,后来发现... 查看详情

pytest+yaml框架-19.根据swagger.json自动生成yaml格式自动化用例(代码片段)

...要求Python大于等于3.8版本,(低于python3.8版本不支持)Pytest7.2.0最新版pip安装插件,最新版本v1.1.5pipinstallpytest-yaml-yoyo使用示例目前支持2中方式生成yaml用例。1.如果有本地的swagger.json文件,可以放到项目根目录,... 查看详情

其他-yaml入门(代码片段)

...子#输入1234#转换'1234'我的想法虽然转换成功,但是不建议使用为啥非要用YAML来存放普通文本呢2.注释概述YAML的注释注释格式开始以#开头位置行首整行都被视为注释行中符号#右侧的字符,被视为注释格式符号#和注释内容之间,... 查看详情

yaml概述(代码片段)

...3.Serviceyaml文件详解三.YAML文件相关操作一.YAML概述Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递。YAML格式:用于配置和管理,YAM是一种简洁的非标记性语言,内容格式人性化&# 查看详情

yaml文件解析(代码片段)

...现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格式∶主要用于api接口之间消息的传递YAML格式∶用于配置和管理,YAML是一种简洁的 查看详情

yaml文件解析(代码片段)

...现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格式∶主要用于api接口之间消息的传递YAML格式∶用于配置和管理,YAML是一种简洁的 查看详情

yaml文件解析(代码片段)

...现有的资源生成模板导出生成yaml文件yaml文件解析Kubernetes支持YAML和JSON格式管理资源对象JSON格式∶主要用于api接口之间消息的传递YAML格式∶用于配置和管理,YAML是一种简洁的 查看详情

rendererssalt渲染器

...inja模板的样子,然后模板会被解析成YAML格式的数据,salt支持多种模板。目前模板的支持情况如下:   Jinja+YAML,Mako+YAML,Wempy+YAML,Jinja+json,Mako+jsonandWempy+json Renderers可以 查看详情

yaml文件详解(代码片段)

...结写yaml太累怎么办yaml文件的学习方法:一、概述Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,容易读YAML语... 查看详情

k8s------yaml文件详解及示例(代码片段)

...3.Serviceyaml文件详解三.YAML文件相关操作一.YAML概述Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递。YAML格式:用于配置和管理,YAM是一种简洁的非标记性语言,内容格式人性化&# 查看详情

k8s------yaml文件详解及示例(代码片段)

...3.Serviceyaml文件详解三.YAML文件相关操作一.YAML概述Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递。YAML格式:用于配置和管理,YAM是一种简洁的非标记性语言,内容格式人性化&# 查看详情

k8s------yaml文件详解及示例(代码片段)

...3.Serviceyaml文件详解三.YAML文件相关操作一.YAML概述Kubernetes支持YAML和JSON格式管理资源对象JSON格式:主要用于api接口之间消息的传递。YAML格式:用于配置和管理,YAM是一种简洁的非标记性语言,内容格式人性化&# 查看详情

如何将训练有素的 Tensorflow 模型转换为 Keras?

】如何将训练有素的Tensorflow模型转换为Keras?【英文标题】:HowcanIconvertatrainedTensorflowmodeltoKeras?【发布时间】:2017-11-1123:02:24【问题描述】:我有一个训练有素的Tensorflow模型和权重向量,它们已分别导出到protobuf和权重文件。如... 查看详情