摘要:据公告称,和的包装库使用了不安全的函数来反序列化编码的机器学习模型。简单来看,序列化将对象转换为字节流。据悉,本次漏洞影响与版本,的到版本均受影响。作为解决方案,在宣布弃用之后,团队建议开发者以替代序列化,或使用序列化作为替代。
TensorFlow,作为一个主流的开源 Python 库,最初由 Google 开发用于机器学习领域,逐渐成为 GitHub 顶级开源 TOP 10 项目之一。
近日,Google TensorFlow 项目团队宣布了一项重大的改变,由于存在一个关键代码执行漏洞,其取消对另一种标记语言 YAML 的支持。TensorFlow 团队表示,鉴于 YAML 支持需要大量工作,因此暂时删除了 YAML。
YAML 是一种可读性高,用来表达资料序列化的格式。开发者常用 YAML 作为通用格式来存储数据并在进程和应用程序之间传递对象。据 GitHub 公告称,TensorFlow 和 Keras(TensorFlow 的包装库)使用了不安全的函数来反序列化 YAML 编码的机器学习模型。
上文所提及的不安全函数指的是 “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/
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119556.html
摘要:学习利器我的小白安装之路序易用,但用好却不易,其中比较头疼的就是包管理和不同版本的问题,特别是当你使用的时候。另外值得一提的是,并不仅仅管理的工具包,它也能安装非的包。 Python学习利器——我的小白 Anaconda安装之路 序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的...
摘要:指定筛选条件选择合适的状态码应答中,需要带一个很重要的字段。返回结果针对不同操作,服务器向用户返回的结果应该符合以下规范。如果状态码是,就应该向用户返回出错信息。 什么是 RESTful 什么是REST REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文 中提出来的一种...
摘要:型网络这是容器的默认网络类型,网桥模式意味着容器间可以互相通信,而对外的通信需要借助宿主机,这一形式通常表现为端口号的映射。 以下记录 Docker 中的常用操作、指令,使得大家能够快速地使用 Docker。 为什使用 Docker? 为什么要使用 Docker?就个人而言,Docker 能提供的最大便利在于这种技术面对程序环境迁移时所表现的卓越性。 这种性能使得我们不必在分享代码或项...
摘要:它使用机器学习来解释用户提出的问题,并用相应的知识库文章来回应。使用一类目前较先进的机器学习算法来识别相关文章,也就是深度学习。接下来介绍一下我们在生产环境中配置模型的一些经验。 我们如何开始使用TensorFlow 在Zendesk,我们开发了一系列机器学习产品,比如的自动答案(Automatic Answers)。它使用机器学习来解释用户提出的问题,并用相应的知识库文章来回应。当用户有...
阅读 3625·2021-10-13 09:40
阅读 3074·2021-10-09 09:53
阅读 3514·2021-09-26 09:46
阅读 1800·2021-09-08 09:36
阅读 4198·2021-09-02 09:46
阅读 1258·2019-08-30 15:54
阅读 3045·2019-08-30 15:44
阅读 990·2019-08-30 11:06